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

yinxiangzhengccc 2026-07-28 10:41 1

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 模式

  • 更多语言支持


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

最新回复 (2)
  • whisper1225 07-28 14:33
    1
    请教下,GitNexus 支持语义向量检索,你这个和 GitNexus 有啥区别
  • yinxiangzhengccc 楼主 07-28 19:53
    2
    @whisper1225 我刚才看了 GitNexus 官方文档的描述,看起来他们只支持代码语义检索,不支持业务语义检索

    比如他能分辨出来 `提交链路涉及那些方法`
    ```
    public void submit(){
    ...
    }


    submit()



    调用:

    save()



    notify()



    publish()
    ```


    如果代码里存在 3 个 submit 方法, 其中一个是 `审批单提交 ` 他是无法分辨这种业务语义的

    但是 IGraph 支持代码零注释的情况下,实现业务语义检索
* 帖子来源V2EX
返回