功能指南 / 语义代码图谱
语义代码图谱
语义代码图谱在符号索引(SymbolIndex)之上构建关系层,并辅以本地向量检索,让 AI 在规划与改写前理解跨文件的调用关系与模块依赖。当项目增长到数百个文件、单靠上下文窗口无法看清全貌时,代码图谱就是 AI 的「全局视野」。
索引构建
索引以项目根目录为单位构建与查询,不同项目之间相互隔离。内核会为项目构建两类索引:
- 符号关系索引:解析代码中的符号及其关系,覆盖调用(Calls)、接口实现(Implements)、**模块依赖(DependsOn)**三类关系。每条关系记录都包含源符号、目标符号与关系类型。
- 向量索引:使用本地嵌入模型将代码片段编码为向量(默认启用 L2 归一化),以余弦相似度检索语义相近的代码。每条向量记录都携带来源文件与文本预览,检索结果可直接定位到具体文件。
嵌入模型全程本地运行,代码无需出网即可完成索引与检索:
| 模型 | 维度 | 适用场景 |
|---|---|---|
static-code-embed | 256 | 代码片段(默认启用归一化) |
static-bert-tiny | 128 | 通用文本 |
两类场景使用不同维度,维度在索引创建时即固定;检索按余弦距离排序,值越小越相似。
跨文件引用查询
所有查询都以项目根目录为边界、按符号名发起:
| 查询 | 说明 |
|---|---|
| 调用方查询 | 谁调用了这个符号 |
| 被调用方查询 | 这个符号调用了谁 |
| 接口实现查询 | 某个接口 / trait 的全部实现 |
| 模块依赖查询 | 模块依赖了哪些下游 |
| 关系子图 | 以某符号为中心、按深度 N 逐层扩展的关系网络 |
两类索引协同工作:向量检索负责「语义上相关」的模糊查找,关系图谱负责「引用链上确定」的精确追踪。子图查询从中心符号出发,以深度优先方式同时向调用方与被调用方两侧扩展,常用于评估改动的爆炸半径。
关系层是语义代码图谱 Phase 1 的核心成果:先由符号索引完成函数、类型与模块的抽取,再在其上建立三类关系边,所有查询均为只读操作,不会修改项目代码。查询实现直接借用符号索引做只读访问;子图扩展带访问去重,即使存在循环调用也不会陷入死循环。
图谱与 LSP 集成同步建设,为后续的诊断、导航与补全能力提供统一基础。
与 RUSH 配合
RUSH 深度任务的 Planner 在规划阶段会查询代码图谱,评估改动影响面并输出影响文件清单与潜在风险——这是 RUSH 能够安全执行跨文件重构的基础。规划结果的每个子任务都带有依赖关系与风险等级,执行顺序据此确定。典型场景:
- 重命名一个被多处调用的函数前,先确认全部调用方。
- 修改模块接口前,列出依赖该模块的全部下游。
- 评估改动爆炸半径:以目标符号为中心取两层关系子图。
- 熟悉陌生代码库时,从入口符号逐层展开关系子图。
✦
大型项目建议:跨仓库或首次使用的大型项目,先让索引构建完成再发起 RUSH 任务,规划质量会显著提升。
图谱的查询接口同时通过内核 API 暴露。相关文档:
本文对你有帮助吗?