Coding Code 支持跨会话的长期记忆:自动从对话中提取关键信息,并在下一次会话开始时重新注入。本文档介绍记忆文件、自动提取机制和手动编辑方法。
记忆存储为单个 Markdown 文件:
.codingcode/memory.md
整个文件就是长期记忆,没有分区、没有标记块。文件的全部内容会作为记忆注入,也会作为"已有记忆"参与下一次提取。
### 项目
- 采用 monorepo 架构,使用 pnpm workspaces
- 入口文件:packages/codingcode/src/cli.ts
### 用户偏好
- 偏好结构化 Markdown 输出记忆模式开启后,Agent 在会话结束时自动执行记忆更新:
- 读取记忆文件全文作为"已有记忆"
- 将会话记录(按
[user]/[assistant]/[tool:名称]标注)与已有记忆一起发送给 LLM - LLM 输出整份最新版记忆,放在
<memory>...</memory>块中 - 直接用输出内容整体替换记忆文件(受字节上限约束)
模型自行决定更新哪些内容:可以新增条目、修改过时信息、删除不再相关的内容,代码不做"模型只改动哪部分"的任何假设。若模型没有输出有效内容、或输出与当前文件一致,则不写入。
提取行为的规范全部写在提示词中,代码不感知记忆内容结构:
- 只保留值得跨会话记住的信息:用户偏好与纠正、项目架构决策、技术选型、外部资源与链接等
- 忽略一次性任务、调试过程、报错堆栈、闲聊
- 输出必须是一份完整、自洽的最新记忆,而不是只输出变动部分
- 新旧信息矛盾时以最新为准
- 记忆用
### 主题小节组织,小节下用-列要点
提取使用的模型可通过 memory.model 配置,留空则回退到主会话模型。
记忆文件就是普通 Markdown,用户可以直接编辑:
- 手动写下的内容会在下次会话时作为记忆注入 Agent
- 手动编辑也会被下一次自动提取作为"已有记忆"读到;保留、修改还是删除由模型根据后续对话自行决定
- 自动提取在写入前会重新检查文件:若提取期间文件被手动改动,则放弃本次写入,避免覆盖用户编辑
在 ~/.codingcode/config.yaml 中配置记忆系统:
memory:
enabled: true # 启用长期记忆(默认 false)
model: "" # 记忆提取模型,空字符串回退到主模型
promptMaxBytes: 8192 # 注入提示词的记忆内容最大字节数记忆文件本身有 16KB 的硬上限,超限时按 ### 小节从后往前裁掉超出部分。