claude-mem LoCoMo 评估 Phase 03构建「检索 Opus 4.6」的 QA 答题管道全解【免费下载链接】claude-memPersistent Context Across Sessions for Every Agent – Captures everything your agent does during sessions, compresses it with AI, and injects relevant context back into future sessions. Works with Claude Code, OpenClaw, Codex, Gemini, Hermes, Copilot, OpenCode More项目地址: https://gitcode.com/GitHub_Trending/cl/claude-mem本文基于 claude-mem 仓库中的 LoCoMo 评估阶段文档 Phase 03: QA Answer Pipeline完整拆解该 QA 答题管道的三个核心模块——检索上下文构建、分类别提示词模板、带延迟与 Token 计费的回答生成器——并结合同仓库中 claude-mem worker 搜索子系统的真实实现路由、编排器、搜索常量说明其底层调用链。读完后你将掌握如何用 claude-mem 的检索 API 为每个 LoCoMo QA 问题构建受限上下文窗口、如何用 Opus 4.6 以 temperature0 生成短抽取式答案以及如何用 p95 延迟与 tokens/query 指标与 Mem0 的公开基准p95 延迟 1.44s、约 1,764 tokens/query做生产就绪度对比。1. Phase 03 在 LoCoMo 评估中的位置与目标LoCoMo 是一套长程对话记忆基准给定一段跨多个会话的对话conversation先通过 claude-mem 的摄取流程将其压缩为可检索的 observations观察记录再用 QA 问题检验记忆系统 LLM能否回答正确。整个评估按阶段推进Phase 03 是其中的答题环节前序阶段文档可在 Phase 01 与 Phase 02 查看。Phase 03 要解决的核心问题是检索对每个 LoCoMo QA 问题从已摄取的对话记忆中搜索相关 observations并按会话所属 project 作用域隔离格式化把检索结果拼接为单一上下文字符串并在字符预算内做观察边界感知的截断答题调用 Opus 4.6claude-opus-4-6生成短抽取式答案上下文信息不足时输出unanswerable计量对每次 API 调用记录延迟与 input/output token 数用于与 Mem0 公开指标p95 延迟 1.44s、约 1,764 tokens/query做对比验证 claude-mem 管道的生产就绪度。阶段文档记录该阶段已于 2026-02-26 完成在 conv-26 对话的 20 个问题上跑通端到端原型平均搜索延迟 1165ms、平均答题延迟 2032ms、每题约 455 tokens结果落盘为qa-prototype-results.json7 个测试文件共 80 个测试全部通过。2. 检索模块searcher.ts 的三个函数阶段文档定义了evals/locomo/src/qa/searcher.ts中的三个函数它们构成从问题到可用上下文的完整链路。2.1 searchForContext带项目作用域的检索searchForContext(question: string, project: string, limit: number)的约定通过 worker 客户端的搜索方法查询 claude-mem 的 observationsscope 到当前对话的 project即 Phase 02 中按locomo-eval-{sample_id}命名的项目确保检索只命中同一对话的记忆不跨对话污染复用摄取层的 worker 客户端evals/locomo/src/ingestion/worker-client.ts避免重复实现 HTTP 通信返回{ results, search_latency_ms }其中search_latency_ms直接取自 worker 客户端内置计时的搜索方法——延迟指标在检索层就打好点后续无需再测。这一设计与当前仓库中 claude-mem worker 的搜索子系统是对齐的。从源码结构看worker 在 SearchRoutes.ts 中挂载了统一的/api/search及/api/search/observations、/api/search/by-file等端点并在路由中间件中对所有/api/search*请求打统一遥测点实际检索由 SearchManager.ts 的search方法编排支持按project、obs_type、concepts、files过滤并可走 Chroma 语义检索、SQLite 过滤检索或混合策略。而 search/types.ts 中的SEARCH_CONSTANTS给出默认DEFAULT_LIMIT: 20、Chroma 批量大小 100、90 天近期窗口等常量——QA 管道原型中limit: 10的取值正是建立在这类默认约束之上的更保守配置。2.2 formatSearchResultsAsContext观察边界感知的上下文拼接formatSearchResultsAsContext(searchResults)的职责是把多条检索结果拍平成一段可喂给 LLM 的文本依次拼接每条 observation 的title、facts、narrative三类字段在相邻 observation 之间插入清晰的分节分隔符让模型能区分证据来自哪一条记忆——这对 multi-hop需要跨会话组合信息类别尤其重要对字段缺失或结果结构不完整的情况有容错测试覆盖raw text fallback与partial fields两种退化输入。2.3 buildContextWindow字符预算内的边界截断buildContextWindow(formattedContext: string, maxChars: number)负责把上下文裁剪到预算内默认预算12000 字符约合 3000 tokens按 1 token ≈ 4 字符的常见估算截断点选在最后一条完整 observation 的边界上而不是句子中间——被丢弃的一定是整条记忆不会留下半截叙述干扰模型判断返回值除最终文本外还携带元数据实际使用的 observation 条数与总字符数供日志与结果文件记录。这一整条进、整条出的截断策略是典型的上下文工程取舍宁可少一条记忆也不引入噪声。3. 提示词模板与五类问题分类evals/locomo/src/qa/prompts.ts包含系统提示词与用户提示词构建器两部分。3.1 系统提示词抽取式、受上下文约束QA_SYSTEM_PROMPT给模型的三条硬性指令只能基于所提供的对话上下文作答open-domain 类别除外见下答案要短、抽取式不要写成完整句子——这与 max_tokens256 的预算互为约束上下文信息不足时原样输出unanswerable不得猜测。unanswerable约定让答不出来成为可机器判定的合法输出避免模型硬编答案污染准确率统计。3.2 buildUserPrompt五个类别各有专属提示buildUserPrompt(question: string, context: string, category: string)将上下文块 问题组织为用户消息并按 LoCoMo 的 5 个问题类别注入不同指令提示类别注入的指令提示原文single-hopAnswer using a specific piece of evidence from the context.multi-hopThis may require combining information from multiple conversation sessions.temporalPay careful attention to dates and the temporal ordering of events.open-domainYou may use both the provided context and general knowledge.adversarialBe careful — verify claims against the context before answering. The question may contain false premises.未知类别回退到无类别提示的通用格式五类提示的设计意图很清晰temporal 类考察记忆系统对时间顺序的保持能力这正是跨会话记忆的难点adversarial 类问题自带错误前提考察系统是否会盲从问题表述open-domain 类是唯一允许使用上下文外通用知识的类别。未知类别的 fallback 分支保证了管道遇到新类别时不会崩溃。4. 回答生成器 answerer.ts模型配置与双指标埋点evals/locomo/src/qa/answerer.ts的answerQuestion(question: string, context: string, category: string)调用 Anthropic API关键配置与埋点如下阶段文档记录当时通过bun add anthropic-ai/sdk安装了anthropic-ai/sdk0.78.0配置项取值目的modelclaude-opus-4-6统一答题模型便于与基准对比max_tokens256答案应短而抽取式硬截断预算temperature0确定性输出保证同一问题可复现计时answer_latency_ms从 API 调用发起到收到响应计量input_tokens/output_tokens取自响应usage字段返回值结构为{ predicted_answer: string, // 从响应 content blocks 提取文本 input_tokens: number, output_tokens: number, answer_latency_ms: number }答案文本从响应内容块中提取测试覆盖了多 content block 场景下的拼接逻辑以及空内容时回退为unanswerable的边界情况。为什么必须同时记录延迟和 token因为 Mem0 的公开指标是p95 延迟 1.44s 约 1,764 tokens/query——单看准确率无法回答这套管道能否生产化。检索延迟、答题延迟、每问 token 三项分开计量后才能与基准逐项对齐也才能定位瓶颈在检索侧还是 LLM 侧。5. 单对话原型运行 run-qa-one.ts端到端验证由evals/locomo/scripts/run-qa-one.ts完成流程与产物选对话加载 Phase 01 已摄取的第一个对话conv-26用getQuestionsForConversation取全部 QA 问题该函数默认排除 adversarial 类别限流原型阶段只取前 20 个问题保持类别混合实际跑出 10 条 temporal、8 条 single-hop、2 条 multi-hop逐题执行四步用该对话的 project 名检索上下文limit: 10构建上下文窗口调 answerer 用 Opus 4.6 生成预测答案每题打印一行日志{category} | Q: {question_truncated} | Pred: {answer} | Truth: {ground_truth} | search: {search_latency_ms}ms | answer: {answer_latency_ms}ms落盘全部结果写入evals/locomo/results/qa-prototype-results.json每个对象含question, category, predicted_answer, ground_truth, search_results_count, search_latency_ms, answer_latency_ms, answer_input_tokens, answer_output_tokens九个字段汇总打印总题数、按类别分布、3 组预测 vs 标准答案样本、延迟摘要搜索与答题各自的 mean/p95、每问平均 token 数限速保护API 调用之间加 500ms 延迟规避速率限制。运行方式bun evals/locomo/scripts/run-qa-one.ts阶段文档记录的实测基线平均搜索延迟 1165ms、平均答题延迟 2032ms、约 455 tokens/题。对比 Mem0 的约 1,764 tokens/queryclaude-mem 管道在 token 消耗上低了一个量级——这直接来自检索 limit 10 12000 字符上下文窗口的双重收紧验证了 2.3 节截断策略的计量意义。6. 测试套件 qa-pipeline.test.ts23 个测试的覆盖矩阵evals/locomo/tests/qa-pipeline.test.ts共 23 个测试按函数分组formatSearchResultsAsContext5 个多观察的分节分隔、空数组、raw text 回退、字段部分缺失、3 条观察的分隔符正确性buildContextWindow6 个预算内透传、边界截断、紧预算、零预算、空上下文、默认 maxChars 取值buildUserPrompt7 个5 个类别各自的提示词命中、上下文块与问题均被包含、未知类别回退answerQuestion5 个mock Anthropic 客户端发送的 model/system prompt/max_tokens 正确、文本提取并 trim、空内容回退unanswerable、token 与延迟指标取自 usage、多 content block 拼接。其中mock SDK 客户端的做法值得注意不发起真实 API 调用即可断言请求参数模型名、系统提示、max_tokens既省钱又让参数回归可被 CI 捕获。运行方式bun test evals/locomo/tests/qa-pipeline.test.ts阶段文档记录该文件与其余 6 个评估测试文件合计80 个测试全部通过。7. 与仓库搜索子系统的对应关系虽然本阶段文档描述的evals/locomo/评估代码未包含在当前仓库快照中其存在与实现细节以阶段文档 LOCOMO-EVAL-03.md 的完成记录为准但 QA 管道所依赖的 claude-mem 搜索能力在主代码中是真实可查的API 入口SearchRoutes.ts 挂载/api/search统一端点与/api/search/observations等专用端点路由中间件为全部搜索请求打统一遥测检索编排SearchManager.ts 的search方法按searchType/obs_type/concepts/files等选项分发到 Chroma、SQLite 或混合策略并在project维度上做作用域过滤——正是searchForContext(question, project, limit)第二参数的落点结果模型与常量search/types.ts 定义了SearchResultsobservations/sessions/prompts 三类结果、SearchStrategyHint与SEARCH_CONSTANTS默认 limit 20、90 天近期窗口策略层src/services/worker/search/strategies/下提供 Chroma、SQLite、Hybrid 三种策略实现。从源码结构看QA 管道的project 作用域 limit 10 计时搜索完全落在上述接口的能力范围内searchForContext是 worker 搜索 API 面向评估场景的一层薄封装而非另起炉灶的检索实现。这保证了评估测量的是 claude-mem 真实生产代码路径的延迟与成本而不是为评测特化的捷径。8. 小结Phase 03 交付了一条可复用的 QA 答题管道searchForContext项目作用域检索 延迟埋点→formatSearchResultsAsContext带分节的证据拼接→buildContextWindow12000 字符/约 3000 token 预算、观察边界截断→answerQuestionclaude-opus-4-6、temperature0、max_tokens256、token 与延迟计量。23 个单测 mock SDK 的参数断言保证了行为回归可检测conv-26 上的 20 题原型给出 1165ms / 2032ms / 455 tokens 的实测基线为后续与 Mem0 公开指标的 p95 与 tokens/query 逐项对比、以及扩展到全部 10 个对话的完整评估见 Phase 04 起的后续阶段打下了计量基础。【免费下载链接】claude-memPersistent Context Across Sessions for Every Agent – Captures everything your agent does during sessions, compresses it with AI, and injects relevant context back into future sessions. Works with Claude Code, OpenClaw, Codex, Gemini, Hermes, Copilot, OpenCode More项目地址: https://gitcode.com/GitHub_Trending/cl/claude-mem创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考