语义代码图谱
语义代码图谱在符号索引(SymbolIndex)之上构建关系层,并辅以向量检索,帮助规划与改写查找跨文件调用关系和模块依赖。结果取决于语言解析、文件范围与索引状态,不代表项目全貌。
索引构建
索引以项目根目录为单位构建与查询,不同项目之间相互隔离。内核会为项目构建两类索引:
- 符号关系索引:解析代码中的符号及其关系,覆盖调用(Calls)、接口实现(Implements)、**模块依赖(DependsOn)**三类关系。每条关系记录都包含源符号、目标符号与关系类型。
- 向量索引:将代码片段编码为向量做语义检索。具体嵌入方式取决于配置和模型资源是否可用,不保证安装包内置固定模型或固定大小;本地模型不可用时可使用词法回退。配置厂商嵌入服务时,相关代码片段会发送到该服务,使用前检查数据政策。
- 检索为混合模式:向量召回 + FTS5 关键词兜底,两者结果都携带来源文件与文本预览,可直接定位到具体文件。
跨文件引用查询
所有查询都以项目根目录为边界、按符号名发起:
| 查询 | 说明 |
|---|---|
| 调用方查询 | 谁调用了这个符号 |
| 被调用方查询 | 这个符号调用了谁 |
| 接口实现查询 | 索引中记录的接口 / trait 实现 |
| 模块依赖查询 | 模块依赖了哪些下游 |
| 关系子图 | 以某符号为中心、按深度 N 逐层扩展的关系网络 |
两类索引协同工作:向量检索负责语义相关的模糊查找,关系图谱沿已记录的引用关系查询;缺失关系和同名符号可能影响结果。子图查询从中心符号出发,以深度优先方式同时向调用方与被调用方两侧扩展,常用于评估改动的爆炸半径。
关系层是语义代码图谱 Phase 1 的核心成果:先由符号索引完成函数、类型与模块的抽取,再在其上建立三类关系边,所有查询均为只读操作,不会修改项目代码。查询实现直接借用符号索引做只读访问;子图扩展带访问去重,即使存在循环调用也不会陷入死循环。
图谱查询不等同于 LSP 的诊断、导航或补全;语言服务需另行安装并检查连接状态。
与 RUSH 配合
RUSH 深度任务的 Planner 在规划阶段会查询代码图谱:从任务描述提取符号关键词,定位后取一层调用关系(调用方 / 被调用方),以 [代码图谱影响分析] 节注入规划上下文——影响文件清单与潜在风险的评估据此获得图谱实证,而非纯模型猜测。典型场景:
- 重命名函数前,检查索引中记录的调用方,并补充文本搜索与测试。
- 修改模块接口前,检查已记录的依赖关系,人工确认影响范围。
- 熟悉陌生代码库时,从入口符号逐层展开关系子图。
大型项目建议:先完成当前项目的索引,再检查检索结果与任务上下文。索引覆盖依赖语言解析、文件范围与构建状态,不保证找到全部调用方或依赖。无匹配关系时可回退至无图谱规划,仍需审阅计划与验证结果。
在 IDE 中使用
代码图谱能力通过调用层级面板触达:在编辑器中将光标置于符号上,右键选择「查看调用层级」(或按 Shift+Alt+H,或经命令面板 / 侧栏「调用层级」图标进入)。面板支持:
- 调用方 / 被调用方双向切换:查看谁调用了该符号,或它调用了谁。
- 逐级钻取:点击关系行的箭头以下钻该符号,面包屑返回上一级。
- 点击跳转:关系行定位到源文件对应行。
- 索引状态徽标:显示当前索引的符号计数,可一键触发后台重建。
图谱的查询接口同时通过内核 API 暴露。相关文档: