跳到主要内容

知识更新与定期整理

为什么把知识变更当成 Pull Request?​

  • 核心答案: 把知识库当成代码库,把每次知识变更当成一个 Pull Request(PR);
  • 适用范围: 不只适用于 User as Code 这类 Python 形式的可执行记忆;Markdown 知识库、用户记忆文件和规则文档同样应当进入 Git,见 可执行代码记忆;
  • 收益: 获得差异审查、版本历史、责任追溯和一键回滚能力;
  • 红线: 生产环境不应让任何一个模型绕过审核,直接改主分支或线上向量库;

增量更新的四步闭环是什么?​

  • 第一步 Proposer 提交 PR: 从原始证据中发现新事实、冲突或过期内容,在工作分支上提出尽可能小而完整的 diff;
  • 第一步的做法: 不是把最新一次对话粗暴追加到文件末尾,而是先检索相关已有知识,再增、删、改对应条目,同步维护链接、索引、时间元数据和证据引用;
  • 第二步 Reviewer 独立审核: 拿到变更前的知识、diff 和原始证据(execution trajectory、原始对话、业务文档或工具执行结果);
  • 第二步的检查项: 每个新断言是否能被证据支持、是否遗漏限定条件、是否与其他文件冲突、删除或改写是否过度;
  • 第二步的输出要求: 审核不通过时返回指向具体证据和行号的可执行意见,而不是模糊地说“还需要改进”;
  • 第三步 迭代至收敛: Proposer 根据拒绝理由修改 diff,Reviewer 再次回到原始证据复核,只有 Reviewer 明确批准 PR 才可合入; 同时设置最大迭代次数或成本预算,超出上限仍未收敛时转人工审核,不能默认放行;
  • 第四步 合入后再发布: CI 先检查格式、链接、元数据、权限标签;若知识以代码表示,还要运行类型检查和测试,通过后才从已合入版本增量重建受影响的分块、摘要和向量索引;
  • 推论: 索引是可重建的派生物,Git 中已审核的知识才是真正的来源;

为什么三层数据要分开?​

  • 原始证据层: 保存只增不改的对话、轨迹和原始文档;
  • 知识层: 保存经过提炼、可持续修订的 Markdown 或代码;
  • 服务层: 保存从特定已合入版本生成的检索索引;
  • 可追溯性: PR 需要记录证据标识、知识库版本、审核意见和最终决定,使线上每条知识都能回答“从哪条证据而来、谁在什么时候批准”;

为什么 Proposer 与 Reviewer 必须是 Agent?​

  • 不是固定调用: 知识更新不是只对一段预先挑好的文本做摘要——Proposer 往往要主动搜索其他相关的用户记忆文档和规则;
  • Reviewer 的工作: 要追溯证据、对比多份文档、运行检查,并在发现新线索时继续查询;
  • 所需工具: 文件搜索、版本比较、测试执行和证据检索,现成的 Coding Agent 通常就能胜任;
  • 检索范围: 两个 Agent 都应能按需查询完整的知识库和原始证据库,而不是只接收上游挑选的几个片段;
  • 范围限制: “完整”指其被授权的租户或用户范围,不能因审核而突破隐私边界;
  • 归档: 它们的工作轨迹、工具输出引用和审核反馈也应以文本归档,保证可追溯性;

为什么要用异源模型互审?​

  • 原则: Proposer 与 Reviewer 优先使用能力相近但来自不同家族的模型,例如 Proposer 用 Claude、Reviewer 用 GPT,或 Proposer 用 DeepSeek、Reviewer 用 Kimi;
  • 理由: 不同的训练数据、偏好和推理习惯可降低两者在同一处犯同类错误的概率;
  • 能力匹配: 两者能力不宜悬殊,否则 Reviewer 可能根本跟不上 Proposer 对复杂证据的处理;
  • 局限: 异源互审能增加独立性,但不能替代原始证据——Reviewer 应主要核对证据和 diff,而不是沿着 Proposer 的结论再讲一遍;
  • 权限分工: Proposer 只能写工作分支,Reviewer 只读证据并提交审核结果,只有合并流程可以更新主分支和线上索引;

为什么还需要定期全量整理?​

  • 增量的盲区: 增量更新每次只看到一个局部,多次局部正确的修改仍可能累积出全局问题;
  • 典型症状: 同一事实散落在多个文件中、新旧说法同时存在、摘要逐渐偏离原始证据、目录结构不再适合当前知识规模;
  • 性质: 相当于第九章“睡眠学习”在知识管理中的具体实现——前台累积证据与局部更新,后台在周期性窗口从全局视角重新审视整个知识体系;
  • 旁证: Claude Code 的自动记忆在索引接近容量上限时,会主动合并或移出细节;

定期整理要完成哪三项核心工作?​

  • 一 去重、去旧与合并: 全量扫描,识别语义重复、已被取代、过度碎片化或只有表述差异的条目,将其删除、归并或重写; 同时重建文件间链接、入口页和索引页,必要时拆分过大文件、合并过小文件或调整目录层次;
  • 一的边界: 删除的是可服务的知识表达,不是下层只增不改的原始证据;
  • 二 回到原始数据核查: 逐段对照原始对话、execution trajectory、业务文档和工具输出,检查旧摘要是否遗漏关键事实、丢失否定词或时间条件、把推测错当成了事实; 不能只在已有摘要之间相互改写,否则早期遗漏和误读会一代代传下去;
  • 二的分批策略: 大型知识库可按目录、时间或主题分批扫描,但必须保留覆盖清单,确保分批处理最终覆盖全量,而不是随机抽样;
  • 三 冲突解决与场景限定(qualification): 遇到矛盾说法时不简单“保留最新一条”或让模型猜哪条正确,而要追溯各自原始信息源,检查是否分别在不同时间、对象、地域、任务或前置条件下成立;
  • 三的结论: 两者都有效时不是删除其中一条,而是把各自适用场景明确写入知识;证据仍不足时保留冲突和待确认状态,不得强行收敛成一个确定结论;

整理结果如何发布与验收?​

  • 同样过 PR: 由 Proposer Agent 在分支上提交重组 diff,再由异源 Reviewer Agent 结合原始证据审核;
  • 拆分: 全量重组 diff 往往较大,可按目录或主题拆成多个 PR,但应共享同一份整理计划和覆盖清单;
  • 验收: 全部 PR 通过后,除了重建全量派生索引,还应回放一组典型检索与问答用例,确认新结构没有让原本可找到的知识变得不可见;
  • 触发条件: 可按时间(如每周或每月)触发,也可在新增条目数、冲突数或检索质量下降超过阈值时触发;

失效内容如何检测与下线?​

  • 风险: 一篇被新版取代的旧政策若仍留在库中,检索时可能与新版一起被召回,让模型给出自相矛盾甚至过时的答案;
  • 做法: 给每个分块附加版本号、生效/失效时间等元数据,在检索阶段就过滤掉已失效内容;
  • 做法: 或在提炼摘要时显式标注“此条已于某日废止”;
  • 一致性: 这与用户记忆里的版本化冲突检测是同一思路,只是搬到了共享知识库的尺度上;

多用户共享时如何做权限与租户隔离?​

  • 原则: “所有用户”不等于“所有内容对所有人可见”,不同部门、租户、权限等级的用户能看到的文档范围往往不同;
  • 关键要求: 检索必须按调用者的权限过滤,绝不能让越权文档进入某个用户的上下文;
  • 为什么下推到检索层: 一旦敏感内容进入 LLM 上下文,就很难保证它不以某种形式泄露到最终回答里;
  • 多租户: 需保证租户之间的向量索引和元数据相互隔离,避免一个租户的查询“串味”检索到另一个租户的私有知识;