功能指南 / 语义代码图谱

语义代码图谱

语义代码图谱在符号索引(SymbolIndex)之上构建关系层,并辅以本地向量检索,让 AI 在规划与改写前理解跨文件的调用关系与模块依赖。当项目增长到数百个文件、单靠上下文窗口无法看清全貌时,代码图谱就是 AI 的「全局视野」。

索引构建

索引以项目根目录为单位构建与查询,不同项目之间相互隔离。内核会为项目构建两类索引:

  • 符号关系索引:解析代码中的符号及其关系,覆盖调用(Calls)接口实现(Implements)、**模块依赖(DependsOn)**三类关系。每条关系记录都包含源符号、目标符号与关系类型。
  • 向量索引:使用本地嵌入模型将代码片段编码为向量(默认启用 L2 归一化),以余弦相似度检索语义相近的代码。每条向量记录都携带来源文件与文本预览,检索结果可直接定位到具体文件。

嵌入模型全程本地运行,代码无需出网即可完成索引与检索:

模型维度适用场景
static-code-embed256代码片段(默认启用归一化)
static-bert-tiny128通用文本

两类场景使用不同维度,维度在索引创建时即固定;检索按余弦距离排序,值越小越相似。

跨文件引用查询

所有查询都以项目根目录为边界、按符号名发起:

查询说明
调用方查询谁调用了这个符号
被调用方查询这个符号调用了谁
接口实现查询某个接口 / trait 的全部实现
模块依赖查询模块依赖了哪些下游
关系子图以某符号为中心、按深度 N 逐层扩展的关系网络

两类索引协同工作:向量检索负责「语义上相关」的模糊查找,关系图谱负责「引用链上确定」的精确追踪。子图查询从中心符号出发,以深度优先方式同时向调用方与被调用方两侧扩展,常用于评估改动的爆炸半径。

关系层是语义代码图谱 Phase 1 的核心成果:先由符号索引完成函数、类型与模块的抽取,再在其上建立三类关系边,所有查询均为只读操作,不会修改项目代码。查询实现直接借用符号索引做只读访问;子图扩展带访问去重,即使存在循环调用也不会陷入死循环。

图谱与 LSP 集成同步建设,为后续的诊断、导航与补全能力提供统一基础。

与 RUSH 配合

RUSH 深度任务的 Planner 在规划阶段会查询代码图谱,评估改动影响面并输出影响文件清单与潜在风险——这是 RUSH 能够安全执行跨文件重构的基础。规划结果的每个子任务都带有依赖关系与风险等级,执行顺序据此确定。典型场景:

  • 重命名一个被多处调用的函数前,先确认全部调用方。
  • 修改模块接口前,列出依赖该模块的全部下游。
  • 评估改动爆炸半径:以目标符号为中心取两层关系子图。
  • 熟悉陌生代码库时,从入口符号逐层展开关系子图。

大型项目建议:跨仓库或首次使用的大型项目,先让索引构建完成再发起 RUSH 任务,规划质量会显著提升。

图谱的查询接口同时通过内核 API 暴露。相关文档: