写了个代码知识图谱工具 igraph,和 CodeGraph 走了不同的路

Git: https://github.com/Ychangqing/IGraph 欢迎体验~ 拍砖😂 背景 之前一直在用 CodeGraph 配合 Claude Code 做代码理解,用了几个月发现一个核心问题:CodeGraph 本质上是个结构查询工具,不是语义检索工具。 什么意思呢?比如我想找"处理用户下单的逻辑",CodeGraph 要求你知道函数名叫什么(createOrder),然后它帮你展开调用链。但如果你只知道业务含义、不知道代码里的命名,它就无能为力了。 这就是我做 igraph 的原因——在代码图谱的基础上加了语义层,让你可以用自然语言搜代码。 igraph 和 CodeGraph 的核心区别 说实话两个项目底层技术有不少重合的地方(都用 Tree-sitter 解析、SQLite 存储、MCP 协议对接),但设计思路差别很大: CodeGraph 的思路:建一张精确的代码结构图 → Agent 按图索骥 igraph 的思路:建图 + 给每个符号加语义摘要 + 向量化 → 支持自然语言检索 几个我觉得比较有价值的设计决策

  1. 双通道检索 + RRF 融合 不单独依赖向量检索或全文检索,两个通道各有擅长的场景:

向量通道:语义匹配好("获取用户列表" ↔ fetchUserList) FTS5 通道:精确匹配好(搜 fetchUser 直接命中)

用 RRF 算法把两个通道的排名融合,只看排名不看原始分数,避免了两种分数量纲不同的问题。实测比单通道 Recall 高不少。 2. 多模态资源挂载 可以把 PRD 文档、数据库 Schema 挂进来。挂载后系统自动通过向量相似度把需求点和代码文件关联起来。 这样 Agent 在理解代码的时候能同时看到"这段代码对应哪个需求"、"操作的是哪张表"。 3. 优雅降级 这个是从实用角度出发的——不是每个人都有 LLM API 或 Embedding 服务。igraph 的策略是:

有 LLM → 生成高质量中文摘要 没有 → 用函数签名拼接一个启发式摘要,质量差但能用 有 Embedding → 向量 + 全文双通道 没有 → 纯 FTS5 全文检索

总之不管环境什么条件,igraph build 都能跑通,不会卡在"请先配置 API Key"。 4. 断点续跑 大仓库跑 LLM 摘要可能要几个小时,中途网络断了或者手动 Ctrl+C 了,下次跑会自动跳过已完成的文件,从断点继续。状态存在 SQLite 里,不靠临时文件。 不足和计划 老实说也有明显短板:

首次建库比 CodeGraph 慢(因为要跑 LLM + Embedding ,CodeGraph 只做 AST 解析) 语言支持目前只有 5 种( TS/JS/Python/Java/Go ),CodeGraph 支持更多 没有实时文件监听,增量更新要手动跑 igraph build(计划加) 向量检索质量取决于 Embedding 模型,换了模型得重新向量化

后续想做的:

PRD 里的图片识别(目前只提取文本) 实时 watch 模式 更多语言支持

感兴趣的可以试试,有问题随时交流。