阶段 3 · 基础设施(可跳过)
给 AI 装上"眼睛和记忆"——业务知识 RAG、代码知识图谱、Skill 仓库、MCP 网关。
基础设施 = 让 AI 从"概率性盲读"升级为"确定性查证"。业务 RAG 让 AI 懂私有知识,代码图谱让 AI 改代码前看到影响范围,Skill 仓库复用团队能力,MCP 网关把企业服务暴露给 Agent。四件套是为大代码库/复杂业务准备的,小团队可跳过。
- 🎯 做什么:业务知识 RAG + 代码知识图谱 + Skill 仓库 + MCP 网关(大代码库 / 复杂业务才需要,小团队跳过)
- 📦 产出与汇报:周报(基建进展)+ 基础设施交接说明
- 🔧 工具:code-lens(代码图谱,主推)/ skillhub(Skill 仓库)/ 《代码知识图谱深度解析》
- 👥 角色手册:开发手册(基建主力:RAG / 图谱 / Skill)
1. 为什么:AI 需要"眼睛和记忆"
工具和培训到位后(阶段 2),AI 还差最后一段:它不懂你的私有业务、看不见代码全貌、留不住团队能力。三个痛点直接拖垮落地质量:
- 不懂业务:通用大模型没读过你的产品手册、内部规范,问业务细节就幻觉——需要业务知识 RAG给它"开卷考试"。
- 看不见全貌:AI 改一个函数,不知道有几十处依赖它的返回类型,破坏性变更被悄然合并——需要代码知识图谱让它改前看到爆炸半径。
- 留不住能力:某个开发者很会用 AI,调走后经验也走了——需要Skill 仓库把高频能力沉淀成团队资产。
本阶段四件套(RAG / 代码图谱 / Skill 仓库 / MCP 网关)就是解决这三件事——让 AI 从"概率性盲读"升级为"确定性查证"。但它们是为大代码库/复杂业务准备的,小团队可跳过(见上方"跳过前提")。
2. 业务知识 RAG 服务
通用大模型不懂你的业务(产品手册、内部规范)。RAG = 先检索知识库片段再喂给模型,让它"开卷考试"。自研业务 RAG 服务(基于 DB-GPT)的核心:向量库抽象 + 两阶段检索(多路召回→CrossEncoder 重排)+ 多租户隔离。
# milvus_store.py · 两阶段检索(召回率优先→精排提精度)
with concurrent.futures.ThreadPoolExecutor() as executor:
future_default = executor.submit(self.similar_search_plus, text, topk, expr, None)
future_v3 = executor.submit(self.similar_search_plus, text, topk, expr, self.embedding_v3)
future_new = executor.submit(self.similar_search_new, text, topk, new_expr or expr)
# 三路并发召回 → 按原文去重 → CrossEncoder 重排 → min_score 过滤
# 多租户隔离:把租户标识拼进 Milvus 过滤表达式
expr = 'corp_code in ["{0}", "default"] and resource_type in ["knowledge","course"]'.format(body.corp_code)
all_docs = client.similar_search(body.current_question, 5, expr) # default = 全租户共享
3. 代码知识图谱(内部工具:code-lens)
3.1 为什么用知识图谱,不用 RAG
AI 改代码常因"看不见全貌"酿成事故。传统 Graph RAG 让 LLM 发 4+ 次查询才拼出完整上下文;代码知识图谱在索引期就把关系预算好,一次调用拿全。三大价值:① 可靠——LLM 漏不掉上下文(工具响应已塞满);② 省 token——不用 10 次查询去理解一个函数;③ 解放小模型——工具做了重活,降低对顶级模型的依赖(企业成本杀手锏)。
3.2 图谱建模设计
用属性图(Property Graph,非 RDF 三元组)——能跑 Cypher、能存向量、LLM 好写查询。
- 节点(按类型分表):代码元素(File / Function / Class / Interface / Method)+ 抽象语义(Community 功能域 / Process 执行流 / Route API 端点 / Tool MCP 工具)。把"代码结构事实"和"分析后的抽象语义"都做成一等节点,Cypher 一次查询就能跨层(如"找认证社区里被登录流程调用的所有函数")。
- 边(单张
CodeRelation表 +type属性区分):所有关系进同一张表——CALLS / IMPORTS / EXTENDS / IMPLEMENTS / ACCESSES / OVERRIDES / HANDLES_ROUTE 等 16 种。这让 LLM 写MATCH (a)-[r:CodeRelation {type:'CALLS'}]->(b)即可,不必记几十种边表名(AI 友好的关键)。 - 每条边带
confidence(置信度)+reason(来源:leiden-algorithm / trace-detection / route-handler-entry-point),可审计。
3.3 索引管线(6 阶段)
| 阶段 | 做什么 | 关键技术 |
|---|---|---|
| ① 扫描 + 结构 | 建 File / Folder + CONTAINS 边 | 路径扫描,不读内容 |
| ② 分块解析 | Tree-sitter 多语言(14+ 语言)解析 AST,提取符号 + 关系 | Worker 线程池并行(8 线程)、20MB 字节预算分块控内存 |
| ③ 跨文件类型传播 | 沿 import 依赖拓扑排序(Kahn 算法),上游导出类型"播种"到下游 | 分层并行重解析,解决 user.address.getCity().save() 链式调用 |
| ④ 社区发现 | Leiden 算法按 CALLS 边聚类 → Community 功能域 | modularity 评分,自动识别"认证模块""支付模块"等功能边界 |
| ⑤ 执行流追踪 | 从入口点(无调用者的函数)沿 CALLS BFS 前向追踪 → Process | maxDepth=10、去重、标记 intra/cross_community(跨社区流程更值得关注) |
| ⑥ 业务概念提取 | Route(API 端点)/ Tool(MCP 定义)/ ORM 数据流 / Entity→Table 映射 | 框架感知(Next.js / Laravel / MyBatis / Prisma 等) |
git diff --name-only 只重解析变更文件 + 受影响 import 闭包),配 CI webhook(merge 触发)+ 夜间 cron(活跃仓库全量刷新)双轨刷新。3.4 MCP 工具设计(14 个工具,三大类)
// 通用 MCP Server 创建(基于 @modelcontextprotocol/sdk)
const server = new Server(
{ name: 'code-graph', version: pkgVersion },
{ capabilities: { tools: {}, resources: {}, prompts: {} },
instructions: CODEGRAPH_INSTRUCTIONS }); // ~80 行 MUST/NEVER 工作流
| 类别 | 工具 | 做什么 |
|---|---|---|
| 理解类 | context / route_map / topic_map / table_context | 看清结构:360° 符号视图(含读写/调用链/MQ)、路由→handler→消费方、表外键关系 |
| 变更类 | impact / detect_changes / rename / api_impact | 评估影响:爆炸半径 + 风险等级(LOW/MEDIUM/HIGH/CRITICAL)、git diff→受影响符号、安全改名(图+文本双路径) |
| 查询类 | cypher / cross_repo_search | 自由 Cypher 图查询 / 跨仓库文本搜索(补图谱盲区) |
每个工具响应末尾自动追加 "Next 提示"(如 context 之后提示跑 impact),对抗"LLM 调一次工具就停",形成自引导工作流。
impact(改任何符号前必跑影响分析);② NEVER commit without running detect_changes(提交前必跑变更映射)。跳过本阶段(无图谱)的团队,用 grep + 人审 +
git diff 替代,能力降级但闭环能跑(见阶段 4 工作流说明)。3.5 企业级建设方案(上百项目团队)
整体架构四层:索引层(Tree-sitter 管线)→ 图存储层 → MCP 暴露层(统一网关)→ Agent 集成层(hooks 自动注入)。
图存储双轨:
- 日常开发:每仓库嵌入式图库(零运维 + 代码不出本机,隐私卖点)
- 企业治理:中心服务端图库(Neo4j / FalkorDB),各仓库图定期 ETL 进中心,做跨库架构治理 + 全局影响分析
多仓库索引策略:
- CI webhook:merge 到主干 → 触发该仓库 analyze
- 夜间 cron:活跃仓库全量刷新,低频仓库周末跑
- 跨库 sidecar 索引:消费者索引(谁调了我的接口)+ MQ topic 索引(谁消费了我的消息)+ SOA 服务注册表——"改一个接口谁会炸"必须能跨库秒答
推广路径:① 试点(3-5 个高频改动核心服务,量化"漏改率下降")→ ② 标准化(AGENTS.md 模板 + CI 强制 detect_changes 门槛 + GUARDRAILS 失败模式沉淀)→ ③ 全员(中心 MCP 网关 + SSO + 项目级权限,普通开发者只读,架构治理角色开放跨库查询)。
• deepwiki-open(仓库→可交互 wiki + RAG 问答,DeepWiki 开源版)
• sourcebot(自托管代码搜索 + MCP,开源 Sourcegraph 替代)
• GitNexus(零服务器本地运行,
npx gitnexus setup 一键配置,多仓库 + 架构可视化,适合快速上手)4. Skill 仓库(团队 Skill 仓库)
把团队重复工作流沉淀成可复用 Skill,编排 OpenSpec(规范)+ Superpowers(执行)。核心:阶段路由表(6 阶段拆独立 .md,每次只读当前阶段)+ Hook 强制激活。
| 阶段 | 调用技能 | 代码图谱工具 |
| Stage 1 需求探索 | superpowers:brainstorming | — |
| Stage 3 计划拆分 | superpowers:writing-plans | impact, locate |
| Stage 5 验证 | verification-before-completion | detect_changes |
每次只读取当前执行的 Stage 文件(渐进式披露,省 Token)
4.1 两层 Skill 架构 + RAG 联动(降 Token 关键)
团队 Skill 仓库要分两层,核心是把"业务数据"和"能力逻辑"分离,让 Skill 保持轻量、Token 大幅下降:
| 层级 | 放什么 | 谁维护 |
|---|---|---|
| 公共 Skill | 公司级通用能力:代码生成、自检查、测试用例生成、代码提交部署等 | 架构组统一维护 |
| 项目级 Skill | 只含 RAG 调用逻辑 + 项目专属规则(编码规范、接口风格) | 项目负责人维护 |
Skill 生命周期:AI 生成初始 → 人工审核(符合规范)→ 试点验证 → 持续优化 → 复用推广,并与 RAG 数据更新保持同步。
~/.claude/skills);⑥安全扫描器(vetter 规则审核 Skill 安全性)。技术栈 Java 21 + Spring Boot + React 19 + PostgreSQL,Docker Compose / K8s 一键部署。适合想要"私有化 + 治理"的团队 Skill 共享平台、又不想从零造的中大型团队。5. MCP 工具网关
把企业内部 Nacos 注册的 Dubbo/Spring 服务零代码封装成 MCP 工具,供 AI Agent 调用。基于 Spring AI Alibaba MCP Gateway:
// GatewayController.java · 暴露 Nacos 工具
@GetMapping("/tools")
public List<Map<String,String>> listTools() {
McpGatewayToolCallbackProvider provider = McpGatewayToolCallbackProvider.builder()
.toolCallbacks(mcpGatewayToolsInitializer.initializeTools()).build();
// 从 Nacos 动态拉取注册的 MCP Server → 封装成 ToolCallback[]
return Arrays.stream(provider.getToolCallbacks()).map(t -> Map.of(
"name", t.getToolDefinition().name(),
"description", t.getToolDefinition().description())).toList();
}
gh/aws/kubectl 完成的别用 MCP;MCP 只用于"没有 CLI 等价物"的场景(如连接企业内部服务)。6. 角色视角 + 案例 + 清单
先判断是否需要本阶段(看代码量/项目数);需要时优先建代码图谱(改代码安全)和 Skill 仓库(能力复用)。
改代码前必跑 impact;用 Skill 仓库的团队工作流;通过 MCP 调企业服务。
业务知识库交给 RAG;业务问答准确率上去后,PM 写需求可基于 RAG 的事实。
案例:时代光华基础应用组用代码知识图谱工具 code-lens 给 AI 装"代码眼睛",bug 排查时 cross_repo_search 定位跨仓库调用链,累计排查 144 个生产 bug(覆盖率 80.4%,code-lens 真实数据);用业务 RAG 服务让 AI 准确回答业务知识问题,幻觉大幅下降。
- 已判断确实需要基础设施(多仓库/百万行/复杂业务),非过度工程
- 业务知识 RAG:向量库抽象 + 两阶段检索 + 多租户隔离
- 代码图谱:MCP 工具集 + 两条铁律(impact/detect_changes)+ Claude hooks 自动注入
- Skill 仓库:团队工作流编排 + Hook 强制激活
- MCP 网关:企业服务零代码暴露,但 CLI 优先、定期审计消耗