人工智能大模型Agent 记忆AI AgentRAG知识图谱dsh-plugin【免费下载链接】MemOSSelf-evolving memory OS for LLM AI Agents: ultra-persistent memory, hybrid-retrieval, and cross-task skill reuse, with 35.24% token savings and DeepSeek Harness support.项目地址https://gitcode.com/gh_mirrors/memos/MemOS点击查看免费下载导读长对话与长期记忆中积累的海量记忆条目在注入 Agent 上下文时往往携带大量与当前任务无关的噪声既稀释了主模型的推理精度又白白消耗 Token。本文以 MemOS 仓库中 召回过滤指南 为骨架结合 云插件 与 本地插件检索模块 的源码实现系统讲解 MemOS 的两套召回后置过滤方案云插件基于指定 LLM 的二次筛选以及本地插件「三层召回 RRF/MMR 融合 可选 LLM 精筛」的多阶段流水线。读完本文你将掌握两种方案的完整配置方法、全部参数含义、失败回退策略以及它们背后的源码级工作原理。一、为什么需要召回二次过滤记忆召回Recall本质上是一个「高召回、低精度」的过程为了不漏掉任何可能相关的记忆检索阶段会拉回大量候选。但候选里充斥着两类噪声表层关键词相似、语义无关的条目例如查询是「写一个 pytest 测试」候选却是「写一个 Python JWT 校验器」——同语言、不同子问题寒暄与闲聊记录如「你好」「今天想做什么」这类仅占用 Token 的痕迹。MemOS 的解决方案是在召回结果注入上下文之前增加一道基于模型的相关性精筛只保留被判定为「与当前任务直接相关」的条目。项目文档将其定位为「二次过滤」secondary filtering两条实现路径分别落在云插件与本地插件上。二、Cloud Plugin指定 LLM 的召回二次过滤memos-cloud-openclaw-plugin在召回完成后会把候选记忆发送给一个OpenAI 兼容接口的模型做二次判断只把模型判定为keep的条目注入 Agent 上下文。该能力对应的完整参数定义可在 openclaw.plugin.json 的configSchema中看到clawdbot.plugin.json与moltbot.plugin.json中也有相同声明。2.1 开启过滤开关两种配置方式在openclaw.json的插件配置块中写入{ plugins: { entries: { memos-cloud-openclaw-plugin: { config: { recallFilterEnabled: true, recallFilterBaseUrl: http://127.0.0.1:11434/v1, recallFilterApiKey: sk-..., recallFilterModel: qwen2.5_7b } } } } }注意开启过滤时recallFilterBaseUrl与recallFilterApiKey为必填。若缺少二者之一插件会跳过过滤并输出警告见 index.js 中maybeFilterRecallData的守卫逻辑此时记忆将不过滤直接注入。也可以完全用环境变量配置二者等价环境变量映射定义在 config-resolution-schema.jsexport MEMOS_RECALL_FILTER_ENABLEDtrue export MEMOS_RECALL_FILTER_BASE_URLhttp://127.0.0.1:11434/v1 export MEMOS_RECALL_FILTER_API_KEYsk-... export MEMOS_RECALL_FILTER_MODELqwen2.5_7b2.2 高级参数超时、重试与失败策略原文档以recallFilterTimeoutMs与recallFilterFailOpen为例给出进阶配置。实际上云插件共暴露 8 个过滤相关参数全部参数及其行为如下表参数环境变量默认值说明recallFilterEnabledMEMOS_RECALL_FILTER_ENABLEDfalse总开关开启后先过滤再注入recallFilterBaseUrlMEMOS_RECALL_FILTER_BASE_URL空OpenAI 兼容接口地址例如http://127.0.0.1:11434/v1recallFilterApiKeyMEMOS_RECALL_FILTER_API_KEY空接口鉴权密钥接口无需鉴权时可留空recallFilterModelMEMOS_RECALL_FILTER_MODEL空用于筛选记忆的模型名recallFilterTimeoutMsMEMOS_RECALL_FILTER_TIMEOUT_MS30000单次过滤调用超时毫秒代码兜底下限 1000msrecallFilterRetriesMEMOS_RECALL_FILTER_RETRIES1失败重试次数指数退避120ms × (attempt1)recallFilterCandidateLimitMEMOS_RECALL_FILTER_CANDIDATE_LIMIT30每类候选memory/preference/tool_memory最多送入模型的数量recallFilterMaxItemCharsMEMOS_RECALL_FILTER_MAX_ITEM_CHARS500每条候选送入模型前截断的字符上限代码兜底下限 80recallFilterFailOpenMEMOS_RECALL_FILTER_FAIL_OPENtrue过滤失败时是否回退为「不过滤、全量注入」默认值口径说明READMEapps/MemOS-Cloud-OpenClaw-Plugin/README.md与 index.js 中代码兜底均采用上述数值其中recallFilterTimeoutMs在配置解析层config-resolution-schema.js的 UI 默认值为6000运行时以代码兜底30000为准。若使用本地小模型如 Ollama 冷启动建议调大超时——源码在超时错误信息中明确提示raise recallFilterTimeoutMs; local LLMs often need 30s on cold start。按需调整超时与失败策略的配置示例{ config: { recallFilterTimeoutMs: 6000, recallFilterFailOpen: true } }recallFilterFailOpen的含义在原文档中强调为默认 fail-open过滤模型超时或报错时插件自动回退为「不过滤、全量注入」保证当前对话不被中断。从源码看index.js若显式改为false则失败时会反向清空三类候选列表memory_detail_list、preference_detail_list、tool_memory_detail_list置空相当于 fail-closed 语义。两种策略分别对应「保可用性」与「保纯净度」的取舍。2.3 工作原理一次完整的过滤调用链结合 index.js云插件的过滤流程可以拆成四步召回后拦截插件注册在before_prompt_build生命周期钩子OpenClaw 版本 ≥2026.5.7时启用旧版本回退到before_agent_start见 index.js。每轮对话开始前runRecall调用/search/memory获取候选随后调用maybeFilterRecallData。候选打包buildRecallCandidates将结果按memory_detail_list、preference_detail_list、tool_memory_detail_list三类切分每类取前recallFilterCandidateLimit默认 30条逐条用recallFilterMaxItemChars默认 500 字符截断附带relativity相关度字段。模型判断callRecallFilterModel向${recallFilterBaseUrl}/chat/completions发起请求temperature固定为0保证判定确定性system 提示词为You are a strict memory relevance judge. Return JSON only. Keep only items directly useful for answering current user query. If unsure, do not keep.用户消息携带user_query、candidate_memories与output_schema模型需返回keep: { memory: [...], preference: [...], tool_memory: [...] }各为数字索引数组及可选reason。按索引保留applyRecallDecision解析模型返回的索引仅将对应位置的条目保留回三类列表其余丢弃随后注入上下文。插件会输出形如recall filter applied: memory 30-8, preference 12-3, tool_memory 5-1的结构化日志便于观测过滤力度。此外请求带Authorization: Bearer apiKey头若配置了 Key失败时按recallFilterRetries次重试并使用AbortController实现超时控制。2.4 典型使用场景剪枝长期记忆长对话中记忆越积越多把与当前 prompt 无关的内容剔掉可显著降低主模型上下文 Token 占用——这正是项目描述中 35.24% Token 节省能力在召回侧的主要来源之一。提升推理准确度处理复杂任务时过滤掉早期无关记忆避免干扰核心任务的推理。本地模型做低成本预筛用 Ollama 运行qwen2.5:7b这类本地小模型充当过滤器在不增加主模型 API 成本的前提下提升注入质量。三、Local Plugin三层召回 RRF/MMR LLM 精筛memtensor/memos-local-plugin的检索模块core/retrieval实现了更完整的多阶段本地检索过滤先按Skill / Trace-Episode / World Model三层召回候选再做RRF MMR融合去重若配置了 LLM注入前还会执行一次最终相关性检查丢弃只与当前任务共享表层关键词的条目。3.1 通过 Memory Viewer 配置本地插件不需要手改 JSON直接在目标 Agent 对应的 Memory Viewer 中配置AgentMemory Viewer 地址OpenClawhttp://127.0.0.1:18799Hermeshttp://127.0.0.1:18800这两个端口在 ARCHITECTURE.md 中被描述为默认值Hermes 侧还可从 daemon_manager.py 确认HERMES_VIEWER_PORT 18800。配置步骤打开对应 Agent 的 Memory Viewer进入Settings → AI Models在LLM区域选择一个 Provider填写接口地址、API Key、模型名及相关字段点击Test验证模型可用保存设置Viewer 会自动重启插件并加载新配置。保存后本地检索便可在召回与 RRF/MMR 排序之后使用该 LLM 做相关性检查。若未配置 LLM插件仍会走内置的多通道召回与机械阈值过滤基础召回能力不受影响。3.2 本地检索完整流程原文档给出的流程图如下这是理解本地检索过滤的骨架User request → Build retrieval query and tags → Tier 1: Skill candidates → Tier 2: Trace / Episode candidates → Tier 3: World Model candidates → Multi-channel recall: vector / FTS5 / pattern / error signatures → RRF fusion MMR diversity control → Optional LLM relevance check → Inject into the agent从源码看core/retrieval/README.md三层各自回答不同的问题Tier 1任务级来源表skills回答「我有没有一个针对这个任务的具名技能」仅召回满足Skill η ≥ minEta的已结晶技能Tier 2步骤级来源表traces与 rollup 汇总回答「上次我尝试这个时什么有效」召高高价值 trace 片段与子任务 episode 摘要Tier 3推理级来源表world_model回答「我实际处于什么环境」召回环境拓扑与推理规则。查询构建由buildQuery统一完成它同时抽取粗粒度领域标签如docker、pip、plugin与捕获侧的 tagger.ts 共用关键词表保证「打标」与「检索」两端标签一致。3.3 多通道召回与 RRF/MMR 融合每个层级内部会并行发起多个候选通道见 README.md通道实现适用场景vec_summarytraces.vec_summary余弦相似用户/助手对话内容的语义召回vec_actiontraces.vec_action余弦相似Agent 动作/工具序列的语义召回vecskills.vec、world_model.vec余弦Tier1/Tier3 语义召回ftsFTS5 trigram MATCHmigration 010关键词精确命中英文与 ≥3 字中文patternLIKE %term%CJK bigram 2 字符 ASCII低于 trigram 窗口的 2 字中文名/动词structuralinstr(error_signatures_json, frag)错误签名逐字回放排序由 ranker.ts 完成三件事层内优先级混合Tier2 的 trace/episode 按relevance weightCosine·cos weightPriority·priorityFor(V, Δt)计算Tier1 技能则混合余弦与可靠性η跨通道 RRF 融合对每条候选出现在多个子列表中的情况累加score 1 / (k rank_i)其中k rrfConstant 60。一个同时被向量与 FTS 命中的条目其 RRF 分数会显著高于单一通道命中——这堵住了纯余弦检索「单通道误报」的漏洞MMR 多样性控制贪心执行λ · relevance − (1−λ) · max_sim并在 MMR 前先按「每个非空层选一条」做种子注入避免最终包变成单一层级的「垄断」结果。3.4 可选 LLM 相关性检查fail-closed 安全兜底排序完成后若已配置 LLM 且开启开关将执行最后一道精度检查。实现位于 llm-filter.ts核心函数llmFilterCandidates的关键行为候选标记每条候选按层级渲染成[SKILL]/[TRACE]/[EPISODE]/[WORLD-MODEL]标签加内容默认每条最多llmFilterCandidateBodyChars默认 500 字符模型只依据内容语义做判断不暴露内部检索分数few-shot 提示词系统提示词定义在 retrieval-filter.tsRETRIEVAL_FILTER_PROMPTid 为retrieval.filterversion 5内含 5 组 KEEP/DROP 示例明确要求模型「丢弃表面相似但子问题不同的条目」「不要填充凑数」并输出{ranked: [1-based 索引], sufficient: boolean}sufficient自报告模型需自我评估保留集是否足以回答查询false时调用方可决定扩大召回如触发memos_search结果上限llmFilterMaxKeep运行时默认 4见 defaults.ts对保留条目封顶llmFilterMinCandidates默认 2表示候选数低于该值时跳过精筛直接放行。与云插件的关键差异在于失败语义本地插件的 LLM 精筛是fail-closed。当 LLM 调用抛错网络、超时、JSON 解析失败时代码不会把整个排序列表灌进 prompt而是改用更紧的机械截断保留分数 ≥0.7 × topScore的条目且受llmFilterMaxKeep上限约束若截断后为空则至少保留排名第一的候选保证 Agent 永远看得到东西见 llm-filter.ts 的safeCutoff。这一策略与云插件默认的 fail-open 形成互补云端求「不打断对话」本地求「绝不让噪声进 prompt」。3.5 预期效果注入的上下文更聚焦、噪声更少Skill、Trace/Episode、World Model 命中不再仅由向量相似度单独决定RRF 多通道交叉验证LLM 不可用时检索自动退化为更严格的机械阈值基础召回不被破坏。相关行为均有测试覆盖例如 llm-filter.test.ts 验证了disabled直通、below_threshold跳过、单候选过滤、按索引精筛、按llmFilterMaxKeep截断以及失败安全截断等路径ranker 的 MMR 与层种子边界情况由 ranker.test.ts 覆盖。四、两种方案对比与选型建议维度Cloud PluginLocal Plugin过滤位置云召回结果注入前before_prompt_build本地三层检索 融合排序之后触发方式recallFilterEnabled开关Memory Viewer 配置 LLMalgorithm.retrieval.llmFilterEnabled过滤模型指定的 OpenAI 兼容模型通过 Viewer 配置的 LLM Provider失败语义默认fail-open不过滤全量注入fail-closed0.7·topScore机械截断兜底候选来源memory / preference / tool_memory 三类Skill / Trace-Episode / World Model 三层适用场景云端集中式记忆、想快速压低 Token 消耗本地多 Agent、需要多层融合与精细控制选型建议追求「成本低、接入快」用云插件的模型二次过滤配合本地 Ollama 小模型做预筛追求「检索质量上限」用本地插件的三层 RRF/MMR 流水线并务必配置 LLM 以开启最终精筛。两者可以同时使用——云端负责跨会话的偏好/工具记忆精筛本地负责技能、痕迹与世界模型的层级化取舍。五、实战注意事项本地模型冷启动超时Ollama 首次加载模型可能超过 30 秒云插件会按recallFilterTimeoutMs中断并报出明确的提示信息生产环境建议将该值调大或配合模型预热。recallFilterModel命名README 示例使用qwen2.5:7b冒号分隔原文档写作qwen2.5_7b以你所用推理服务的实际模型标识为准。候选截断策略recallFilterMaxItemChars控制单条候选送入过滤模型的长度值过小可能丢失关键事实过大则浪费过滤模型的输入 Token——500 字符是召回/成本兼顾的默认折中。失败策略双刃剑云端recallFilterFailOpenfalse时过滤失败会导致候选全部清空宁可没有记忆也不给噪声仅适合对纯净度要求极高的场景。版本钩子差异云插件的召回挂载点取决于 OpenClaw 版本低于2026.5.7的主机会退化为before_agent_start行为一致但注入时机略有差异。参考文件导航本文主题文档docs/en/openclaw/examples/recall_filter.md云插件实现apps/MemOS-Cloud-OpenClaw-Plugin/index.js云插件配置解析与默认值apps/MemOS-Cloud-OpenClaw-Plugin/lib/config-resolution-schema.js云插件完整参数文档apps/MemOS-Cloud-OpenClaw-Plugin/README.md本地检索模块总览apps/memos-local-plugin/core/retrieval/README.mdLLM 精筛实现apps/memos-local-plugin/core/retrieval/llm-filter.ts精筛提示词apps/memos-local-plugin/core/llm/prompts/retrieval-filter.ts检索配置默认值apps/memos-local-plugin/core/config/defaults.ts精筛测试apps/memos-local-plugin/tests/unit/retrieval/llm-filter.test.ts赞分享人工智能大模型Agent 记忆AI AgentRAG知识图谱dsh-plugin【免费下载链接】MemOSSelf-evolving memory OS for LLM AI Agents: ultra-persistent memory, hybrid-retrieval, and cross-task skill reuse, with 35.24% token savings and DeepSeek Harness support.项目地址https://gitcode.com/gh_mirrors/memos/MemOS点击查看免费下载相关推荐MemOS Cloud OpenClaw 插件实战指南用 Lifecycle 钩子为 Agent 接入召回式长期记忆MemOS Cloud OpenClaw 插件实战指南用 Lifecycle 钩子为 Agent 接入召回式长期记忆 本指南面向使用 OpenClaw含 M人工智能大模型Agent 记忆AI AgentRAG知识图谱dsh-pluginMemOS 本地插件 Prompt 注入与召回筛选机制全解析MemOS 本地插件 Prompt 注入与召回筛选机制全解析 本篇指南聚焦 memos local plugin MemOS 面向 OpenClaw / He人工智能大模型Agent 记忆AI AgentRAG知识图谱dsh-pluginMemOS Local OpenClaw 记忆插件全指南本地持久记忆、混合检索与技能进化的实战方案MemOS Local OpenClaw 记忆插件全指南本地持久记忆、混合检索与技能进化的实战方案 MemOS Local memtensor/memos人工智能大模型Agent 记忆AI AgentRAG知识图谱dsh-plugin上一篇NCM文件怎么转MP3ncmdump批量解密网易云NCM教程下一篇0.5秒单图生成3D模型免费开源的TripoSR完整上手指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考