

.md 人类版 + .ai.md AI 协议版 + validate_mermaid.py 验证脚本.ai.md AI 协议版重写.ai.md 与 .cursorrules 更新Why:LLM 生成 Mermaid 时裸边(A --> B)幻觉率高,但人类读带引号的边(A --"->"--> B)视觉噪音大。
What:
.md = 人类友好版:简洁标签、裸边可用、锚点写在节点内.ai.md = AI 协议版:结构化标记(~> 异步、?> 条件、[ok]/[err] 状态、::xxx 元关系)、零裸边、锚点分离为 // → path#Ln影响面:
docs/_tech_graph/ 5 张 flowchart 双轨化 + 99_mermaid_protocol.md 规范docs/_tech_graph/ 5 张 flowchart 双轨化 + .cursorrules 引用总规范scripts/validate_mermaid.py 支持前后端通用扩展名标记 | 语义 | 示例 |
|---|---|---|
-> | 同步执行 | process() → save() |
~> | 异步(await) | await embed_text() |
=> | 映射/赋值 | result = transform(data) |
?> | 条件分支 | if not valid: / try/except |
[ok] | 成功路径 | validate() --"[ok]"--> save() |
[err] | 错误路径 | parse() --"[err]"--> fallback() |
::yields | 流式产出 | LLM --"::yields"--> sources |
::branches | 并行分支 | gather 多路 |
::merges | 结果归并 | fuse_hits_rrf() |
::archives | 日志归档 | OUT --"::archives"--> DB |
Why:中文提问无法召回英文文档(如 "消息历史" 无法命中 RunnableWithMessageHistory)。
What:
data/i18n_glossary.json:42 条中文 → 英文候选(如 "消息历史" → ["message history"])OR 合并进 keyword_documents(query_text)rag.query_expand 事件输出扩展前后对比验收:pytest 32 passed,包括候选生成、上限截断、异常兜底。
# scripts/validate_mermaid.py
# 检查项:
# 1. 零裸边(无边标记的 -->)
# 2. 锚点格式 // → path#Ln
# 3. 异步节点 [[async def ...]] 必须用 ~> 边
flowchart LR
Q[中文 Query] --> G{术语表命中?}
G -->|命中| C[生成英文候选]
G -->|未命中| R[返回原 query]
C --> L{超限?}
L -->|是| T[截断]
L -->|否| O[OR 合成]
T --> O
O --> K[keyword_documents]
R --> K
图 | 人类版 | AI 版 | 膨胀率 |
|---|---|---|---|
00_main | 54 | 70 | +29% |
10_flow_rag | 52 | 78 | +50% |
11_text2sql | 45 | 63 | +40% |
12_fts | 45 | 64 | +42% |
13_rpc | 40 | 59 | +47% |
.tsx.ts 扩展名,初始验证脚本只支持 .py.sql.md,已修复app/**/page.tsx[...slug] 等 glob 语法不符合标准锚点格式,作为合理例外.ai.md,.md 按需同步