未遂的诗人啊,
不要在红日沉沦后哭泣!
想以此抵御睡眠,
却容易招来他的兄长。
面对未能存在的字句,
渴念变为成瘾的毒药。
因你也是同祂一样,
从太古的虚无中诞生。

升级时间范围: 从 commit fe4db496be2b85

本次升级为增量优化升级,主要聚焦于记忆检索增强、工具系统完善与架构精简。


主要架构变更

1. Telegram 适配层重构

  • 重构 telegram/ 适配器模块边界,精简 ownership
  • 合并 telegram app runtime 模块
  • 提取 prompt 时间格式化辅助函数
  • 优化 bot 消息格式

2. 上下文事件系统统一

  • 移除: 旧的 system flow
  • 新增: 统一的上下文事件持久化机制

    • 定时任务触发持久化到会话上下文
    • 工具调用结果持久化到 context window

核心功能增强

1. 记忆检索系统重构

新增多阶检索能力

  • 向量辅助摘要召回 (vector-assisted summary recall): 当 FTS5 关键词结果稀疏时,补充向量召回的 summary 候选
  • 混合语言 n-gram 回退 (mixed-language n-gram fallback): 当 query 含中文/日文/混合脚本时,自动切换到更稳健的 n-gram 搜索路径
  • 加权融合 (weighted fusion): 对 summary 与 conversation 结果综合关键词与向量信号进行统一排序
  • 可选 Rerank: 对粗排后的小规模候选做精排(可选配置)

新增搜索控制参数

  • session-aware search targets: 支持指定只搜索当前会话或历史会话
  • search_target="summaries" | "conversations" | "all": 指定搜索目标类型
  • 新增 start_date / end_date 日期范围过滤
  • 支持 role='user'role='assistant' 角色过滤

排序信号增强

当前融合排序考量以下信号:

  • keyword_origin: 关键词命中来源
  • token_coverage: query token 在结果中的覆盖比例
  • exact_match: 完整子串匹配
  • lexical_overlap: 基于混合语言搜索单元的词法重叠度
  • vector_similarity: 向量相似度
  • recency: 时间新鲜度

2. 工具系统增强

新增内置工具

  • Tool Trace: query_tool_history - 查询最近的工具执行历史
  • File Send: 支持将生成的文件直接发送给当前用户

人机协作 (HITL)

  • 新增危险操作人工批准机制 (/approve 命令)
  • 危险 Shell 命令执行前需要用户确认

MCP 改进

  • 启动时预热 MCP tool runtime
  • 限制 MCP 响应长度,避免超长输出

3. Seele 长期记忆增强

  • 新增 LLM-based memory compaction: 使用 LLM 对 seele 记忆进行压缩整理
  • 新增 user location 到 Seele schema
  • 优化 memorable_events 结构
  • 修复 seele migration/repair 逻辑
  • 保留摘要中的消息时间戳

4. 文件处理增强

  • 支持使用文件 caption 生成合成 embedding
  • 文件上传通过系统事件管道处理
  • 优化消息中的代码块渲染

数据库结构变更

新增表/字段

  • 上下文事件表 (context_events): 存储会话中的系统事件、定时任务触发、工具调用结果

启动方式变更

无变更,延续 v0.9.1 启动方式。


代码质量改进

重构

  • 统一 async-first 内存检索流程
  • 精简 Telegram adapter ownership
  • 合并 telegram app runtime 模块
  • 重构架构与模块边界

稳定性修复

  • 修复 Telegram allowed_updates 序列化问题
  • 修复 Telegram 启动循环与超时处理
  • 修复 MCP tool call 丢失问题
  • 修复审批流程阻塞问题
  • 改进网络错误处理

优化

  • 使用 XML 风格优化 prompts
  • 优化 chat prompt
  • 减少不必要消息
  • 更好的代码块渲染

文档更新

新增/更新文档

  • docs/SEARCH_EXAMPLES.md - 扩展搜索示例,包含混合语言搜索与排序规则说明
  • AGENTS.md - 扩展 async-first 重构指南

总结

本次升级是一次增量优化升级,主要变化包括:

  1. 记忆检索大幅增强: 向量辅助召回、混合语言支持、加权融合、可选 rerank
  2. 工具系统完善: 新增 tool trace、file send、HITL 审批机制
  3. Seele 记忆增强: LLM compaction、位置信息、事件结构优化
  4. 架构精简: 统一上下文事件系统、精简 adapter ownership
  5. 稳定性提升: 多个 bug 修复与网络处理改进

这些改进使 Seelenmaschine 在记忆检索的准确性与灵活性方面有显著提升,同时增强了工具系统的可用性与安全性。

概览

项目地址:https://github.com/fluviusmagnus/Seelenmaschine

升级时间范围: 从 commit 8a6d65bfe4db49

本次升级是破坏兼容性的全面升级。请关注以下事项,并按提示进行数据迁移。


主要架构变更

1. 界面框架重构

  • 移除: Flask Web UI (完整的 Web 界面和 CLI 模式)
  • 新增: 纯 Telegram Bot 模式

    • 不再支持 Web 界面
    • 专注于 Telegram 交互体验

2. 向量数据库迁移

  • 移除: LanceDB 向量数据库
  • 新增: SQLite + sqlite-vec(内置向量扩展)

    • 无需外部向量数据库
    • 简化部署和维护

核心功能增强

1. 记忆系统重构

  • 新增完整三层记忆架构

    • 短期记忆: Context Window 管理 + 自动总结
    • 中期记忆: Embedding + Rerank 智能检索
    • 长期记忆: JSON 结构化人格与用户档案
  • 检索系统增强:

    • 二阶检索(摘要 → 对话)
    • Rerank 模型重排序
    • 时间感知的上下文注入
    • 新增 FTS5 全文搜索(支持布尔运算符)
    • 新增自我查询工具(LLM 主动搜索记忆)

2. MCP 支持增强

  • 支持多种传输方式(stdio、HTTP、SSE)
  • 工具缓存机制
  • 更好的错误处理

3. 新增定时任务系统

  • 支持一次性任务和间隔任务
  • LLM 接口管理任务
  • 数据库存储持久化

4. 新增 Profile 配置系统

  • 多环境配置支持
  • 独立数据目录(data/<profile>/
  • 启动命令:python src/main_telegram.py <profile>

代码结构重构

新增核心模块

src/
├── core/               # 核心模块
│   ├── database.py     # SQLite + sqlite-vec
│   ├── memory.py       # 记忆系统
│   ├── context.py      # Context Window 管理
│   ├── retriever.py    # 记忆检索
│   └── scheduler.py    # 定时任务
├── llm/
│   ├── client.py       # LLM 客户端
│   ├── embedding.py    # Embedding 客户端
│   └── reranker.py     # Rerank 客户端
├── tools/
│   ├── mcp_client.py
│   ├── memory_search.py
│   └── scheduled_task_tool.py
└── prompts/
    ├── system.py
    ├── summary.py
    └── memory_update.py

移除/合并模块

  • main.pymain_telegram.py
  • chatbot.py (重构整合到各模块)
  • llm.py (拆分为 llm/ 目录)
  • prompts.py (拆分到 prompts/ 目录)
  • flask_webui.py 和 templates/ 目录 (移除)
  • database_maintenance.py (移除)

配置变更

新增配置项

# Context Window
CONTEXT_WINDOW_KEEP_MIN=12
CONTEXT_WINDOW_TRIGGER_SUMMARY=24
RECENT_SUMMARIES_MAX=3

# 记忆检索
RECALL_SUMMARY_PER_QUERY=3
RECALL_CONV_PER_SUMMARY=4
RERANK_TOP_SUMMARIES=3
RERANK_TOP_CONVS=6

# MCP
ENABLE_MCP=false
MCP_CONFIG_PATH=mcp_servers.json

# 时区
TIMEZONE=Asia/Shanghai

移除的配置项

# 旧记忆系统
MAX_CONV_NUM=20
REFRESH_EVERY_CONV_NUM=10
RECALL_SESSION_NUM=2
RECALL_CONV_NUM=4

数据库结构变更

新数据库表结构 (SQLite)

-- 会话表
sessions (id, start_time, end_time, status)

-- 对话表
conversations (id, session_id, role, content, timestamp)

-- 摘要表
summaries (id, session_id, summary_text, timestamp)

-- 向量表 (sqlite-vec)
texts (text_id, text_type, text_content, vec_embedding)

-- 定时任务表
scheduled_tasks (id, task_type, trigger_time, interval_seconds, ...)

移除的存储

  • LanceDB 向量数据库
  • persona_memory.txt / user_profile.txt (合并为 seele.json)

启动方式变更

新的启动方式

# Telegram Bot
python src/main_telegram.py <profile>
./start-telegram.sh <profile>      # Linux/macOS
start-telegram.bat <profile>        # Windows

移除的启动方式

# CLI 模式
python src/main.py <profile>

# Flask Web UI
python src/main.py <profile> --flask
start-flask-webui.sh <profile>

文档更新

新增文档

  • docs/SCHEDULED_TASKS.md - 定时任务指南
  • docs/SEARCH_EXAMPLES.md - 搜索功能示例
  • migration/README.md - 数据迁移指南
  • AGENTS.md - AI 辅助开发指南

移除文档

  • MCP_USAGE.md (内容整合到 README)
  • DATABASE_MAINTENANCE_README.md

测试框架

新增测试

pytest tests/
pytest tests/test_database.py
pytest tests/test_memory.py
pytest tests/test_retriever.py
pytest tests/test_llm.py

总结

这次升级是一次重大架构重构,主要变化包括:

  1. 简化架构: 从 Flask Web UI 切换到纯 Telegram Bot
  2. 一体化存储: 从 LanceDB + SQLite 统一到 SQLite + sqlite-vec
  3. 增强的记忆系统: 完整的三层记忆架构、FTS5 全文搜索、自我查询
  4. 新增功能: 定时任务、Profile 配置系统、改进的 MCP 支持
  5. 代码质量: 模块化设计、完善的测试、详细的文档

这些变化使 Seelenmaschine 更加专注于核心功能——作为具有持久记忆和人格的 AI 助手,同时简化了部署和维护。

我只喜欢使用 Tastaturbelegung E1 („Erweiterte Tastaturbelegung 1“),也不喜欢经常切换,冒着忘记当前布局状态的风险。原因不解释。所以我会尽一切努力在任何平台使用这个布局,或者至少是 QWERTZ 布局。以前用过不少方案,效果有好有坏,有的优雅有的别扭,是时候总结一下,并更新推荐做法了。

Windows

曾经使用 AutoHotkey 的脚本强制交换 zy,并且在系统中添加如下的计划任务保证以最高权限自启:

ZYSwitch.png

这个方法虽然稳定,但是完全没有处理(难以配置的)特殊符号,需要用时还是得回忆美式键盘。

后来看到这种特殊需求也是长久存在的,且最近才有人分享,便换成了这个更便利的改注册表的方案。我原样复制如下:

  1. Start regedit
  2. Navigate to key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts
  3. You have now to search the ID of your input method. For instance Chinese (Traditional) is 00000404. Chinese (Simplified) is 00000804. For other languages you can CTRL+F. Ensure you are on the right key: Layout Text should read your selected language.
  4. Change the value of Layout File from KBDUS.DLL to KBDGR.DLL for german, KBDSF.DLL for swiss french or KBDSG.DLL for swiss german. If you need another layout, take a look on sibling keys and try to find the DLL.
  5. Reboot.

Windows 11 大概在去年第一次主动增加了对 E1 和 E2 键盘布局的支持。对我来说,正确的文件应该是 KBDGRE1.DLL。如此,无论使用何种拼音输入法,无论在何种环境下,都不会出现美式键盘布局。即使是屏幕键盘,也可实现精分状态。

Linux

直接完美支持。和 fcitx5 一起使用也不会有问题。

MacOS

这个系统的中文输入法实现机制很奇怪,总之没试成功。

iOS

使用“仓输入法”(Hamster)的自定义键盘布局功能即可实现。可惜 Gboard 这种少有自带纠错的输入法不支持,否则小屏幕输入应该更轻松。

Android

目前没找到任何办法。