Hindsight 记忆银行按仓库隔离:3 个配置项终结 Codex 跨项目记忆污染

发布时间:2026/9/16 11:27:45
Hindsight 记忆银行按仓库隔离:3 个配置项终结 Codex 跨项目记忆污染 Hindsight 记忆银行按仓库隔离3 个配置项终结 Codex 跨项目记忆污染【免费下载链接】hindsightHindsight: Agent Memory That Learns项目地址: https://gitcode.com/GitHub_Trending/hindsight2/hindsight给 API 仓库修查询 bugCodex 的召回里却冒出前端仓库的 lint 约定——不是记忆出错是它们挤在同一个记忆库里。Hindsight 的记忆银行bank按主题隔离记忆的容器支持动态银行 ID一行配置就能让每个仓库拥有私有记忆库另加一个固定银行承载团队规范。30 秒结论结论日常开发按仓库分库跨仓库标准放一个固定共享库召回互不污染。何时用你让 Codex 同时维护两个以上仓库且希望新会话自动记得老会话的决策。核心配置~/.hindsight/codex.json里dynamicBankId: truedynamicBankGranularity: [agent, project]。验证同一仓库新会话能召回旧决策另一个仓库问同样问题保持干净。一个codex银行装下所有仓库代价是什么把~/projects/api和~/projects/frontend都指向默认的codex银行时每次写入都在扩大下一次召回的候选池。某天你让 Codex 修 API 仓库的分页查询注入的上下文里却混着上周前端仓库的 lint 规则——它们相似度足够高又恰好是最近写入的于是挤掉了真正相关的记忆。这不是数据损坏所有记忆都真实存在但召回预算被无关仓库瓜分。召回精度是银行层面决定的一个仓库的记忆只落在自己的银行里对该仓库的 recall 就只在这个空间里检索噪声在入口被挡掉而不是靠调参事后补救。分库落地三步准备 → 配置 → 派生验证第 1 步确认三个钩子已经就位分库生效的前提是记忆流水线已在跑。装好钩子后会话生命周期的三个时点由 hooks.json 接管SessionStart会话开始后台预热 Hindsight 服务器UserPromptSubmit每次提问前从对应银行召回记忆注入上下文Stop每轮结束把会话内容写入长期记忆。第 2 步核心配置——开启动态银行 ID在~/.hindsight/codex.json官方推荐的用户配置位置升级不会丢里写两个字段{ dynamicBankId: true, dynamicBankGranularity: [agent, project] }project维度取工作目录的基名agent取代理名缺省codex。效果在~/projects/api和~/projects/frontend里跑 Codex会分别存入、召回各自的银行跨仓库零泄漏。不想碰配置也能切分库config.py支持环境变量直接覆盖HINDSIGHT_DYNAMIC_BANK_IDtrue即可团队可用环境变量统一推配置个人则把agentName之类的差异项写在codex.json里互不干扰。第 3 步读一遍派生源码确认银行名不会漂移银行 ID 的拼接规则集中在 scripts/lib/bank.py 的derive_bank_idL24-L65两条路径# 非动态bankIdPrefix 拼前缀bankId 缺省 codex return f{prefix}-{base} if prefix else base # 动态按 dynamicBankGranularity 取维度值:: 连接 segments [field_map.get(f, unknown) for f in fields] base_bank_id ::.join(segments)每个维度对应一个固定来源agent→ 配置的agentNameproject→ cwd 基名空则unknownsession→ 钩子输入的session_iduser→ 环境变量HINDSIGHT_USER_ID缺省anonymous。目录名里的空格、Unicode 原样保留不做 URL 编码两次运行只要 cwd 相同银行 ID 必然一致。对应的测试 tests/test_bank.py 把派生规则全部钉死agentNamemybot且 cwd 为/home/user/hindsight时得到mybot::hindsightL41-L45目录名含空格、UTF-8 时结果不含%L47-L57cwd 为空时 project 维度落unknownL81-L84。配置侧的加载顺序见 scripts/lib/config.py内置默认值 → 安装时写入的~/.hindsight/codex/settings.json→ 用户配置codex.json→ 环境变量后者压过前者。读写两端各自做什么recall.py每次提问前派生银行 ID → 组装查询recallContextTurns带多轮上下文recallMaxQueryChars截断→ 召回结果用hindsight_memories标签包裹注入任何异常都以退出码 0 降级不打断对话。retain.py读transcript_path指向的会话记录retainMode默认full-session整段保留切chunked则按retainEveryNTurns默认 10取窗口、retainOverlapTurns默认 2留重叠。文档 ID 默认复用session_id同一会话反复 upsert 同一篇文档。该沉淀什么、该共享什么内容放置对照内容类型放哪里为什么仓库约定技术栈选择、lint 命令、测试运行器、发布流程该仓库的按仓库银行每个新会话都要重新解释一遍的东西排障根因auth 401 是时钟偏移该仓库的按仓库银行复发性 bug 会回来召回一次胜过重查一次工程决策为什么加指数退避、为什么选这个库该仓库的按仓库银行从 diff 反推很贵直接召回很便宜团队 commit 规范、共享 CI、内部 SDK 用法固定共享银行必须跨仓库生效才叫团队标准临时草稿、一次性命令不存不值得占用召回预算团队规范走固定银行关掉动态即可{ dynamicBankId: false, bankId: team-standards }指向同一bankId的集成互相可见队友 Codex 沉淀进team-standards的规范你的每个仓库会话都能召回。验证清单隔离生效与 4 个误配信号四步验证序列1. 在仓库 A 让 Codex 记录一个决策如为什么加指数退避重试2. 结束会话让 transcript 完成 retain3. 在 A 开新会话问该决策应被召回4. 在仓库 B 问同样问题不应浮出 A 的答案。执行对照逐条可直接排查若第 3 步召回为空则确认两次运行派生出相同银行 IDagentName与 cwd 一致必要时开debug看派生日志。若在会话中途就测召回落空则因full-session模式要等会话完整结束才 retain验证期可把retainEveryNTurns从 10 临时调到 1让每轮都触发写入。若第 4 步浮出了 A 的答案则dynamicBankId未真正生效查~/.hindsight/codex.json或被HINDSIGHT_DYNAMIC_BANK_ID反向覆盖。若团队规范在别的仓库召不回则误放进了按仓库银行——跨切标准必须进固定bankId。若你正指望 A 仓库召回 B 仓库的决策则预期错了银行隔离是严格的数据不跨银行流动隔离本身就是特性。高频疑问必须用 Hindsight Cloud 吗不用。自托管 Hindsight 服务器或本地 embed daemon 行为一致银行布局与后端无关。同一个库为什么有的记得、有的不记得大概率是两次运行派生出了不同银行 ID。project维度取 cwd 基名只要工作目录或agentName不一致就会落到不同银行用HINDSIGHT_DEBUG1跑一遍对比两次派生值即可定位。延伸阅读hindsight-integrations/codex/Codex 集成完整目录README 内有全量配置表与默认值hindsight-integrations/codex/settings.json安装时写入的出厂配置核对每个字段缺省值hindsight-integrations/codex/tests/test_bank.py银行 ID 派生的全部断言改配置前先看它hindsight-docs/guides/2026-05-04-guide-codex-memory-with-hindsight.mdCodex 安装指南本节的分库配置建立在钩子装好之后【免费下载链接】hindsightHindsight: Agent Memory That Learns项目地址: https://gitcode.com/GitHub_Trending/hindsight2/hindsight创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考