teamai-cli 0.16.8 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/README.md +229 -29
- package/README.zh-CN.md +226 -26
- package/agents/teamai-recall.md +81 -24
- package/dist/index.js +18421 -12324
- package/package.json +3 -1
- package/skills/team-wiki-codebase/README.md +120 -0
- package/skills/team-wiki-codebase/SKILL.md +909 -0
- package/skills/team-wiki-codebase/references/agents/graph-rag-agent.md +344 -0
- package/skills/team-wiki-codebase/references/agents/kb-doc-generator.md +323 -0
- package/skills/team-wiki-codebase/references/methodology/phase0-collection.md +54 -0
- package/skills/team-wiki-codebase/references/methodology/phase1-reverse-engineering.md +89 -0
- package/skills/team-wiki-codebase/references/methodology/phase2-document-types.md +341 -0
- package/skills/team-wiki-codebase/references/methodology/phase3-ai-enhancement.md +164 -0
- package/skills/team-wiki-codebase/references/methodology/phase4-quality.md +232 -0
- package/skills/team-wiki-codebase/references/templates/project-overview.md +148 -0
- package/skills/team-wiki-codebase/scripts/scan_repo.py +224 -0
- package/skills/team-wiki-codebase/scripts/validate_kb.py +250 -0
- package/skills/teamai-wiki/SKILL.md +0 -1019
|
@@ -0,0 +1,909 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: team-wiki-codebase
|
|
3
|
+
description: |
|
|
4
|
+
让 AI 真正理解大型代码库。针对多仓库、多微服务、迭代多年的项目,通过架构逆向 + Graph RAG 图谱 + CLI 多语言 AST,
|
|
5
|
+
将海量代码压缩为结构化知识库——每条结论可回溯代码行,每条关系有置信度标注。
|
|
6
|
+
|
|
7
|
+
适用场景:项目有 10+ 仓库或微服务,AI 直接读代码无法全局理解、回答不准确、token 开销大。
|
|
8
|
+
|
|
9
|
+
产出:组件设计文档 × N + 架构总览 + 桥梁文档 + Graph RAG 图谱(G1~G9) + _manifest.json + team-wiki 编译产物。
|
|
10
|
+
|
|
11
|
+
Trigger: team-wiki-codebase, code-to-knowledge, 代码知识库, 架构分析, 架构逆向
|
|
12
|
+
Prerequisites: 可访问的源码目录(支持多仓库);本 skill 目录下 `references/` 与 `scripts/`
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# team-wiki-codebase — 大型代码库 AI 认知工程
|
|
16
|
+
|
|
17
|
+
> 方法论与脚本位于本 skill 的 `references/`、`scripts/`(`team-wiki upgrade` 后出现在 `.cursor/skills/team-wiki-codebase/` 或 `.codebuddy/skills/team-wiki-codebase/`)。人类可读概览见 [README.md](./README.md)。
|
|
18
|
+
> 图谱 CLI 能力见 [GRAPH-CAPABILITIES.md](../GRAPH-CAPABILITIES.md)。
|
|
19
|
+
|
|
20
|
+
**解决什么问题**:大型项目(10+ 仓库、数十微服务、迭代多年)让 AI 无法全局理解——上下文窗口装不下所有代码,组件关系散落各处,业务规则隐藏在深层调用链中。直接让 AI 读代码,既慢(海量 token)又不准(缺乏全局视角)。
|
|
21
|
+
|
|
22
|
+
**怎么解决**:通过架构逆向工程,将海量代码系统化压缩为**结构化、可验证、AI-Native** 的深度知识库——每个结论可回溯到代码行,每条关系有置信度标注,每次更新有增量校验。AI 读知识库而非读源码,用约 **1/50 的 token** 获得全局架构认知。
|
|
23
|
+
|
|
24
|
+
## 使用方式
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
/team-wiki-codebase # 默认:Standard(单 session 核心路径)
|
|
28
|
+
/team-wiki-codebase --deep # Deep:完整 K1~K4 + G1~G9
|
|
29
|
+
/team-wiki-codebase --update # 增量更新已有 knowledge/
|
|
30
|
+
/team-wiki-codebase continue # 从 _review/progress.json 断点继续
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Agent 架构
|
|
36
|
+
|
|
37
|
+
| Agent | 文件 | 启动时机 |
|
|
38
|
+
|-------|------|---------|
|
|
39
|
+
| 知识库文档生成 Agent | `references/agents/kb-doc-generator.md` | Phase K2 每批组件 |
|
|
40
|
+
| Graph RAG Agent | `references/agents/graph-rag-agent.md` | Phase K3 |
|
|
41
|
+
|
|
42
|
+
**主 Agent 职责**:流程编排、确认点管理、progress.json 维护、质量报告汇总。
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## 入口判断
|
|
47
|
+
|
|
48
|
+
**每次激活时必须先执行此判断。**
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
IF 用户输入包含 "--update" 或 "增量更新":
|
|
52
|
+
→ Update 模式
|
|
53
|
+
ELSE IF 用户输入包含 "continue" 或 "继续":
|
|
54
|
+
→ Continue 模式
|
|
55
|
+
ELSE:
|
|
56
|
+
→ 检查用户指定目录下是否有 _review/progress.json
|
|
57
|
+
IF 存在 → 告知状态,等待"继续上次"或"重新开始"
|
|
58
|
+
ELSE → Phase 0
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Continue 模式
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
Step 1:定位 progress.json
|
|
67
|
+
Step 2:读取解析,展示恢复摘要
|
|
68
|
+
Step 3:根据 current_phase 跳转:
|
|
69
|
+
"phase0_done" → Phase K1
|
|
70
|
+
"phasek1_waiting_confirm" → 展示 k1-architecture-map.md,等待确认①
|
|
71
|
+
"phasek1_confirmed" → Phase K2
|
|
72
|
+
"phasek2_batch_N" → Phase K2 第 N 批继续(跳过已完成)
|
|
73
|
+
"phasek2_waiting_confirm" → 等待确认②
|
|
74
|
+
"phasek2_confirmed" → Phase K3
|
|
75
|
+
"phasek3_done" → Phase K4
|
|
76
|
+
"phasek4_done"/"completed" → 告知完成,询问是否 --update 或重跑某组件
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Update 模式(增量更新)
|
|
82
|
+
|
|
83
|
+
**触发**:`/team-wiki-codebase --update` 或「增量更新」。
|
|
84
|
+
**前提**:已有 completed 状态的 progress.json。
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
Step 1:读取 progress.json,获取 file_hash_cache
|
|
88
|
+
Step 2:扫描 project_root,计算各文件当前 SHA256
|
|
89
|
+
Step 3:对比 hash,分类:新增 / 修改 / 删除
|
|
90
|
+
Step 4:展示变更摘要,等待用户确认:
|
|
91
|
+
┌────────────────────────────────────┐
|
|
92
|
+
│ 变更摘要 │
|
|
93
|
+
│ 新增: N 个文件 │
|
|
94
|
+
│ 修改: N 个文件(含 Aurora.py 等) │
|
|
95
|
+
│ 删除: N 个文件 │
|
|
96
|
+
│ 受影响组件: [列表] │
|
|
97
|
+
│ 受影响图谱文档: G1/G2/G6/G7 │
|
|
98
|
+
└────────────────────────────────────┘
|
|
99
|
+
Step 5:仅重跑受影响范围:
|
|
100
|
+
- Phase K2:重新生成受影响组件的 Type-4 文档(覆盖写入)
|
|
101
|
+
- Phase K3 局部:更新涉及变更组件的图谱文档(G1/G2/G6/G7)
|
|
102
|
+
- Phase K4:重新运行 validate_kb.py
|
|
103
|
+
Step 6:更新 file_hash_cache + metadata.json commit SHA
|
|
104
|
+
Step 7:组件级 diff(处理新增/删除仓库或组件)
|
|
105
|
+
IF repos 列表与上次不同:
|
|
106
|
+
新增的仓库 → 对新仓库执行完整 K1 扫描,补充到组件清单,生成 Type-4 文档
|
|
107
|
+
删除的仓库 → 对应组件文档顶部加 `⚠️ [DEPRECATED] 此组件对应仓库已移除`
|
|
108
|
+
→ 更新 k1-architecture-map.md 的组件清单
|
|
109
|
+
→ 更新 G1 矩阵(移除已删除组件的行列,新增新组件行列)
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## progress.json 规范
|
|
115
|
+
|
|
116
|
+
**路径**:`<output_dir>/../_review/progress.json`
|
|
117
|
+
|
|
118
|
+
```json
|
|
119
|
+
{
|
|
120
|
+
"version": "5",
|
|
121
|
+
"repos": [
|
|
122
|
+
{"name": "repo-a", "path": "/absolute/path/to/repo-a", "language": "go"},
|
|
123
|
+
{"name": "repo-b", "path": "/absolute/path/to/repo-b", "language": "python"}
|
|
124
|
+
],
|
|
125
|
+
"output_dir": "/absolute/path/to/knowledge",
|
|
126
|
+
"primary_language": "go",
|
|
127
|
+
"project_name": "ProjectName",
|
|
128
|
+
"scan_time": "2026-01-01T10:00:00Z",
|
|
129
|
+
"current_phase": "phasek2_batch_2",
|
|
130
|
+
"confirmed_phases": ["phase0", "phasek1"],
|
|
131
|
+
|
|
132
|
+
"service_map": {
|
|
133
|
+
"描述": "Phase K1 Step 3 构建的服务名→仓库映射表",
|
|
134
|
+
"ServiceA": {"repo": "repo-a", "entry": "cmd/serviceA/main.go"},
|
|
135
|
+
"ServiceB": {"repo": "repo-b", "entry": "app/main.py"}
|
|
136
|
+
},
|
|
137
|
+
|
|
138
|
+
"kb_progress": {
|
|
139
|
+
"component_total": 12,
|
|
140
|
+
"components_done": ["Aurora", "Frame"],
|
|
141
|
+
"components_pending": ["CCDB", "Dispatcher"],
|
|
142
|
+
"type1_done": false,
|
|
143
|
+
"type2_done": false,
|
|
144
|
+
"type3_done": false,
|
|
145
|
+
"bridge_docs_done": false,
|
|
146
|
+
"graph_rag_done": false
|
|
147
|
+
},
|
|
148
|
+
|
|
149
|
+
"accuracy_stats": {
|
|
150
|
+
"total_claims": 0,
|
|
151
|
+
"verified": 0,
|
|
152
|
+
"unverified": 0,
|
|
153
|
+
"ambiguous_relations": 0
|
|
154
|
+
},
|
|
155
|
+
|
|
156
|
+
"interface_coverage": {
|
|
157
|
+
"描述": "接口数量对账结果,由 Phase K2 自校验填充",
|
|
158
|
+
"ComponentA": {"type": "HTTP", "scanned": 13, "documented": 0, "gap": 13},
|
|
159
|
+
"ComponentB": {"type": "MQ", "scanned": 5, "documented": 0, "gap": 5}
|
|
160
|
+
},
|
|
161
|
+
|
|
162
|
+
"consistency_check": {
|
|
163
|
+
"描述": "Phase K3 Step 3 跨文档一致性校验结果",
|
|
164
|
+
"contradictions": 0,
|
|
165
|
+
"missing_refs": 0,
|
|
166
|
+
"g1_deviations": 0,
|
|
167
|
+
"consistency_rate": 0.0
|
|
168
|
+
},
|
|
169
|
+
|
|
170
|
+
"e2e_validation": {
|
|
171
|
+
"描述": "Phase K4 Step 4 AI 端到端验证结果",
|
|
172
|
+
"total_questions": 0,
|
|
173
|
+
"correct": 0,
|
|
174
|
+
"partial": 0,
|
|
175
|
+
"incorrect": 0,
|
|
176
|
+
"boundary_ok": 0,
|
|
177
|
+
"boundary_fail": 0,
|
|
178
|
+
"accuracy_rate": 0.0
|
|
179
|
+
},
|
|
180
|
+
|
|
181
|
+
"file_hash_cache": {
|
|
182
|
+
"relative/path/to/file.go": "sha256_hex"
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
> `accuracy_stats` 在每批 Phase K2 完成后累加,是知识库可信度的全局指标。
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## 核心原则(准确性优先)
|
|
192
|
+
|
|
193
|
+
1. **代码为唯一事实来源**:每个结论必须有代码文件:行号 作为证据,无法验证的标 `[UNVERIFIED]`
|
|
194
|
+
2. **置信度三态强制**:图谱中每条关系标 `EXTRACTED(1.0)` / `INFERRED(0.6~0.9)` / `AMBIGUOUS(0.1~0.3)`;禁止凭空发明,禁止用 0.5 默认值
|
|
195
|
+
3. **两级准确性验证**:Phase K2 每份文档生成后立即自校验;Phase K4 全库质量检验
|
|
196
|
+
4. **人在回路两次确认**:架构理解(K①)和组件文档质量(K②)必须人工确认,防止系统性错误扩散
|
|
197
|
+
5. **并行生成 + 断点续传**:Type-4 组件文档并行分发(同一消息发出所有 Agent calls);每批持久化 progress.json
|
|
198
|
+
6. **Token 精简**:`Glob → Grep → Read` 三步法,禁止全量目录扫描
|
|
199
|
+
7. **诚实审计**:`[UNVERIFIED]` 不得隐藏;质量数字完整展示;不确定用 AMBIGUOUS 不删除
|
|
200
|
+
8. **认知边界声明**:知识库 README 必须明确声明覆盖范围和不覆盖范围,让 AI 知道何时应该说"不确定"
|
|
201
|
+
9. **跨文档一致性**:Phase K3 强制交叉比对组件间关系描述,矛盾项必须修复后才计入"一致"
|
|
202
|
+
10. **端到端可验证**:Phase K4 用标准化问题测试知识库实际回答能力,E2E 准确率目标 ≥ 80%
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## Phase 0:初始化
|
|
207
|
+
|
|
208
|
+
一次性向用户询问以下信息(**同一条消息,不分步骤**):
|
|
209
|
+
|
|
210
|
+
1. **项目所有代码仓库路径**(用户把整个项目涉及的所有仓库地址列出来):
|
|
211
|
+
- 格式:每行一个绝对路径,或逗号分隔
|
|
212
|
+
- 示例:
|
|
213
|
+
```
|
|
214
|
+
/path/to/api-gateway
|
|
215
|
+
/path/to/order-service
|
|
216
|
+
/path/to/user-service
|
|
217
|
+
/path/to/common-lib
|
|
218
|
+
```
|
|
219
|
+
- 说明:这是最关键的一步。大型项目的代码散布在多个仓库中,必须**全部提供**才能构建完整的架构认知。遗漏仓库 = 知识库盲区。
|
|
220
|
+
2. **项目名称**(用于文档命名,如 "CVM"、"电商平台")
|
|
221
|
+
3. **产品文档来源**(可选,提供则生成 Type-5/6 桥梁文档):
|
|
222
|
+
- API 文档目录路径
|
|
223
|
+
- 使用限制 / FAQ 文档路径
|
|
224
|
+
4. **输出路径**(默认:第一个仓库的父目录下的 `knowledge/`)
|
|
225
|
+
|
|
226
|
+
**Step 0A:仓库清单整理**
|
|
227
|
+
|
|
228
|
+
收到用户提供的仓库列表后,构建仓库清单:
|
|
229
|
+
|
|
230
|
+
```
|
|
231
|
+
FOR 每个用户提供的路径:
|
|
232
|
+
1. 验证路径存在且可访问
|
|
233
|
+
2. 检测是否为 git 仓库(是否有 .git 目录)
|
|
234
|
+
3. 检测主要语言(按文件扩展名分布)
|
|
235
|
+
4. 统计代码规模(文件数 + 估算行数)
|
|
236
|
+
5. 记录 git commit SHA + tag
|
|
237
|
+
|
|
238
|
+
结果写入 _review/repo-manifest.json:
|
|
239
|
+
{
|
|
240
|
+
"repos": [
|
|
241
|
+
{
|
|
242
|
+
"path": "/absolute/path/to/repo-a",
|
|
243
|
+
"name": "repo-a",
|
|
244
|
+
"language": "go",
|
|
245
|
+
"files": 320,
|
|
246
|
+
"lines_estimate": 45000,
|
|
247
|
+
"commit": "abc123",
|
|
248
|
+
"tag": "v1.2.0",
|
|
249
|
+
"accessible": true
|
|
250
|
+
},
|
|
251
|
+
...
|
|
252
|
+
],
|
|
253
|
+
"total_repos": N,
|
|
254
|
+
"inaccessible": ["path/to/repo-x(权限不足)"]
|
|
255
|
+
}
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
展示给用户确认:
|
|
259
|
+
```
|
|
260
|
+
已识别 {N} 个仓库:
|
|
261
|
+
✅ repo-a (Go, ~45K 行)
|
|
262
|
+
✅ repo-b (Python, ~12K 行)
|
|
263
|
+
✅ repo-c (Go, ~28K 行)
|
|
264
|
+
❌ repo-x (路径不存在或无法访问)
|
|
265
|
+
|
|
266
|
+
总计: ~{N}K 行代码,{N} 个仓库
|
|
267
|
+
确认无误后回复"继续",或补充遗漏的仓库。
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
**Step 0B:自动检测主要语言**(按仓库列表汇总,不阻断流程):
|
|
271
|
+
```
|
|
272
|
+
检测方法:汇总所有仓库的文件扩展名分布
|
|
273
|
+
.go 文件占比最高 → language: "go"
|
|
274
|
+
.py 文件占比最高 → language: "python"
|
|
275
|
+
.java 文件占比最高 → language: "java"
|
|
276
|
+
.ts/.js 文件占比最高 → language: "typescript"
|
|
277
|
+
.rs 文件占比最高 → language: "rust"
|
|
278
|
+
多语言混合(无明显主导) → language: "mixed"
|
|
279
|
+
备注:language 字段用于接口扫描时选择 grep 模式(详见 Phase K1 Step 5)
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
**Step 0C:记录基准版本**:
|
|
283
|
+
```bash
|
|
284
|
+
# 对每个仓库分别记录
|
|
285
|
+
FOR repo in repos:
|
|
286
|
+
git -C <repo.path> rev-parse HEAD 2>/dev/null
|
|
287
|
+
git -C <repo.path> describe --tags --always 2>/dev/null
|
|
288
|
+
```
|
|
289
|
+
写入 `_review/metadata.json`:
|
|
290
|
+
```json
|
|
291
|
+
{
|
|
292
|
+
"project_name": "CVM",
|
|
293
|
+
"scan_time": "<ISO8601>",
|
|
294
|
+
"repos": [
|
|
295
|
+
{"name": "repo-a", "commit": "<sha>", "tag": "<tag>"},
|
|
296
|
+
{"name": "repo-b", "commit": "<sha>", "tag": "<tag>"}
|
|
297
|
+
]
|
|
298
|
+
}
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
**Step 0D:CLI 结构基线(每个代码仓库,推荐)**
|
|
302
|
+
|
|
303
|
+
在 K1 深读之前,用 Team Wiki CLI 生成可证据化的 import/call 结构边(Python/Go/TS 等,`code-ast`)并与 regex 基线合并(`code-heuristic`):
|
|
304
|
+
|
|
305
|
+
```bash
|
|
306
|
+
# 对每个 repo(<wiki_root> 通常为项目下的 .teamwiki 或 .wiki)
|
|
307
|
+
team-wiki compile code <repo_abs_path> <wiki_root> \
|
|
308
|
+
--project <project_slug> \
|
|
309
|
+
--extract ast,heuristic \
|
|
310
|
+
--write
|
|
311
|
+
|
|
312
|
+
# 预览 AST 统计(不写盘)
|
|
313
|
+
team-wiki compile code <repo> <wiki> --extract ast --dry-run
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
- 输出:`code/<project>/` 下 index/component/relation 等页;`graph/<project>-graph-index.json`(结构边草案)。
|
|
317
|
+
- K1/K2/K3 写 `_manifest.json` 的 `edges[]` 时:**优先引用** compile 的 `code-ast` 边 + `evidenceRefs`(`path:line`),Agent 推断标 `INFERRED`/`AMBIGUOUS`。
|
|
318
|
+
- K3 完成后写入 wiki 图:`team-wiki compile code <output_dir> <wiki_root> --extract ast,heuristic --write`(有 `_manifest.json` 时走 manifest 快路径 merge `graph-index.json`)。
|
|
319
|
+
|
|
320
|
+
写入初始 progress.json(current_phase: "phase0_done"),进入 **Phase K1**。
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
## Phase K1:架构逆向与源材料采集
|
|
325
|
+
|
|
326
|
+
**方法论**:`references/methodology/phase0-collection.md` + `references/methodology/phase1-reverse-engineering.md`
|
|
327
|
+
|
|
328
|
+
### Step 1:可选运行扫描脚本(推荐)
|
|
329
|
+
|
|
330
|
+
```bash
|
|
331
|
+
python3 scripts/scan_repo.py <project_root> --depth 2 --top 10
|
|
332
|
+
```
|
|
333
|
+
输出:文件统计 + 关键文件发现报告 + 语言分布。
|
|
334
|
+
|
|
335
|
+
### Step 2:关键文件提取
|
|
336
|
+
|
|
337
|
+
按优先级扫描(详见 phase0-collection.md):
|
|
338
|
+
- **P0 必须**:入口文件、路由/Handler、流程编排配置、Proto/IDL
|
|
339
|
+
- **P1 重要**:数据库 Schema(DDL)、常量/错误码定义
|
|
340
|
+
- **P2 增强**:配置文件、测试文件(理解预期行为)
|
|
341
|
+
|
|
342
|
+
### Step 3:架构逆向(详见 phase1-reverse-engineering.md)
|
|
343
|
+
|
|
344
|
+
- 自底向上分层:叶子节点(DB/MQ) → 中间节点(编排/调度) → 根节点(API入口)
|
|
345
|
+
- 三层穿透追踪:对核心 API ≥5 条完成 API入口→编排层→服务执行层 全链路追踪
|
|
346
|
+
- 构建 N×N 组件关系矩阵(标注通信方式:RPC/MQ/DB)
|
|
347
|
+
|
|
348
|
+
### Step 4:生成架构分析报告
|
|
349
|
+
|
|
350
|
+
写入 `_review/k1-architecture-map.md`:
|
|
351
|
+
|
|
352
|
+
```markdown
|
|
353
|
+
## 架构分层(≥4层)
|
|
354
|
+
| 层级 | 组件列表 | 核心职责 | 代码仓库 |
|
|
355
|
+
|
|
356
|
+
## 组件清单
|
|
357
|
+
| 组件名 | 架构层级 | **所属仓库** | 语言 | 核心度(P0/P1/P2) | 入口文件 | **接口校验类型** |
|
|
358
|
+
|
|
359
|
+
接口校验类型取值(在确认点①请用户核对此列):
|
|
360
|
+
- `HTTP` → API 接入层,有 HTTP/gRPC 路由注册,需做接口数对账
|
|
361
|
+
- `MQ` → 消息处理层,有 MQ Consumer/Exchange 声明,以 Topic 数做基准
|
|
362
|
+
- `RPC` → 内部服务层,有 .proto / .thrift / IDL 文件,以 Method 数做基准
|
|
363
|
+
- `NONE` → 调度/执行/数据层,无对外接口,不做接口数校验
|
|
364
|
+
|
|
365
|
+
## N×N 组件通信矩阵
|
|
366
|
+
(值:RPC/MQ/DB/—,标注置信度 [E]EXTRACTED/[I]INFERRED/[A]AMBIGUOUS)
|
|
367
|
+
|
|
368
|
+
## 核心调用链路(≥5条)
|
|
369
|
+
(格式:API(file:line) → 编排层(config:line) → 服务层(handler:line) → DB(table))
|
|
370
|
+
|
|
371
|
+
## 术语表
|
|
372
|
+
| 内部术语 | 外部/产品术语 | 说明 |
|
|
373
|
+
|
|
374
|
+
## 不确定项(供人工确认)
|
|
375
|
+
(标注 [A] 的关系和推断,说明不确定原因)
|
|
376
|
+
(接口校验类型不确定的组件,标注 [?] 等用户在确认点①明确)
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
### Step 5:接口清单扫描(按校验类型分别执行)
|
|
380
|
+
|
|
381
|
+
**仅对 k1-architecture-map.md 中接口校验类型 ≠ NONE 的组件执行**:
|
|
382
|
+
|
|
383
|
+
```
|
|
384
|
+
FOR 每个 接口校验类型 = HTTP 的组件:
|
|
385
|
+
执行 grep 扫描:
|
|
386
|
+
Go: grep -rn "\.GET\|\.POST\|\.PUT\|\.DELETE\|router\.Handle\|@handler" <component_dir>
|
|
387
|
+
Python: grep -rn "@app\.route\|@router\.\|APIRouter\|include_router" <component_dir>
|
|
388
|
+
记录:组件名 → HTTP接口数 N(SCAN_CONFIDENCE: HIGH/MEDIUM)
|
|
389
|
+
|
|
390
|
+
FOR 每个 接口校验类型 = MQ 的组件:
|
|
391
|
+
执行 grep 扫描:
|
|
392
|
+
grep -rn "Exchange\|Queue\|Topic\|consumer\|subscribe\|@KafkaListener" <component_dir>
|
|
393
|
+
记录:组件名 → MQ Topic/Queue 数 N
|
|
394
|
+
|
|
395
|
+
FOR 每个 接口校验类型 = RPC 的组件:
|
|
396
|
+
解析 .proto / .thrift 文件:
|
|
397
|
+
find <component_dir> -name "*.proto" -o -name "*.thrift" | xargs grep "^rpc\|^service"
|
|
398
|
+
记录:组件名 → RPC Method 数 N
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
结果写入 `_review/interface-inventory.json`:
|
|
402
|
+
```json
|
|
403
|
+
{
|
|
404
|
+
"ComponentA": {"type": "HTTP", "count": 13, "confidence": "HIGH"},
|
|
405
|
+
"ComponentB": {"type": "MQ", "count": 5, "confidence": "MEDIUM"},
|
|
406
|
+
"ComponentC": {"type": "RPC", "count": 8, "confidence": "HIGH"},
|
|
407
|
+
"ComponentD": {"type": "NONE", "count": 0, "confidence": "—"}
|
|
408
|
+
}
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
**完成后**:更新 `current_phase` 为 `"phasek1_waiting_confirm"`。
|
|
412
|
+
|
|
413
|
+
**⛔ 确认点①** — 等待用户明确回复,不得自动进入下一阶段。
|
|
414
|
+
|
|
415
|
+
展示给用户:
|
|
416
|
+
```
|
|
417
|
+
架构分析完成。
|
|
418
|
+
|
|
419
|
+
组件清单(共 N 个):
|
|
420
|
+
P0 核心: [列表]
|
|
421
|
+
P1 重要: [列表]
|
|
422
|
+
P2 辅助: [列表]
|
|
423
|
+
|
|
424
|
+
接口扫描结果(供校验用):
|
|
425
|
+
HTTP 接口:ComponentA 13个, ComponentB 7个
|
|
426
|
+
MQ Topic: ComponentC 5个
|
|
427
|
+
RPC Method:ComponentD 8个
|
|
428
|
+
无接口组件:ComponentE, ComponentF, ...
|
|
429
|
+
|
|
430
|
+
AMBIGUOUS 关系(请明确):
|
|
431
|
+
- ComponentX → ComponentY 的通信方式不确定
|
|
432
|
+
|
|
433
|
+
请确认(直接编辑 k1-architecture-map.md 后回复"继续"):
|
|
434
|
+
1. 架构分层和 P0/P1/P2 标注是否正确?
|
|
435
|
+
2. 每个组件的接口校验类型(HTTP/MQ/RPC/NONE)是否准确?
|
|
436
|
+
3. 接口扫描数量是否合理?明显偏少说明有遗漏,偏多可能扫到了测试文件。
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
确认后:更新 `"phasek1_confirmed"` → Phase K2。
|
|
440
|
+
|
|
441
|
+
---
|
|
442
|
+
|
|
443
|
+
## Phase K2:文档生成(分批并行 + 中间质量确认)
|
|
444
|
+
|
|
445
|
+
**方法论**:`references/methodology/phase2-document-types.md`
|
|
446
|
+
|
|
447
|
+
### 生成顺序(依赖链驱动,底层先写)
|
|
448
|
+
|
|
449
|
+
```
|
|
450
|
+
批次1: 数据层 + 基础执行层 Type-4 组件文档 ← 并行
|
|
451
|
+
批次2: 资源/调度层 Type-4 组件文档 ← 并行
|
|
452
|
+
批次3: 消息/服务层 Type-4 组件文档 ← 并行
|
|
453
|
+
批次4: API入口层 Type-4 组件文档 ← 并行
|
|
454
|
+
⛔ 确认点② ← 人工抽查组件文档质量
|
|
455
|
+
批次5: 架构总览层 (Type-1 + Type-2 + Type-3) ← 串行(依赖上层全部完成)
|
|
456
|
+
批次6: 桥梁文档 (Type-5 + Type-6 + Type-7) ← 串行(依赖产品文档)
|
|
457
|
+
批次7: 知识增强 (Type-8: 反模式/RPC契约/排障) ← 串行
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
### 每批执行流程
|
|
461
|
+
|
|
462
|
+
读取 `references/agents/kb-doc-generator.md`,拼装输入包并启动:
|
|
463
|
+
|
|
464
|
+
```
|
|
465
|
+
component_list: 本批次组件/文档类型列表
|
|
466
|
+
architecture_map: _review/k1-architecture-map.md 完整内容
|
|
467
|
+
repos: _review/repo-manifest.json 中的仓库列表
|
|
468
|
+
service_map: progress.json 中的 service_map
|
|
469
|
+
output_dir: <Phase 0>
|
|
470
|
+
project_name: <Phase 0>
|
|
471
|
+
product_docs_dir: <Phase 0,可为空>
|
|
472
|
+
methodology_dir: references/methodology/
|
|
473
|
+
completed_docs: kb_progress.components_done(断点恢复跳过)
|
|
474
|
+
parallel_mode: true(批次1~4)/ false(批次5~7)
|
|
475
|
+
```
|
|
476
|
+
|
|
477
|
+
每批完成后:
|
|
478
|
+
- 将完成组件追加到 `kb_progress.components_done`
|
|
479
|
+
- 累加 `accuracy_stats`(从 Agent 返回的自校验摘要中提取)
|
|
480
|
+
- 更新 `current_phase` 为 `"phasek2_batch_N"`
|
|
481
|
+
- 展示本批次 token 消耗和 `[UNVERIFIED]` 统计
|
|
482
|
+
|
|
483
|
+
### ⛔ 确认点②(批次1~4完成后)
|
|
484
|
+
|
|
485
|
+
展示给用户:
|
|
486
|
+
```
|
|
487
|
+
已生成 {N} 份组件设计文档。准确性统计:
|
|
488
|
+
总声明数: {N} | 已验证: {N} | [UNVERIFIED]: {N}({X}%)
|
|
489
|
+
AMBIGUOUS 关系: {N} 条
|
|
490
|
+
|
|
491
|
+
请抽查 2~3 份文档(建议选最复杂的组件):
|
|
492
|
+
路径:<output_dir>/XX_<组件名>设计说明.md
|
|
493
|
+
|
|
494
|
+
确认要点:
|
|
495
|
+
1. AI 快速理解表的代码入口是否精确到函数名?
|
|
496
|
+
2. 核心流程描述是否与代码实际一致?
|
|
497
|
+
3. [UNVERIFIED] 比例是否可接受?(建议 <15%)
|
|
498
|
+
|
|
499
|
+
如发现系统性问题,请描述,我将调整策略后重新生成。
|
|
500
|
+
```
|
|
501
|
+
|
|
502
|
+
更新 `current_phase` 为 `"phasek2_waiting_confirm"`。
|
|
503
|
+
用户确认后更新为 `"phasek2_confirmed"`,继续批次5~7。
|
|
504
|
+
|
|
505
|
+
### 全部批次完成后
|
|
506
|
+
|
|
507
|
+
写入 `_review/k2-doc-list.md`(文档清单:路径 + 规模KB + [UNVERIFIED]数 + 生成时间)。
|
|
508
|
+
更新 `current_phase` 为 `"phasek2_done"` → Phase K3。
|
|
509
|
+
|
|
510
|
+
---
|
|
511
|
+
|
|
512
|
+
## Phase K3:AI-Native 增强 + 图谱文档集
|
|
513
|
+
|
|
514
|
+
**方法论**:`references/methodology/phase3-ai-enhancement.md`
|
|
515
|
+
|
|
516
|
+
### Step 1:AI-Native 元素注入
|
|
517
|
+
|
|
518
|
+
对所有已生成文档补充(如 Phase K2 的 Agent 未完整添加):
|
|
519
|
+
|
|
520
|
+
| 元素 | 要求 | 适用范围 |
|
|
521
|
+
|------|------|---------|
|
|
522
|
+
| `search-anchor` | 5~15 个关键词,标题后第一行 | 所有文档 |
|
|
523
|
+
| AI 快速理解表 | 10 维度,紧跟标题 | 所有 Type-4 组件文档 |
|
|
524
|
+
| 双向链接 | 组件↔主架构,桥梁↔组件 | 所有文档 |
|
|
525
|
+
| 检索路由规则 | 4条分流规则 + 4级优先级 | 仅技术架构总览 |
|
|
526
|
+
| QA 对 | 10~20 个高频问题+答案引用 | 仅技术架构总览第9章 |
|
|
527
|
+
|
|
528
|
+
### Step 2:Graph RAG 图谱文档集
|
|
529
|
+
|
|
530
|
+
读取 `references/agents/graph-rag-agent.md`,拼装输入包并启动:
|
|
531
|
+
|
|
532
|
+
```
|
|
533
|
+
all_kb_docs_dir: <output_dir>
|
|
534
|
+
architecture_map: _review/k1-architecture-map.md
|
|
535
|
+
doc_list: _review/k2-doc-list.md
|
|
536
|
+
project_name: <Phase 0>
|
|
537
|
+
output_dir: <output_dir>/graph/
|
|
538
|
+
methodology_file: references/methodology/phase2-document-types.md
|
|
539
|
+
```
|
|
540
|
+
|
|
541
|
+
生成 G1~G9(每条关系强制置信度三态标注):
|
|
542
|
+
|
|
543
|
+
| 图谱文档 | 解决的问题 | 置信度要求 |
|
|
544
|
+
|---------|---------|-----------|
|
|
545
|
+
| G1 组件依赖关系矩阵 | "谁依赖 X?" | EXTRACTED 来自文档明确描述 |
|
|
546
|
+
| G2 调用链路全景 + 状态机 + 约束矩阵 | "API 经过哪些模块?" | 调用链 EXTRACTED,推断依赖 INFERRED |
|
|
547
|
+
| G3 数据流与存储依赖图 | "数据存哪里?" | 读写关系 EXTRACTED |
|
|
548
|
+
| G4 错误码组件映射表 | "错误码是哪个模块的?" | EXTRACTED |
|
|
549
|
+
| G5 跨组件交互场景手册(≥10个时序图) | "配额检查怎么做?" | 时序 EXTRACTED,边界 INFERRED |
|
|
550
|
+
| G6 知识图谱三元组(≥100条) | "A 间接依赖谁?" | 每条标 E/I/A + 分值 |
|
|
551
|
+
| G7 架构风险与影响面分析 | "X 挂了影响多大?" | 直接依赖 EXTRACTED,间接 INFERRED |
|
|
552
|
+
| G8 核心配置参数索引 | "怎么改 XX 配置?" | EXTRACTED 来自配置文件 |
|
|
553
|
+
| G9 业务规则约束矩阵 + AI 推理决策树 | "能不能做 XX?" | 规则 EXTRACTED,推断 INFERRED |
|
|
554
|
+
|
|
555
|
+
同时生成 `<output_dir>/graph/README.md`(索引 + 按问题类型查找表 + 检索路由建议)。
|
|
556
|
+
|
|
557
|
+
### Step 3:跨文档一致性校验
|
|
558
|
+
|
|
559
|
+
**Graph RAG Agent 完成后,主 Agent 自行执行此步骤(不委托给子 Agent)。**
|
|
560
|
+
|
|
561
|
+
目的:检测组件文档之间的矛盾描述,防止"A 说调用 B 用 RPC,B 说被 A 用 MQ 调用"这类不一致。
|
|
562
|
+
|
|
563
|
+
```
|
|
564
|
+
Step 3A:构建"声称矩阵"
|
|
565
|
+
|
|
566
|
+
对每份 Type-4 组件文档,从**两个层面**提取关系声称:
|
|
567
|
+
|
|
568
|
+
层面1:AI 快速理解表中的"上游组件"和"下游组件"字段
|
|
569
|
+
层面2:正文中的接口设计章节、核心流程章节中的调用描述
|
|
570
|
+
|
|
571
|
+
如果层面1和层面2对同一关系描述不一致 → 首先记录为"文档内矛盾"(比表头和正文优先级更高的问题)
|
|
572
|
+
|
|
573
|
+
提取示例:
|
|
574
|
+
组件X.md 表头声称: X→Y(RPC), X→Z(MQ)
|
|
575
|
+
组件X.md 正文声称: X→Z(HTTP) ← 与表头矛盾!
|
|
576
|
+
组件Y.md 表头声称: Y←X(RPC), Y→Z(DB)
|
|
577
|
+
组件Z.md 表头声称: Z←X(HTTP), Z←Y(DB)
|
|
578
|
+
|
|
579
|
+
Step 3B:交叉比对
|
|
580
|
+
|
|
581
|
+
FOR 每对组件 (A, B):
|
|
582
|
+
IF A.md 声称 "A→B 用 RPC" AND B.md 声称 "B←A 用 MQ":
|
|
583
|
+
→ 记录矛盾: "A→B 通信方式不一致: A说RPC, B说MQ"
|
|
584
|
+
IF A.md 声称 "A→B" BUT B.md 未提到 "被A调用":
|
|
585
|
+
→ 记录缺失: "A声称调用B,但B的文档未提及被A调用"
|
|
586
|
+
IF G1矩阵中的关系 与 组件文档声称不一致:
|
|
587
|
+
→ 记录偏差: "G1矩阵说A→B(RPC),但A的文档说A→B(MQ)"
|
|
588
|
+
|
|
589
|
+
Step 3C:生成一致性报告
|
|
590
|
+
|
|
591
|
+
写入 `_review/k3-consistency-check.md`:
|
|
592
|
+
|
|
593
|
+
```markdown
|
|
594
|
+
# 跨文档一致性校验报告
|
|
595
|
+
|
|
596
|
+
## 矛盾项(必须修复)
|
|
597
|
+
| 组件A | 组件B | A的描述 | B的描述 | 矛盾类型 |
|
|
598
|
+
|-------|-------|---------|---------|---------|
|
|
599
|
+
| X | Z | X→Z(MQ) | Z←X(HTTP) | 通信方式不一致 |
|
|
600
|
+
|
|
601
|
+
## 缺失项(建议补充)
|
|
602
|
+
| 声称方 | 被引用方 | 声称内容 | 缺失 |
|
|
603
|
+
|--------|---------|---------|------|
|
|
604
|
+
| A | B | A→B(RPC) | B的文档未提及被A调用 |
|
|
605
|
+
|
|
606
|
+
## G1矩阵偏差(建议对齐)
|
|
607
|
+
| G1矩阵 | 组件文档 | 偏差 |
|
|
608
|
+
|
|
609
|
+
## 统计
|
|
610
|
+
- 矛盾项: N 处(❌ 需修复)
|
|
611
|
+
- 缺失项: N 处(⚠️ 建议补充)
|
|
612
|
+
- G1偏差: N 处(⚠️ 需对齐)
|
|
613
|
+
- 一致关系: N 条(✅)
|
|
614
|
+
- 一致率: X%
|
|
615
|
+
```
|
|
616
|
+
|
|
617
|
+
Step 3D:自动修复(仅限明确情况)
|
|
618
|
+
|
|
619
|
+
IF 矛盾项 > 0:
|
|
620
|
+
FOR 每个矛盾项:
|
|
621
|
+
回溯代码验证:用 Grep 查找实际的调用方式(如 rpc.Call / mq.Publish)
|
|
622
|
+
IF 能明确正确方 → 修复错误方文档中的描述 + 更新 G1 矩阵
|
|
623
|
+
IF 无法明确 → 标记为 AMBIGUOUS,留待用户在确认点确认
|
|
624
|
+
修复后重新统计一致率
|
|
625
|
+
|
|
626
|
+
IF 矛盾项 = 0:
|
|
627
|
+
→ 跳过修复,直接进入 Phase K4
|
|
628
|
+
```
|
|
629
|
+
|
|
630
|
+
**完成后**:更新 `current_phase` 为 `"phasek3_done"` → Phase K4。
|
|
631
|
+
|
|
632
|
+
---
|
|
633
|
+
|
|
634
|
+
## Phase K4:知识库质量评估与报告
|
|
635
|
+
|
|
636
|
+
**方法论**:`references/methodology/phase4-quality.md`
|
|
637
|
+
|
|
638
|
+
### Step 1:自动校验
|
|
639
|
+
|
|
640
|
+
```bash
|
|
641
|
+
python3 scripts/validate_kb.py <output_dir>
|
|
642
|
+
```
|
|
643
|
+
|
|
644
|
+
输出(**必须完整展示,不得只展示通过项**):
|
|
645
|
+
```
|
|
646
|
+
链接完整性: ✅/❌ N 个死链接
|
|
647
|
+
search-anchor: ✅/⚠️ 覆盖率 N/M (X%)
|
|
648
|
+
AI 快速理解表: ✅/⚠️ 覆盖率 N/M (X%)
|
|
649
|
+
双向链接: ✅/⚠️ 覆盖率 N/M (X%)
|
|
650
|
+
README 索引: ✅/⚠️ 收录率 N/M (X%)
|
|
651
|
+
```
|
|
652
|
+
|
|
653
|
+
### Step 2:准确性审计
|
|
654
|
+
|
|
655
|
+
从 `accuracy_stats` 汇总全库可信度,同时从 `interface_coverage` 汇总接口覆盖情况:
|
|
656
|
+
|
|
657
|
+
```
|
|
658
|
+
【内容准确性】
|
|
659
|
+
总声明数: N 条(业务规则 + 接口描述 + 关系)
|
|
660
|
+
已验证(有代码引用): N 条 (X%)
|
|
661
|
+
[UNVERIFIED]: N 条 (X%)
|
|
662
|
+
AMBIGUOUS 关系: N 条 (X%)
|
|
663
|
+
|
|
664
|
+
【接口覆盖率】(仅统计 HTTP/MQ/RPC 类型组件,NONE 类型不计入)
|
|
665
|
+
HTTP 接口: 文档记录 M 个 / 扫描基准 N 个 = X%
|
|
666
|
+
MQ Topic: 文档记录 M 个 / 扫描基准 N 个 = X%
|
|
667
|
+
RPC Method: 文档记录 M 个 / 扫描基准 N 个 = X%
|
|
668
|
+
综合覆盖率: X% 目标 ≥ 90%
|
|
669
|
+
|
|
670
|
+
⚠️ 接口缺口清单(文档记录 < 扫描基准 的组件):
|
|
671
|
+
- ComponentA: 文档记录 8 个,扫描基准 13 个,缺口 5 个 → 建议补充
|
|
672
|
+
```
|
|
673
|
+
|
|
674
|
+
⚠️ 需人工确认清单:([UNVERIFIED] > 20% 的文档 + 接口缺口组件 + AMBIGUOUS 关系)
|
|
675
|
+
|
|
676
|
+
### Step 3:RAG 检索抽检
|
|
677
|
+
|
|
678
|
+
按 `phase4-quality.md §RAG检索测试用例` 测试 7 类问题各 1 个(详见方法论),记录命中率。
|
|
679
|
+
|
|
680
|
+
### Step 4:AI 端到端验证(E2E Validation)
|
|
681
|
+
|
|
682
|
+
**核心思路**:用知识库回答一组标准化问题,然后**回溯代码验证答案正确性**,检测知识库是否能让 AI 给出正确答案。
|
|
683
|
+
|
|
684
|
+
```
|
|
685
|
+
Step 4A:生成标准验证问题集(自动,基于已有文档)
|
|
686
|
+
|
|
687
|
+
**优先使用用户提供的外部验证集**:
|
|
688
|
+
IF 用户在 Phase 0 或此时提供了验证问题列表(3~10 个真实业务问题):
|
|
689
|
+
→ 优先使用用户问题作为验证集(标注来源: USER)
|
|
690
|
+
→ 自动补充至 10~15 题(标注来源: AUTO)
|
|
691
|
+
ELSE:
|
|
692
|
+
→ 全部自动生成(标注来源: AUTO)
|
|
693
|
+
|
|
694
|
+
> 用户提供的问题更有价值,因为 AI 自己出题容易考自己已知的领域,
|
|
695
|
+
> 真正的盲区(AI 没理解但没意识到的)只有外部问题才能测到。
|
|
696
|
+
|
|
697
|
+
从 k1-architecture-map.md 和 k2-doc-list.md 自动生成 10~15 个验证问题:
|
|
698
|
+
|
|
699
|
+
问题类型分布(至少覆盖以下 5 类):
|
|
700
|
+
|
|
701
|
+
┌────────────────────────────────────────────────────────────────────┐
|
|
702
|
+
│ 类型1:组件职责(3题) │
|
|
703
|
+
│ 模式:"<组件名> 的核心职责是什么?代码入口在哪?" │
|
|
704
|
+
│ 验证方式:答案中的函数名/文件名必须在代码中存在 │
|
|
705
|
+
│ │
|
|
706
|
+
│ 类型2:调用关系(3题) │
|
|
707
|
+
│ 模式:"<组件A> 和 <组件B> 之间是什么关系?通过什么方式通信?" │
|
|
708
|
+
│ 验证方式:答案与 G1 矩阵 + 代码实际 import/call 一致 │
|
|
709
|
+
│ │
|
|
710
|
+
│ 类型3:操作约束(2题) │
|
|
711
|
+
│ 模式:"在 <状态X> 下能否执行 <操作Y>?" │
|
|
712
|
+
│ 验证方式:答案与 G9 约束矩阵 + 代码中的状态检查一致 │
|
|
713
|
+
│ │
|
|
714
|
+
│ 类型4:数据流向(2题) │
|
|
715
|
+
│ 模式:"<操作Z> 最终会写入哪些表/队列?" │
|
|
716
|
+
│ 验证方式:答案与 G3 数据流 + 代码实际 SQL/MQ 操作一致 │
|
|
717
|
+
│ │
|
|
718
|
+
│ 类型5:错误排查(2题) │
|
|
719
|
+
│ 模式:"错误码 <XXX> 是什么意思?在哪个组件产生?" │
|
|
720
|
+
│ 验证方式:答案与 G4 错误码映射 + 代码中的错误定义一致 │
|
|
721
|
+
│ │
|
|
722
|
+
│ 类型6(可选):认知边界测试(2题) │
|
|
723
|
+
│ 模式:故意问知识库不覆盖的内容(如第三方 SDK 内部、历史架构变迁) │
|
|
724
|
+
│ 验证方式:AI 应回答"超出知识库覆盖范围"而非幻觉 │
|
|
725
|
+
└────────────────────────────────────────────────────────────────────┘
|
|
726
|
+
|
|
727
|
+
Step 4B:用知识库回答(模拟 AI 使用场景)
|
|
728
|
+
|
|
729
|
+
FOR 每个验证问题:
|
|
730
|
+
1. 假设只能读知识库文档,不能直接读代码
|
|
731
|
+
2. 按检索路由规则,找到对应文档
|
|
732
|
+
3. 从文档中提取答案
|
|
733
|
+
|
|
734
|
+
Step 4C:代码回溯验证
|
|
735
|
+
|
|
736
|
+
FOR 每个答案:
|
|
737
|
+
1. 用 Grep/Read 直接在代码中验证关键声明
|
|
738
|
+
2. 判定结果:
|
|
739
|
+
✅ CORRECT — 答案与代码一致
|
|
740
|
+
⚠️ PARTIAL — 答案部分正确,有遗漏或不精确
|
|
741
|
+
❌ INCORRECT — 答案与代码矛盾
|
|
742
|
+
🔇 BOUNDARY_OK — 认知边界问题,正确拒绝回答(仅类型6)
|
|
743
|
+
🔇 BOUNDARY_FAIL — 认知边界问题,错误地给出了答案(仅类型6)
|
|
744
|
+
|
|
745
|
+
Step 4D:写入验证报告
|
|
746
|
+
|
|
747
|
+
追加到 k4-quality-report.md 的 ## AI 端到端验证 章节:
|
|
748
|
+
|
|
749
|
+
| 问题 | 类型 | 检索文档 | AI答案摘要 | 代码验证 | 结果 |
|
|
750
|
+
|------|------|---------|-----------|---------|------|
|
|
751
|
+
| Aurora 核心职责? | 组件职责 | 03_Aurora设计说明.md | 调度编排... | scheduler.go:42 | ✅ |
|
|
752
|
+
| A→B 通信方式? | 调用关系 | G1矩阵 | RPC | import rpc_client | ✅ |
|
|
753
|
+
| 状态X下能否操作Y? | 操作约束 | G9矩阵 | 不能 | check_state.go:88 | ✅ |
|
|
754
|
+
| 第三方SDK内部? | 认知边界 | — | 超出范围 | — | 🔇 OK |
|
|
755
|
+
|
|
756
|
+
统计:
|
|
757
|
+
CORRECT: N/M (X%)
|
|
758
|
+
PARTIAL: N/M (X%)
|
|
759
|
+
INCORRECT: N/M (X%) — ❌ 每个 INCORRECT 必须列出具体矛盾点
|
|
760
|
+
BOUNDARY_OK: N/N
|
|
761
|
+
BOUNDARY_FAIL: N/N
|
|
762
|
+
|
|
763
|
+
E2E 准确率 = (CORRECT + BOUNDARY_OK) / 总题数
|
|
764
|
+
目标: ≥ 80%
|
|
765
|
+
```
|
|
766
|
+
|
|
767
|
+
**如果 E2E 准确率 < 80%**:在质量报告"建议"章节列出需要改进的文档和具体问题。
|
|
768
|
+
|
|
769
|
+
### Step 5:生成质量报告
|
|
770
|
+
|
|
771
|
+
写入 `_review/k4-quality-report.md`:
|
|
772
|
+
|
|
773
|
+
```markdown
|
|
774
|
+
# 知识库质量报告
|
|
775
|
+
|
|
776
|
+
## 概览
|
|
777
|
+
- 代码基准:<commit SHA> (<tag>)
|
|
778
|
+
- 生成时间:<ISO8601>
|
|
779
|
+
- 文档总数:N 份(Type-1~8: N份,图谱G1~G9: 9份)
|
|
780
|
+
|
|
781
|
+
## 准确性
|
|
782
|
+
| 指标 | 数值 | 状态 |
|
|
783
|
+
| 总声明数 | N | — |
|
|
784
|
+
| 有代码引用 | N (X%) | ✅/❌ |
|
|
785
|
+
| [UNVERIFIED] | N (X%) | ✅/<15% / ⚠️15~25% / ❌>25% |
|
|
786
|
+
| AMBIGUOUS关系 | N | ✅/⚠️ |
|
|
787
|
+
|
|
788
|
+
## 结构质量(validate_kb.py 输出)
|
|
789
|
+
(完整展示,不隐藏任何数字)
|
|
790
|
+
|
|
791
|
+
## 跨文档一致性(k3-consistency-check.md 摘要)
|
|
792
|
+
| 指标 | 数值 | 状态 |
|
|
793
|
+
| 矛盾项 | N | ✅=0 / ❌>0 |
|
|
794
|
+
| 缺失引用 | N | ⚠️ |
|
|
795
|
+
| G1偏差 | N | ⚠️ |
|
|
796
|
+
| 一致率 | X% | 目标≥95% |
|
|
797
|
+
|
|
798
|
+
## RAG 检索抽检
|
|
799
|
+
| 测试问题 | 期望命中 | 实际命中 | 结果 |
|
|
800
|
+
|
|
801
|
+
## AI 端到端验证
|
|
802
|
+
| 指标 | 数值 | 状态 |
|
|
803
|
+
| CORRECT | N/M (X%) | — |
|
|
804
|
+
| PARTIAL | N/M (X%) | ⚠️ |
|
|
805
|
+
| INCORRECT | N/M (X%) | ❌ |
|
|
806
|
+
| BOUNDARY_OK | N/N | ✅ |
|
|
807
|
+
| E2E 准确率 | X% | 目标≥80% |
|
|
808
|
+
|
|
809
|
+
INCORRECT 详情:
|
|
810
|
+
(每个 INCORRECT 的具体矛盾点和改进建议)
|
|
811
|
+
|
|
812
|
+
## 待人工确认清单
|
|
813
|
+
([UNVERIFIED] 超标文档 + AMBIGUOUS 关系 + 矛盾项 + 死链接)
|
|
814
|
+
|
|
815
|
+
## 建议
|
|
816
|
+
(基于一致性校验 + E2E 验证的改进方向)
|
|
817
|
+
```
|
|
818
|
+
|
|
819
|
+
**完成后**:更新 `current_phase` 为 `"completed"`,流程结束。
|
|
820
|
+
|
|
821
|
+
---
|
|
822
|
+
|
|
823
|
+
## 输出目录结构
|
|
824
|
+
|
|
825
|
+
```
|
|
826
|
+
<output_dir>/
|
|
827
|
+
├── README.md ← 知识库索引 + 检索路由规则 + 认知边界声明(AI 专用)
|
|
828
|
+
├── {项目名} 技术架构.md ← [Type-1] 架构总览(目标 ≤80KB,超过则自动拆分)
|
|
829
|
+
├── {项目名} 技术架构-核心链路.md ← [Type-1b] 仅当 Type-1 超 80KB 时拆出
|
|
830
|
+
├── {项目名} 技术架构-AI元数据.md ← [Type-1c] 仅当 Type-1 超 80KB 时拆出
|
|
831
|
+
├── {项目名} 业务架构.md ← [Type-2] 产品能力 + 生命周期 ~70KB
|
|
832
|
+
├── {项目名} 部署架构.md ← [Type-3] 部署拓扑 ~40KB
|
|
833
|
+
├── XX_{组件名}设计说明.md × N ← [Type-4] 每份 20~100KB
|
|
834
|
+
├── XX_{项目名}核心API产品代码映射.md ← [Type-5] 仅有产品文档时生成
|
|
835
|
+
├── XX_{项目名}产品规则速查表.md ← [Type-6]
|
|
836
|
+
├── XX_{项目名}业务开发规范SOP.md ← [Type-7]
|
|
837
|
+
├── {知识增强文档} × N ← [Type-8] 反模式/RPC契约/排障/知识文库
|
|
838
|
+
└── graph/ ← [Type-9] Graph RAG 图谱文档集
|
|
839
|
+
├── README.md ← 图谱索引 + 按问题类型查找
|
|
840
|
+
├── G1_{项目名}组件依赖关系矩阵.md
|
|
841
|
+
├── G2_{项目名}组件调用链路全景.md
|
|
842
|
+
├── G3_{项目名}数据流与存储依赖图.md
|
|
843
|
+
├── G4_{项目名}错误码组件映射表.md
|
|
844
|
+
├── G5_{项目名}跨组件交互场景手册.md
|
|
845
|
+
├── G6_{项目名}知识图谱三元组.md
|
|
846
|
+
├── G7_{项目名}架构风险与影响面分析.md
|
|
847
|
+
├── G8_{项目名}核心配置参数索引.md
|
|
848
|
+
└── G9_{项目名}业务规则约束矩阵.md
|
|
849
|
+
|
|
850
|
+
_review/ ← 过程文件(不入知识库)
|
|
851
|
+
├── progress.json ← 断点续传 + 增量更新状态
|
|
852
|
+
├── metadata.json ← 代码基准版本
|
|
853
|
+
├── interface-inventory.json ← 接口扫描基准(Phase K1 Step 5)
|
|
854
|
+
├── k1-architecture-map.md ← 架构逆向结果(用户确认过)
|
|
855
|
+
├── k2-doc-list.md ← 文档清单 + 准确性统计
|
|
856
|
+
├── k3-consistency-check.md ← 跨文档一致性校验报告(Phase K3 Step 3)
|
|
857
|
+
└── k4-quality-report.md ← 质量报告(含 E2E 验证结果)
|
|
858
|
+
```
|
|
859
|
+
|
|
860
|
+
---
|
|
861
|
+
|
|
862
|
+
## 阶段间控制
|
|
863
|
+
|
|
864
|
+
| 用户回复 | 行为 |
|
|
865
|
+
|---------|------|
|
|
866
|
+
| "继续" / "continue" / "ok" | 进入下一阶段 |
|
|
867
|
+
| "停止" / "stop" | 停止,已生成文件保持可用 |
|
|
868
|
+
| 直接描述问题 | 调整后重新确认,再继续 |
|
|
869
|
+
| 直接编辑文件后回复"继续" | 以修改后文件内容为准继续 |
|
|
870
|
+
|
|
871
|
+
---
|
|
872
|
+
|
|
873
|
+
## 约束
|
|
874
|
+
|
|
875
|
+
- **主 Agent 不执行代码分析**:全部由专职 Agent 完成;启动前必须先 Read 对应 agent 文件
|
|
876
|
+
- **严禁冗余输出**:生成文件直接 Write,禁止先在对话中打印完整内容
|
|
877
|
+
- **组件文档命名**:`XX_{组件名}设计说明.md`(XX 为两位数编号,按依赖链顺序分配,底层组件编号小)
|
|
878
|
+
- **无产品文档时**:Type-5/6 可跳过或将约束值标注为 `[PRODUCT_DOC_MISSING]`,不得推测
|
|
879
|
+
- **并行模式**:Type-4 批次必须同一消息并发发出所有 Agent calls;串行批次顺序执行
|
|
880
|
+
|
|
881
|
+
### 诚实审计规则(Honesty Rules)
|
|
882
|
+
|
|
883
|
+
- **禁止凭空发明**:图谱每条关系必须有组件文档明确依据,不得基于名称猜测
|
|
884
|
+
- **置信度不得伪造**:EXTRACTED=1.0,INFERRED 按证据强度 0.4~0.9,AMBIGUOUS 0.1~0.3;禁用 0.5 默认值
|
|
885
|
+
- **[UNVERIFIED] 不得隐藏**:超过 20% 则文档顶部加可见警告
|
|
886
|
+
- **质量数字完整展示**:validate_kb.py 输出不得只展示通过项
|
|
887
|
+
- **token 成本透明**:每批完成后展示读取文件数和估计 token 消耗
|
|
888
|
+
- **不确定优先 AMBIGUOUS**:宁可标注待确认,也不删除或假装确定
|
|
889
|
+
|
|
890
|
+
---
|
|
891
|
+
|
|
892
|
+
## 与 Team Wiki CLI 的配合(必读)
|
|
893
|
+
|
|
894
|
+
| 阶段 | 命令 / 路径 |
|
|
895
|
+
|------|-------------|
|
|
896
|
+
| Phase 0 结构基线 | `team-wiki compile code <repo> <wiki> --extract ast,heuristic --write` |
|
|
897
|
+
| K3 后编译进 wiki | `team-wiki compile code <knowledge_output> <wiki> --write`(检测 `_manifest.json` → manifest 快路径) |
|
|
898
|
+
| 产品文档入图 | `team-wiki compile docs <docs> <wiki> --extract structure,entity --write` |
|
|
899
|
+
| 产品↔代码桥接 | `team-wiki reconcile <wiki> --write` |
|
|
900
|
+
| 一键刷新 | `team-wiki refresh <wiki> --repo <repo> [--docs <docs>] --extract-code ast,heuristic --write` |
|
|
901
|
+
| 质量评估 | `team-wiki evaluate <wiki>`(含 `graph.structuralEdgeRatio` 等) |
|
|
902
|
+
|
|
903
|
+
**路径约定**(本 skill 安装后):
|
|
904
|
+
|
|
905
|
+
- 方法论:`references/methodology/*.md`(相对本 skill 目录)
|
|
906
|
+
- Agent:`references/agents/kb-doc-generator.md`、`references/agents/graph-rag-agent.md`
|
|
907
|
+
- 脚本:`scripts/scan_repo.py`、`scripts/validate_kb.py`
|
|
908
|
+
|
|
909
|
+
所有流程在本 skill(`references/`、`scripts/`)与 `team-wiki` CLI 内完成。
|