本地持久代码索引方案
_febin_p_ · reddit · 2026-07-19
作者做了一个面向 AI 编码 agents 的本地持久代码索引 daemon(mcp-injector),目标是避免 agent 反复整仓库读文件、浪费上下文。 ### 核心做法 - 用语言相关 AST parser 扫描仓库,把符号、文件、行号映射存入本地 SQLite(WAL 模式)。 - `get_project_map` 返回的是 AST 折叠后的项目图:保留函数签名、import、类型、接口等,把函数体替换成压缩标记。 - 这样既能让模型先知道“有哪些东西”,又在需要时按需取回原始源码。 ### 实测与工程细节 - 在一个仓库里,初始 project map 从 **892k tokens** 降到 **143k tokens**,减少 **84.9%**。 - 为了让 Anthropic 的 prompt cache 命中稳定,作者把文件顺序、时间戳、mtime、换行等易变因素都规范化,确保同一仓库多次生成字节级一致的 map。 - 通过 inotify/FSEvents 和 git post-checkout hook 做增量更新,只重建变更文件。 - 上层提供了 BM25 符号搜索、原文件检索、依赖/影响范围遍历、Mermaid 图、git 上下文、正则搜索、数据库 schema 检查等 MCP 工具。 - 写回前会校验 payload,避免 agent 误把压缩表示直接写回源码。 - 索引前还会用熵启发式检测并脱敏疑似 secrets。