跳到主要内容

记忆系统

CountBot 的长期记忆系统基于文件存储实现,核心目标是让模型可以把稳定事实沉淀到工作空间中,并通过统一的 memory 工具完成追加、搜索、读取和统计。

设计理念

  1. 长期记忆落在工作空间里,用户可以直接查看和编辑。
  2. 存储结构尽量简单,便于审计、迁移和手工修复。
  3. 上层通过统一工具接口访问,不要求业务代码感知底层文件格式。
  4. 会话历史超出窗口后,可以自动总结并沉淀到长期记忆。

存储位置

默认记忆文件位于:

workspace/memory/MEMORY.md

每一行表示一条记忆记录,格式大致如下:

日期|来源|内容项1;内容项2;内容项3

常见来源包括:

  • web-chat
  • telegram
  • dingtalk
  • feishu
  • cron
  • auto-overflow

MemoryStore

底层实现位于 backend/modules/agent/memory.py,核心类为 MemoryStore

当前主要能力包括:

class MemoryStore:
def append_entry(self, source: str, content: str) -> int:
...

def read_lines(self, start: int, end: Optional[int] = None) -> str:
...

def search(self, keywords: List[str], max_results: int = 15, match_mode: str = "or") -> str:
...

def get_recent(self, count: int = 10) -> str:
...

def get_stats(self) -> dict:
...

这意味着记忆系统不仅支持“写入”,还支持:

  • 按行读取
  • 关键词检索
  • 最近若干条回看
  • 基础统计

统一工具接口

对模型暴露的主要入口是 backend/modules/tools/memory_tool.py 中的 memory 工具。

它把底层文件能力整理成更稳定的操作:

  • 追加记忆
  • 搜索记忆
  • 读取指定行
  • 获取最近记忆
  • 查看统计信息

这样模型不需要直接操作 MEMORY.md,而是通过工具调用访问。

自动总结与沉淀

记忆系统和会话管理是联动的。

当前代码里,当会话历史超过窗口限制时,backend/modules/session/manager.py 会尝试:

  1. 找出超出窗口的旧消息
  2. 调用总结逻辑生成摘要
  3. 将摘要以 auto-overflow 来源写入长期记忆

对应入口可以在以下位置看到:

  • backend/modules/session/manager.py
  • backend/api/chat.py

这套机制的意义是:会话窗口可以保持轻量,但重要信息不会因为消息裁剪而完全丢失。

API 入口

除了工具调用,后端还暴露了记忆相关接口,位于 backend/api/memory.py

当前可以从接口层完成:

  • 查看统计信息
  • 获取最近记忆
  • 关键词搜索

如果你在前端或外部脚本里做诊断,这些接口会比直接读文件更方便。

使用建议

  • 把稳定事实写进记忆,不要把一次性上下文全部塞进去。
  • 内容尽量结构化,方便之后搜索。
  • 对用户偏好、项目约定、周期性任务特别有价值。
  • 如果发现总结质量不理想,优先调整沉淀规则,而不是堆大历史窗口。

相关文件

文件说明
backend/modules/agent/memory.pyMemoryStore 的文件读写实现
backend/modules/tools/memory_tool.py对模型暴露的统一记忆工具
backend/modules/session/manager.py历史溢出后的自动总结与沉淀
backend/api/memory.py记忆相关 API
workspace/memory/MEMORY.md默认长期记忆文件