Hindsight × OMO 集成实战:为 oh-my-openagent 智能体接入长期记忆与自动召回

发布时间:2026/9/14 6:33:42

Hindsight × OMO 集成实战:为 oh-my-openagent 智能体接入长期记忆与自动召回 Hindsight × OMO 集成实战为 oh-my-openagent 智能体接入长期记忆与自动召回【免费下载链接】hindsightHindsight: Agent Memory That Learns项目地址: https://gitcode.com/GitHub_Trending/hindsight2/hindsight本指南围绕 hindsight-integrations/omo/README.md 展开系统讲解如何将 Hindsight 长期记忆能力接入 OMOoh-my-openagent智能体编排器在每次用户提问前自动召回历史相关记忆注入上下文在会话结束后自动提取并留存新的经验。读完本文你将掌握完整的安装配置步骤、五大 Hook 的生命周期机制、全部配置项与优先级规则以及 recall / retain 底层实现原理可直接照搬到自己的 OMO 工作流中。OMO 集成是什么OMOoh-my-openagent是一个智能体编排器而 Hindsight 是提供长期记忆能力的记忆服务。二者结合后智能体不再每次会话都从零开始Hindsight 会自动在每次提示词prompt之前召回过往会话中的相关知识并在会话结束后把本次学到的内容沉淀下来供未来使用。该集成的完整代码位于仓库的 hindsight-integrations/omo/ 目录包含五个 Hook 脚本、项目规则文件、默认配置与测试用例属于本仓库hindsight-integrations生态中面向 OMO 用户的官方接入方案。快速上手四步完成接入第一步获取 API Key注册 Hindsight 云服务并创建 API Key形如hsk_...。自托管部署时则无需 API Key只需指向本地服务地址。第二步安装集成文件从仓库的hindsight-integrations/omo/目录执行以下复制命令将 hooks、脚本、设置与规则分发到对应位置# Hooks全局 mkdir -p ~/.omo/hooks cp hooks/hooks.json ~/.omo/hooks/hindsight-hooks.json # 脚本 设置全局 mkdir -p ~/.omo/plugins/hindsight/scripts cp -r scripts/ ~/.omo/plugins/hindsight/scripts/ cp settings.json ~/.omo/plugins/hindsight/settings.json # 规则按项目——在项目根目录执行 mkdir -p /path/to/your/project/.omo/rules cp rules/hindsight-memory.md /path/to/your/project/.omo/rules/hindsight-memory.md对应文件在仓库中的位置分别是 hooks/hooks.json、scripts/、settings.json 与 rules/hindsight-memory.md。第三步设置 API Key通过环境变量设置export HINDSIGHT_API_TOKENhsk_your_key_here或持久化写入用户配置文件~/.hindsight/omo.json{ hindsightApiToken: hsk_your_key_here }第四步允许 OMO 透传环境变量在 OMO 的配置文件~/.config/opencode/oh-my-openagent.jsonc中将集成需要的三个环境变量加入mcp_env_allowlist{ mcp_env_allowlist: [ HINDSIGHT_API_URL, HINDSIGHT_API_TOKEN, HINDSIGHT_BANK_ID ] }完成以上四步后启动 OMO记忆功能即自动生效无需任何额外手动操作。Hook 生命周期记忆如何自动流动OMO 通过生命周期钩子Hook与 Hindsight 交互核心事件与动作对应关系如下表Hook 事件触发时机执行动作SessionStart会话开始健康检查若缺少 API Key 则发出警告UserPromptSubmit每次用户提示词提交前向 Hindsight 查询相关记忆以additionalContext注入上下文Stop智能体完成回复提取会话转录文本发送给 Hindsight 做事实提取SubagentStop子智能体完成与Stop相同——捕获子智能体的学习成果SessionEnd会话终止对短会话强制执行最后一次 retain整体的架构流程如下OMO (orchestrator) ├── SessionStart hook → health check ├── UserPromptSubmit hook → recall memories → inject as additionalContext ├── Stop hook → retain session transcript (async) ├── SubagentStop hook → retain sub-agent findings (async) └── SessionEnd hook → force final retain在 hooks/hooks.json 中可以确认每个 Hook 的完整声明SessionStart与UserPromptSubmit是同步命令超时分别为 5 秒与 45 秒Stop与SubagentStop声明为async: true异步执行超时 15 秒避免 retain 阻塞主流程SessionEnd超时 10 秒。所有命令都采用python3 ... || python ...的双解释器回退写法兼容不同系统环境。关键设计优雅降级。所有 Hook 在任何出错场景下都静默失败——从源码看recall.py 与 retain.py 的退出码恒为 0仅在debug模式下对异常返回 2。因此即使 Hindsight 服务不可达OMO 也会照常工作只是暂时失去记忆能力。配置体系详解配置加载优先级设置按以下顺序加载后者覆盖前者later winssettings.json插件默认值——内置云端 URL~/.hindsight/omo.json用户覆盖HINDSIGHT_*环境变量这一逻辑在 scripts/lib/config.py 的load_config()中有完整实现先以DEFAULTS字典为底依次合并插件目录下的settings.json与~/.hindsight/omo.json合并时跳过值为null的键最后遍历ENV_OVERRIDES映射表覆盖环境变量布尔值与整数环境变量还会经过类型转换布尔接受true/1/yes。关键设置一览设置项环境变量默认值说明hindsightApiUrlHINDSIGHT_API_URLhttps://api.hindsight.vectorize.ioAPI 端点hindsightApiTokenHINDSIGHT_API_TOKEN—API Keyhsk_...云端必需bankIdHINDSIGHT_BANK_IDomo记忆库bank名称autoRecallHINDSIGHT_AUTO_RECALLtrue提示词前自动召回autoRetainHINDSIGHT_AUTO_RETAINtrue回复后自动留存retainEveryNTurns—10留存频率按轮次recallBudgetHINDSIGHT_RECALL_BUDGETmid召回深度low/mid/highdynamicBankIdHINDSIGHT_DYNAMIC_BANK_IDfalse按项目隔离记忆库debugHINDSIGHT_DEBUGfalse向 stderr 输出调试日志完整默认配置settings.json插件自带的 settings.json 是理解全部能力的最佳入口除上述核心项外还包含以下精细控制{ version: 0.1.0, hindsightApiUrl: https://api.hindsight.vectorize.io, hindsightApiToken: null, bankId: omo, bankMission: You are an OMO (oh-my-openagent) orchestrator. Focus on technical discussions, decisions, architectural context, and coding patterns relevant to the users projects., retainMission: Extract technical decisions, architectural choices, user preferences, project context, debugging insights, and tool/library relationships. Ignore routine greetings and transient operational details., autoRecall: true, autoRetain: true, retainMode: full-session, recallBudget: mid, recallMaxTokens: 1024, recallTypes: [world, experience], recallContextTurns: 1, recallMaxQueryChars: 800, recallRoles: [user, assistant], recallPromptPreamble: Relevant memories from past conversations (prioritize recent when conflicting). Only use memories that are directly useful to continue this conversation; ignore the rest:, retainRoles: [user, assistant], retainEveryNTurns: 10, retainOverlapTurns: 2, retainToolCalls: false, retainTags: [{session_id}], retainMetadata: {}, retainContext: omo, recallAdditionalBanks: [], bankIdPrefix: , dynamicBankId: false, dynamicBankGranularity: [agent, project], resolveWorktrees: true, directoryBankMap: {}, requestTimeoutSeconds: null, debug: false }各参数含义说明bankMission/retainMission描述智能体的身份使命与留存提取准则首次使用某个 bank 时会通过 API 写入服务端见下文ensure_bank_mission。retainModefull-session整段会话全部留存或chunked按retainEveryNTurns retainOverlapTurns轮窗口分块留存避免超长会话一次提交过大。recallMaxTokens单次召回返回的最大 token 数recallTypes限定召回的记忆类型world世界知识 /experience经验recallContextTurns大于 1 时结合转录文本构造多轮召回查询recallMaxQueryChars查询文本最大字符数recallRoles参与构造查询的角色。recallPromptPreamble注入到additionalContext中的提示前缀指导智能体只使用对当前对话直接有用的记忆。retainRoles/retainToolCalls控制转录中纳入哪些角色消息、是否包含工具调用记录。retainTags支持{session_id}、{bank_id}、{timestamp}、{user_id}模板变量代码中会先做模板解析再写入。retainContext随记忆一起存储的上下文标签默认omo。requestTimeoutSeconds全局请求超时覆盖值null时使用客户端各自的默认超时recall 10s、retain 15s、健康检查 5s。resolveWorktrees为true时在 git worktree 环境下解析到主仓库名使同一仓库的多个 worktree 共享同一记忆库实现见 scripts/lib/bank.py 的_resolve_project_name。directoryBankMap显式的目录 → bank映射优先级最高的静态路由。环境变量完整映射除 README 列出的项外scripts/lib/config.py 中的ENV_OVERRIDES还支持更多变量完整清单如下环境变量对应配置项类型HINDSIGHT_API_URLhindsightApiUrlstringHINDSIGHT_API_TOKENhindsightApiTokenstringHINDSIGHT_BANK_IDbankIdstringHINDSIGHT_AGENT_NAMEagentNamestringHINDSIGHT_AUTO_RECALLautoRecallboolHINDSIGHT_AUTO_RETAINautoRetainboolHINDSIGHT_RETAIN_MODEretainModestringHINDSIGHT_RECALL_BUDGETrecallBudgetstringHINDSIGHT_RECALL_MAX_TOKENSrecallMaxTokensintHINDSIGHT_RECALL_MAX_QUERY_CHARSrecallMaxQueryCharsintHINDSIGHT_RECALL_CONTEXT_TURNSrecallContextTurnsintHINDSIGHT_REQUEST_TIMEOUT_SECONDSrequestTimeoutSecondsintHINDSIGHT_DYNAMIC_BANK_IDdynamicBankIdboolHINDSIGHT_BANK_MISSIONbankMissionstringHINDSIGHT_DEBUGdebugbool进阶配置记忆隔离与多库召回Dynamic Bank IDs按项目隔离记忆默认所有会话共享一个omo记忆库。开启动态 bank 后可按项目隔离{ dynamicBankId: true, dynamicBankGranularity: [agent, project] }此时会生成形如omo::myproject、omo::other-repo的独立记忆库。granularity 支持的可选字段在 scripts/lib/bank.py 中定义为agent、project、session、channel、user对应取值分别来自配置的agentName默认omo、工作目录解析出的项目名、会话 ID 及HINDSIGHT_CHANNEL_ID/HINDSIGHT_USER_ID环境变量多个字段以::拼接。还可以用bankIdPrefix为所有 bank 名统一加前缀。Multi-Bank Recall跨库召回除了主 bank还可以同时查询附加 bank实现团队级共享知识{ recallAdditionalBanks: [shared-team-knowledge] }从 recall.py 的实现可以看到插件会先查询主 bank再依次查询每个附加 bank将全部结果合并后统一注入上下文单个附加库失败不会影响主库召回。项目规则让智能体知道如何用记忆安装时复制到项目.omo/rules/hindsight-memory.md的规则文件仓库位置 rules/hindsight-memory.md为智能体定义了三条使用准则何时 recall处理非平凡任务前从用户请求提取 35 个关键术语搜索历史解决方案、调试洞见或架构决策琐碎任务错别字、简单问答不召回。何时 retain完成可能复现的问题解决方案、关键架构决策及理由、用户工作流/编码风格/工具偏好、来之不易的调试洞见不存储琐碎改动、已被 git 跟踪的应用代码、以及 API Key 等敏感数据。何时 reflect当用户要求跨主题综合、或需要跨多条记忆推理模式时使用reflect工具。该文件通过 front-matter 的alwaysApply: true随会话自动注入。自托管部署可选不使用云端时通过环境变量覆盖 API 地址即可指向本地实例export HINDSIGHT_API_URLhttp://localhost:8888或在~/.hindsight/omo.json中指定{ hindsightApiUrl: http://localhost:8888, hindsightApiToken: null }本地实例无需 API Token。从 recall.py 与 retain.py 的源码可见一个细节当 API URL 包含云端域名api.hindsight.vectorize.io且未配置 token 时插件会静默跳过请求而指向本地地址时无 token 也可正常调用。底层原理一次 recall 与 retain 的完整旅程纯标准库的 REST 客户端scripts/lib/client.py 中的HindsightClient仅依赖 Python 标准库urllib零外部依赖。它负责三个核心 REST 调用health_checkGET /health用于SessionStart时探测服务可用性recallPOST /v1/default/banks/{bank_id}/memories/recall携带query、max_tokens、budget、types参数retainPOST /v1/default/banks/{bank_id}/memories以{items: [...]}形式提交内容并带async: true让服务端异步执行事实提取document_id默认conversationset_bank_missionPATCH /v1/default/banks/{bank_id}/config写入reflect_mission与retain_mission。客户端还会校验 API URL 必须为http/https协议且包含主机名Token 通过Authorization: Bearer ...头传递。Recall 流程UserPromptSubmitload_config()读取合并后的配置若autoRecall为 false 则直接退出。从 stdin 读取 Hook 输入prompt、session_id、cwd、可选的transcript_path提示词过短5 字符则跳过。derive_bank_id()推导目标 bankensure_bank_mission()在首次使用时写入 bank 使命已设置过的 bank 记录在本地状态文件避免重复写入且状态文件超过 10000 条时自动清理一半。当recallContextTurns 1时读取 JSONL 转录文本并组合成多轮查询查询超长时按recallMaxQueryChars截断。调用client.recall()获取结果并合并所有recallAdditionalBanks的召回结果。若无结果则静默返回否则将记忆格式化为hindsight_memories.../hindsight_memories块含前缀、当前时间戳写入last_recall.json状态最后向 stdout 输出hookSpecificOutput.additionalContextOMO 会把它作为额外上下文注入给模型。Retain 流程Stop / SubagentStop / SessionEnd若autoRetain关闭则退出SessionEnd场景通过forceTrue强制执行一次。读取会话转录JSONL兼容 OMO 的{type: user|assistant, message: {...}}与扁平{role: ..., content: ...}两种格式。频率控制retainEveryNTurns 1时通过increment_turn_count()计数基于文件锁fcntl.flock保证并发安全未到指定轮次则跳过。按retainMode选取留存窗口chunked模式截取最近retainEveryNTurns retainOverlapTurns轮随后按retainRoles过滤角色、可选包含工具调用组装成转录文本。生成document_id全量模式为session_id发生压缩即转录变短时自动推进到session_id-cN分块编号保护既有文档不被覆盖chunked模式为session_id-毫秒时间戳。解析retainTags模板变量、组装retained_at/message_count/session_id元数据调用client.retain()异步提交给服务端做事实提取与存储。文件式状态持久化scripts/lib/state.py 说明了一个重要的实现约束OMO 的 Hook 是一次性临时进程状态必须落到磁盘。所有状态轮次计数、留存追踪、已设置 mission 的 bank 列表、最近一次召回都存放在PLUGIN_DATA/state/或~/.hindsight/omo/state/目录下采用临时文件 os.replace的原子写入并对文件名做了路径穿越防护。测试与演示仓库为该集成提供了完整的验证手段运行单元测试cd hindsight-integrations/omo pip install pytest python -m pytest tests/ -v测试用例位于 hindsight-integrations/omo/tests/test_bank.py、test_config.py、test_hooks.py覆盖 bank ID 推导、配置合并、Hook 行为等核心逻辑。运行交互式演示demo.py 可以针对本地 Hindsight 开发服务器完整模拟 Hook 生命周期SessionStart → UserPromptSubmit(recall) → Stop(retain) → SessionEnd包括健康检查、首次召回应为空、留存两段对话、等待异步事实提取后再次召回应能命中刚学到的记忆# 先启动 Hindsight 开发服务器 ./scripts/dev/start-api.sh HINDSIGHT_API_URLhttp://localhost:8888 python demo.py演示默认使用omo-demobank同一 bank 的记忆跨多次运行持久保留——再次运行即可看到历史召回结果。小结Hindsight × OMO 集成通过五个生命周期 Hook 把记忆无缝织入智能体的日常会话UserPromptSubmit前自动召回、Stop/SubagentStop后自动留存、SessionEnd兜底收尾全部失败静默降级不干扰原有工作流。配合动态 bank 隔离、多库召回、轮次频率控制与按项目注入的规则文件开发者可以用极低的心智成本为 OMO 智能体构建一套可持续积累、跨会话复用的长期记忆系统。需要深入自定义时可直接阅读 scripts/ 下的各模块源码与 tests/ 测试用例。【免费下载链接】hindsightHindsight: Agent Memory That Learns项目地址: https://gitcode.com/GitHub_Trending/hindsight2/hindsight创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/14 6:33:42

学术论文降重工具全解析:原理、评测与实战策略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/14 6:28:42

游戏出海买量成本高?AI语言引擎如何破解本地化瓶颈

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/14 7:23:44

用状态机、TDD和上下文管理写出高质量需求文档

需求文档这件事,很多团队其实一直没想明白。你以为需求文档就是“把用户想要的东西写清楚”,那只是及格线。真正能把需求文档写出价值的人,写的是“需求背后的行为逻辑和判定规则”,是让开发、测试、产品三方能对着同一份文档&…

2026/9/14 7:23:44

C语言入门指南:从环境搭建到项目实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/14 7:23:44

PRD转可点击HTML:零代码实现交互式需求文档

1. 项目概述:为什么一份PRD文档值得被“点开”? “产品经理神器:PRD 直接变可点击网页!”——这句话不是营销话术,而是我过去三年在三个不同规模团队里反复验证过的真实工作流。它解决的不是“能不能做”的技术问题&am…

2026/9/14 7:23:44

MySQL从安装到性能优化:索引、事务、备份与面试核心知识点全梳理

最近接了一个活儿,帮朋友公司梳理一台跑了三年多、几乎没有文档的MySQL数据库服务器。打开命令行敲了几条命令之后,我对着屏幕愣了半天——表结构命名混乱、索引冗余严重、备份策略全靠运气,最要命的是,负责这台库的人换了两茬&am…

2026/9/14 7:23:44

手搓教程:建立技术直觉的硬核学习法

1. 这不是怀旧,是工程师的肌肉记忆在说话 “为什么现在 AI 这么发达了,还要坚持手搓教程?”——这句话最近在技术社区、教学群、甚至新手训练营里反复刷屏。它表面像一句吐槽,实则戳中了当前技术学习生态里最真实的一道裂痕&#…

2026/9/14 7:18:44

STM8S103K3实战:从最小系统到双工具链开发全解析

简介:面向STM8S103K3单片机开发者的完整资料包,以最小系统板PDF原理图、IAR/STVD可运行例程和STM8官方标准外设库为核心,兼顾入门学习与项目参考需求,适合电子专业学生、嵌入式初学者及工程师用作设计蓝本。压缩包共143.57MB&…

2026/9/14 2:17:50

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/14 0:03:22

KCF目标跟踪算法与OTB工程实现:毕业设计实战解析

简介:这是一份基于KCF核相关滤波算法、融合尺度池与抗遮挡处理的目标检测跟踪MATLAB完整源码,主要面向计算机相关专业准备毕业设计、课程设计或期末大作业的学生,也适合需要项目实战练习的初学者。源码在OTB数据集上完成验证,能够…

2026/9/14 0:03:22

语音情感识别实战:Keras实现LSTM、CNN、SVM与MLP多模型对比

简介:面向语音情感识别入门与进阶开发者,这份基于Keras的项目源码完整实现了LSTM、CNN、SVM、MLP四种模型,兼容Python3.8与Keras/TensorFlow2环境。压缩包内含49个文件,大小约70.31MB,主体包括Python脚本、yaml/json配…

2026/9/12 6:29:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/12 14:32:17

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/13 11:18:28

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码