Skip to content

fix(memory): 知识库检索式注入 + 心智模型/观察注入修复 - #137

Merged
error2913 merged 7 commits into
mainfrom
fix/memory-kb-injection
Aug 31, 2026
Merged

error2913 merged 7 commits into
mainfrom
fix/memory-kb-injection

Conversation

@error2913

Copy link
Copy Markdown
Owner

背景

排查确认的 5 项问题 + 新增确认的 2 项根因,本次一并修复:

  1. .ai memo mm del 删除失效delALIAS_MAP 归一化为 delete,但 mm 内部 switch 只写了 case 'del',导致无论输入 del 还是 delete 都落入 default 返回帮助文本。按“子命令统一过 alias 归一化、case 只写归一化目标值”的规则改为 case 'delete'
  2. 知识库条目全量注入:总字符 ≤ 阈值(默认 5000)时把全部分块正文注入 system prompt。改为按当前对话检索式注入(最多 5 个分块),未命中只注入限条数索引兜底。
  3. 知识库索引全量展示formatIndex 无上限,条目很多时索引也全部展示。增加 limit(注入兜底 50 / list 200)+ 总数提示。
  4. 心智模型未注入:scope 匹配用 all_strict,自定义 scope_tag 与当前会话标签不精确匹配即静默剔除。放宽为“任一命中”,并对 memory_mm_create / .ai memo mm addscope_tag 做校验归一化(非法/类型不符回退默认),增加注入 debug 日志与 .ai memo status 可见性。
  5. 心智模型没有 list 工具:新增 memory_mm_list / memory_mm_viewmemory_mm_delete 支持按 question 删除。
  6. 观察记忆只注入本会话 / 双路径重复注入:观察由长期记忆段裁剪注入 + 观察段全量注入两条路径重复渲染;且 bumpSummaryRevision 无调用点导致观察段缓存最长滞后 60 秒。改为单一路径(MEMORY 开启时由长期记忆段注入),观察段同口径裁剪,巩固后刷新缓存。
  7. 工具描述过时引用search_memorymemory_recallkb_list/kb_searchknowledge_list/knowledge_search

改动清单

  • src/cmd/sub_cmd/memory.ts:mm del 别名修复 + 按问题名/关键词删除;--tag 校验;status 显示将注入条数
  • src/memory/knowledge_base.ts / src/memory/knowledge.ts:检索式注入 + formatIndex limit
  • src/memory/manager.ts / src/memory/v2/prompt.ts / src/prompt/builder.ts:scope 放宽、观察单一路径、缓存失效修复、注入日志
  • src/tool/tools/memory/tool_memory.ts / tool_knowledge.ts:新增 list/view 工具、delete 支持 question、描述修正
  • scripts/unit-test-entry.ts:新增 5 个单测(mm del 别名、KB 索引/检索式注入、MM 段注入、观察裁剪)
  • 同步 src/changelog.ts / README.md / docs/

验证

  • npx tsc --noEmit 通过
  • npm run lint 通过
  • npm run build 通过
  • npm run test:unit:113 个单测全部通过(含新增 5 个)
  • npm run smoke 通过

- 修复 .ai memo mm del 删除失效:del 经别名归一化为 delete 后未命中删除分支返回帮助文本;
  子命令 case 统一按 aliasToCmd 归一化目标值,del/delete 均可删除,并支持按问题名/关键词删除
- 知识库改为按当前对话检索式注入(最多 5 个分块),未命中只注入前 50 条索引兜底,
  不再全量注入正文/索引;formatIndex 支持条数上限,knowledge_list/.ai kb list 上限 200 条
- 心智模型/观察注入 scope 匹配由 all_strict 放宽为任一命中,群聊不再因贡献者不在最近消息被整条剔除;
  memory_mm_create/.ai memo mm add 的 scope_tag 非法或与目标类型不符时回退默认标签
- 观察记忆只保留一条注入路径(启用长期记忆时由长期记忆段裁剪注入),观察段同口径裁剪,
  巩固生成观察后刷新观察段缓存,消除最长 60 秒滞后
- 新增 memory_mm_list/memory_mm_view 工具,memory_mm_delete 支持按 question 删除
- 修正工具描述过时引用(search_memory→memory_recall、kb_list/kb_search→knowledge_list/knowledge_search)
- .ai memo status 显示心智模型将注入条数
- 补充单测:mm del 别名、KB 索引/检索式注入、MM 段注入、观察裁剪
- 同步 changelog/README/docs
- 命中正文超过 KB_INJECT_MAX_CHARS(1500) 字符预算时不再注入正文,
  改为预算优先用于条目索引(尽可能多列,上限 KB_INDEX_LIMIT=100 条),
  详情由模型用 knowledge_read 按 ID 读取
- 索引兜底按字符预算动态截断,末尾提示剩余条数用 knowledge_search/knowledge_read
- 新增单测:命中正文超预算降级为索引
- 同步 changelog/README/docs
- system prompt 知识库段只列条目(ID + 标题),不再注入正文;
  在 KB_INJECT_MAX_CHARS(1500) 字符预算内尽可能多列(上限 KB_INDEX_LIMIT=100 条),
  详情由模型用 knowledge_read 按 ID 读取
- 移除 KB_INJECT_TOP_K(不再做检索式正文注入)
- 更新单测为纯索引注入断言;同步 changelog/README/docs
- system prompt「可用技能」段只列技能摘要(名称 + 描述),
  按 SKILL_INJECT_MAX_CHARS(1500) 字符预算截断、预算内尽可能多列,
  超出提示用 skill_list 查看完整技能名列表
- 新增 skill_list 工具:列出全部技能名称与描述(上限 SKILL_LIST_LIMIT=200),
  供模型发现「可用技能」段未列出的技能,再按需 use_skill 获取正文
- use_skill 描述同步提及 skill_list
- 新增单测 testSkillSummariesBudgeted;同步 changelog/README/docs/04
- buildLongTermPrompt 在群聊时除群记忆库外,并入最近发言者(uis,即最近 2~3 条消息发言人)
  的个人记忆库:长期记忆(每用户最多 5 条,合并后按分数降序 + 总字符预算 4096 截断)
  与个人心智模型(每用户最多 2 条,追加在群心智模型之后)
- 个人记忆按用户标签召回,私有记忆仅创建者本人可见(canSeeMemoryUnit),不泄露其他成员隐私
- 群心智模型(≤5)与群观察(≤20)保留原注入逻辑
- 新增单测 testBuildLongTermPromptMergesUserMemoryInGroup
- 同步 changelog / docs/03
- 新增 buildGroupedMemoryPrompt:按「群聊 / 每个最近发言者」分别渲染记忆段,
  每组独立列出长期记忆 + 心智模型(+ 群观察),不再把多个归属的心智模型/记忆混在一起
- buildLongTermPrompt 改用分组渲染:私聊单组「个人记忆(名称)」;
  群聊为「群聊记忆(群名)」+ 每个发言者「个人记忆(名称)」
- 个人记忆每用户最多 5 条、单用户 2048 字符预算;个人心智模型每用户最多 2 条
- 更新单测断言适配分组格式 + 归属顺序;同步 changelog / docs/03
- 合并重复的 ## 修复 节,面向用户重写本次记忆/知识库/技能改动条目
- 变更:知识库只展示条目索引、技能摘要预算注入、群聊/个人记忆分组注入
- 修复:.ai memo mm del 删除失效、心智模型/观察注入丢失、观察重复注入与滞后、工具描述修正
- 新功能:memory_mm_list/view、skill_list、status 注入条数
@error2913
error2913 merged commit 7653ada into main Aug 31, 2026
1 check passed
@error2913
error2913 deleted the fix/memory-kb-injection branch August 31, 2026 19:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant