Codex 本地知识检索试点:从 SQLite 基线到全局 NO-GO
Agent 能搜索到旧任务文档,并不等于它会正确阅读、引用并完成工作。这次 HomeLab 试点把问题拆成三层:检索质量、工具接入机制,以及真实 Agent 收益。最终结论是:SQLite 本地检索值得保留为工作区候选,但当前证据不足以支持 Codex 全局接入。
相关的多会话推进与证据边界见 《Codex 多会话自动推进:角色分流、回执续跑与有界修复》;OpenClaw 的本地记忆与执行权限边界见 《OpenClaw 本地记忆落地与无审批能力边界》。
为什么先做小型基线,而不是直接上向量数据库
现有知识源已经分成任务卡、稳定技术文档和历史证据。真正缺少的是一个有界的发现入口,而不是新的权威数据库。试点因此只索引逐文件白名单、已脱敏的派生文档,并保留 workspace、文档类型、任务 ID、状态、更新时间、权威等级、敏感级别和来源指针。
索引始终是可再生副本,不能覆盖原文;检索结果只作为 data,不能变成指令、权限或生产真值。fetch 只接受索引返回的 doc_id,不开放任意路径读取。跨工作区合成样本和恶意正文 fixture 用来验证隔离与“不执行检索内容”。
这个规模下,先比较合理关键词 rg、SQLite FTS5 trigram 和字符级 TF-IDF,能够回答“更重方案是否真的增加价值”。只有基线暴露稳定的语义缺口,embedding 或 hybrid RAG 才有进入下一轮的理由。
新 holdout 的结果
评测冻结了 12 个新的中文问题,其中 9 个可答、3 个应拒答。它们覆盖精确任务 ID、来源路径、跨文档职责、历史冲突、当前状态、权限边界、无答案、workspace 隔离、恶意排除与改写表达。
| 后端 | Recall@1 | Recall@3/5 | MRR | Top1 | 无答案准确率 | 噪声 |
|---|---|---|---|---|---|---|
合理关键词 rg |
0.7778 | 1.0000 | 0.9444 | 0.8889 | 1.0000 | 3 |
| SQLite trigram | 0.8889 | 1.0000 | 1.0000 | 1.0000 | 1.0000 | 3 |
| char-TFIDF | 0.8889 | 1.0000 | 1.0000 | 1.0000 | 1.0000 | 2 |
这里有一个重要口径:rg 和 trigram 使用预先登记的合理关键词,TF-IDF 接受自然语言问题。它们比较的是各自合理的查询路径,不是“所有后端都接收同一句自然语言”的统一入口实验。因此结果支持“trigram 是轻量而有效的词法候选”,但不能证明它能无适配替代自然语言检索。
char-TFIDF 只少一个噪声返回,没有改善 Recall、MRR、Top1 或拒答准确率。对当前小语料而言,这不足以抵消 sklearn 依赖和冷启动成本。
Search/fetch 试用证明了什么
5 个预登记问题通过 CLI 子进程实际执行 search,再按返回的 doc_id 执行 fetch。其中 4 个完整取回了全部相关文档,1 个跨文档问题只取回两篇相关证据中的一篇;工具错误为 0。
准确说法是 4/5 相关文档完整取回,而不是 4/5 有效引用或 Agent 任务成功。脚本没有让独立 Agent 阅读证据、生成答案并接受人工或模型评分;同一个 worker 还提前知道语料与标签。所以下列指标仍然是 UNKNOWN:
-
Agent 有效引用率与答案正确率;
-
skill 隐式触发率;
-
检索对任务时间和 token 的因果收益;
-
独立 session 在真实工作流中的旧知识误用率。
这个区分和异步工作流里的“消息已取回不等于业务处理完成”相同:工具返回只证明数据到达调用方,不能替代下游行为证据。
延迟也不能混成一个数字
进程内 holdout 测到的是后端查询延迟;CLI 试用还包含 Python 和依赖冷启动;已知路径直读则跳过了发现过程。这三种数字回答不同问题。
-
SQLite trigram 的进程内平均查询约 1 毫秒;
-
char-TFIDF 的进程内平均查询约 98 毫秒;
-
懒加载 sklearn 后,完整 CLI search+fetch 平均仍约 1.39 秒;
-
已知路径直接读取平均约 0.22 毫秒。
因此不能宣布检索“普遍加速”。当权威路径已知时,直接读取明显更合适;检索的潜在收益只存在于路径未知、名称改写或需要跨来源发现的场景。上下文字节在小样本中有所减少,但没有计费 token 数据,不能把 bytes 当 token。
接入机制通过,但全局采用不通过
隔离候选已经验证:
-
同阶段相同事件/问题去重,跨阶段允许重新检索;
-
来源更新或删除后重建索引,不继续把旧副本当当前真值;
-
workspace 和敏感级别过滤;
-
未晋级 helper 只能提供 provenance,不能直接执行;
-
恶意正文仍是 data;
-
无结果与工具故障都显式回退到权威文档或
rg,不能猜测权限。
候选 skill 只能引导模型调用工具,不能保证每个 Codex session 自动触发。若需要确定性调用,必须由 harness 在任务规划、材料性失败对齐或上下文恢复时做一次有界 preflight,并在 phase 内去重。
当前全局结论是 NO-GO,原因包括:没有独立 Agent 行为证据、存在一次跨文档漏取回、重后端增益不足,以及全局共享库会模糊 workspace 的 allowlist、更新写权和来源权威。
后续如果继续,应先在 HomeLab 单工作区安装稳定 search/fetch reader,优先选择 SQLite trigram 或其它轻量词法后端,再用独立 Agent 的预登记真实任务测完整取回、实际引用、答案正确、时间和 token。全局 skill、MCP、后台服务或跨工作区联邦索引都应在这些证据成立后单独授权,而不是由一次小型 CLI PASS 自动推出。
本次评测流程采用“小型代表任务、捕获实际运行与产物、确定性检查、再评分”的思路,参考 OpenAI 的 Skill evals 指南。
