知识图谱
普通的 AI 编程助手靠关键词匹配找代码,遇到跨文件调用就会开始猜。DuoDuoCode 转而构建真实的代码图谱——用编译器级的解析器提取符号与关系,让 AI 的回答基于结构而非巧合。
它解决了什么
| 没有图谱 | 有图谱 |
|---|---|
| 问”谁调用了这个函数”,靠全文搜索猜 | 沿调用边精确遍历 |
| 改一处不知道影响范围 | 先算出传递闭包再动手 |
| 重构时漏改调用点 | 按符号定位,不漏不误 |
它是怎么构建的
- 用 tree-sitter 对每个源文件做真实 AST 解析(不是正则匹配)
- 提取符号(函数、类、模块等)与它们之间的多种关系边:调用、继承、导入、实现等
- 跨文件解析导入,把符号引用映射到真实定义
- 写入图数据库,供
graph_query工具查询
索引在后台自动进行,不需要手动触发。文件保存后按增量更新——通过比对修改时间与内容哈希判断哪些文件真正变了,只重建变化的部分,因此大项目不会因为保存而卡顿。
支持的语言
共 41 种,全部为编译进二进制的真实语法解析器:
Rust、TypeScript、JavaScript、Python、Go、Java、C、C++、C#、Ruby、Scala、PHP、Lua、Dart、Elixir、YAML、JSON、HTML、CSS、Shell、Haskell、Nix、OCaml、Pascal、PowerShell、R、Fortran、Solidity、XML、CMake、Fish、Julia、Kotlin、Zig、SQL、TOML、Svelte、Clojure、Erlang、Ada、Dockerfile
不在列表中的语言不会进入图谱,但文本搜索(grep)仍然可用。
如何使用
你不需要做任何事——图谱就绪后,AI 会自动改用它:
graph_query工具出现在可用工具中grep与bash的工具说明会被注入提示,要求模型在搜索代码结构时优先使用graph_query,而把grep留给日志、配置、字符串等非代码内容
所以你直接问就行:
这个函数被哪些地方调用了?
改掉这个接口会影响哪些文件?
找出所有实现了这个 trait 的类型
在图谱尚未就绪时,graph_query 不会出现,AI 会退回文本搜索,功能不受影响,只是精确度下降。
权限
图谱查询对应权限项 graph_query,默认放行。它只读取索引数据,不触碰文件系统。