尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

OmniAgent主动式记忆系统:BM25+向量混合检索,让Agent比你自己更懂你

OmniAgent主动式记忆系统:BM25+向量混合检索,让Agent比你自己更懂你 OmniAgent主动式记忆系统BM25向量混合检索让Agent比你自己更懂你【免费下载链接】OmniAgentAn agent capable of self-evolving and dynamically hardening security项目地址: https://gitcode.com/gh_mirrors/om/OmniAgentOmniAgent 的主动式记忆Proactive Memory系统让 AI Agent 告别金鱼记忆。它基于BM25 全文检索 向量语义检索的混合检索机制把你在MEMORY.md和memory/*.md中沉淀的偏好、决策与项目知识变成每次会话都能精准召回的长期记忆。本文帮新手 5 分钟看懂这套记忆系统的工作原理、关键配置与快速上手方法。 为什么 AI Agent 需要长期记忆用过对话式 AI 的同学都有同一个痛点每次新开一个会话Agent 就像失忆了你上周定的技术方案、项目暗号、个人偏好全部清零你不得不反复解释我们之前说过……既费时又容易出错纯靠关键词搜索又太死板换个说法就搜不到。OmniAgent 给出的答案是主动式记忆系统通过显式交互反馈 隐式 LLM 归纳的双路径对齐机制Agent 会把跨会话的工作结论、用户偏好、项目知识持续沉淀为 Markdown 记忆文件并在需要时主动召回——真正做到比你自己更懂你。记忆的存放位置非常直观就在你的工作区里记忆来源说明MEMORY.md/memory.md工作区根目录的主记忆文件memory/**/*.mdmemory/目录下的任意子目录 Markdown 文件发现逻辑由 memory.py 中的文件扫描函数实现支持配置额外路径。 BM25 向量混合检索双引擎混合检索是这套系统的灵魂。它同时跑两路召回再按权重融合得分兼顾字面精准与语义相近。关键词检索BM25 负责字面命中记忆文本会被写入 SQLite 的FTS5 全文索引虚拟表chunks_fts查询时使用经典的BM25 算法打分你搜索API key包含这个确切词组的记忆片段得分最高代码名、错误信息、专有名词这类不能靠猜的内容BM25 一搜一个准原始 BM25 秩值会被归一化到 0~1 区间方便与向量分数比较。这一层实现在 memory.py 的search_fts方法中。向量检索Embedding 负责意思相近向量检索解决的是换个说法也能找到的问题每个记忆分块都会生成一个Embedding 向量调用 OpenAI 兼容的/embeddings接口或本地 sentence-transformers 模型默认all-MiniLM-L6-v2与文本一起存进数据库查询时把问题也转成向量与所有记忆向量计算余弦相似度取最接近的 Top-N你搜之前那个部署脚本怎么写的即使原文没出现过这些词语义相近的片段也能被召回。两类嵌入提供者OpenAI 兼容 / 本地离线定义在 embedding.py 中。加权融合0.7 向量 0.3 文本两路结果按分块 ID 合并后计算最终得分最终得分 0.7 × 向量分数 0.3 × BM25 分数随后过滤掉低于0.35 最低相关度的结果按得分降序返回前 6 条。权重可在配置中调整见下文关键配置项逻辑位于 memory_manager.py 的search方法。 为什么默认向量权重更高因为日常提问多是自然语言、意图模糊语义匹配比字面匹配更能命中你心里想的那条。 记忆的存分块、增量同步与本地数据库记忆的写入同样讲究核心流程是分块 → 哈希比对 → 增量索引 → 向量计算环节做法好处Markdown 分块每块约 400 tokens相邻块重叠 80 tokens语义边界完整切块不漏句变更检测对每个分块计算 SHA-256 哈希没改过的文件直接跳过秒级增量同步本地存储SQLite 单文件数据库.omniagent/memory.db零依赖、隐私不出本机索引构建文本 FTS5 全文索引 Embedding 向量一套数据支撑两路检索同步时机由配置控制默认会话启动时和每次搜索前都会自动增量同步你只需要维护 Markdown 文件索引永远是最新的。完整同步逻辑见 memory_manager.py数据库表结构见 memory.py。 两个记忆工具memory_search 与 memory_getAgent 通过两个内置工具使用这套记忆系统注册逻辑在 reflexion.py工具核心参数典型场景memory_searchquery必填、max_results默认 6、min_score默认 0.35跨会话召回之前做的决策、日期、人物、偏好、待办memory_getpath必填、from_line、lines按行精读某个记忆文件的指定段落两个贴心细节可溯源每次召回都附带Source: memory/xxx.md#L12-L30形式的引用你可以点开原文核对记忆不再黑盒优先级清晰对刚才、上一轮、just now这类短期指代Agent 会优先查当前对话历史而不是动用长期记忆只有跨会话问题才走memory_search。这套召回纪律写进了系统提示词见 bootstrap.py 与 reflexion.py。相关行为还有专门的回归测试 test_memory_recall_priority.py。⚠️ 安全提示memory_get内置路径校验只允许读取MEMORY.md、memory/下的文件防止路径穿越实现见 memory_manager.py。⚡ 快速上手三步开启主动式记忆# 第一步获取项目 git clone https://gitcode.com/gh_mirrors/om/OmniAgent cd OmniAgent pip install -e . # 第二步交互式配置选择模型服务商并填入 API Key omniagent onboard # 第三步启动对话 omniagent chat然后在工作区创建你的记忆文件例如MEMORY.md# 我的偏好 - 代码注释一律用中文 - 我负责 OmniAgent 的 memory 模块再往memory/目录里按需添加专题文件memory/decisions.md、memory/preferences.md……。下次会话中直接问我之前定过哪些技术决策Agent 就会自动检索并带着引用作答。⚙️ 关键配置项一览混合检索权重怎么调所有记忆参数集中在 config/models.py 的MemorySearchConfig中可在~/.omniagent/config.yaml的memory:段覆盖配置项默认值作用enabledtrue总开关是否启用记忆检索系统hybrid_enabledtrue关闭则退化为纯 BM25 检索hybrid_vector_weight0.7向量检索权重语义匹配更敏感hybrid_text_weight0.3文本检索权重字面命中更敏感chunking_tokens/chunking_overlap400/80分块大小与重叠量query_max_results6单次召回条数上限query_min_score0.35相关度过滤阈值sync_on_session_start/sync_on_searchtrue会话启动 / 搜索前自动增量同步embedding_provideropenai嵌入来源可选local走本地模型离线检索temporal_decay_hours168记忆相关度时间衰减半衰期默认 7 天 调优建议如果召回结果太发散调高query_min_score如果总是搜不到字面精确的报错文本调大hybrid_text_weight。 源码导航记忆系统模块地图想深入阅读实现可以从这些入口出发存储层SQLite FTS5、分块、哈希omniagent/agents/memory.py混合检索与工具注册omniagent/agents/memory_manager.py嵌入提供者OpenAI 兼容 / 本地omniagent/agents/embedding.py记忆配置模型omniagent/config/models.pyAgent 集成与召回提示词omniagent/agents/reflexion.py行为回归测试tests/test_memory_recall_priority.py项目总览文档README.md中文见 README_CN.md写在最后OmniAgent 的主动式记忆系统用BM25 保精准、向量保语义、权重融合保平衡的混合检索架构加上分块增量同步和本地 SQLite 存储让 Agent 的记忆既准又快、还不出本机。你只管把想法写进 Markdown剩下的召回、排序、引用都交给它——这才是真正越用越懂你的 AI Agent。 【免费下载链接】OmniAgentAn agent capable of self-evolving and dynamically hardening security项目地址: https://gitcode.com/gh_mirrors/om/OmniAgent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表