

_tech_graph/ 交付形态/_tech_graph 的 Mermaid 图谱体系。ai-ink-brain-api-python/docs/_tech_graph/ 的落盘标准,明确“入口总图 / 子流程 / Struct / 版本线 / 规约”的职责分工_tech_graph/,并用校验脚本防止文档静默过期后端图谱的落盘策略很清晰:00_main.ai.md 是入口总图,负责把路由分发、关键分支(RAG/Text2SQL/CodeRAG/ingest/observability)串起来,并通过“加载节点”跳转到子流程图。
【引用 1/2|来源:后端图谱入口总图(节选)】
Q[[用户请求]] --"->"--> E{"@router.dispatch"}
E --"POST /api/py/unified/chat"--> U1[[Unified JSON]]
E --"POST /api/py/unified/chat/stream"--> U2[[Unified SSE]]
U1 --"::branches"--> RAG[[RAG 子流程]]
U2 --"::branches"--> RAG
U1 --"::branches"--> T2S[[Text2SQL 子流程]]
U2 --"::branches"--> T2S
RAG --"加载"--> RAG_DOC[>10_flow_rag.md]
T2S --"加载"--> T2S_DOC[>11_flow_text2sql.md]
图谱不只画“主干能跑通”,而是显式写出 鉴权失败、Embedding 失败、无召回 hits 等失败分支,让后续实现与排障都有确定锚点,减少“默认一切都会成功”的隐性幻觉。
【引用 2/2|来源:RAG 子流程失败路径(节选)】
IN[[入口 Query]] --"->"--> AUTH[[鉴权]]
AUTH --"[ok]"--> HIS[[历史轮次]]
AUTH --"[err]"--> ERR_AUTH[>Auth Failed]
HIS --"可选"--> RW[[Query Rewrite]]
RW --"::branches"--> KQ[[keyword_query_text()]]
RW --"::branches"--> EMB[[async def embed]]
EMB --"[err]"--> EMB_FAIL[>Embedding Failed]
EMB_FAIL --"->"--> KEYWORD_ONLY[[keyword-only]]
为了避免“概念讲清了,但工程事实不一致”,后端图谱用 01_struct.md 把 DB 结构固化为 Struct(而非长 DDL),并在 metadata 上明确 required/optional 的意图。
class documents {
+bigserial id
+text content
+jsonb metadata
+vector(1024) embedding
+tsvector fts_tokens %% vFTS (hybrid_search.sql)
+timestamptz created_at
}
class rag_conversation_logs {
+uuid id
+varchar session_id
+text query
+text rewritten_query
+jsonb retrieved_context
+text response
+jsonb metadata
+timestamptz created_at
}
今天确认的工程化抓手是两条:
00_main 只保留入口与分支,子流程按需加载。_tech_graph/,必须能被脚本发现(避免文档静默过期)。- 最小漂移校验(P0_3):运行 `python tools/tech_graph_drift_check.py`,检查端点/RPC/env/表名是否在 `docs/_tech_graph/*.md` 被覆盖(用于避免文档静默过期)。
[err] 分支与 fallback(例如 keyword-only、no_data)【截图占位:Tech Graph 入口总图(00_main)】
00_main.ai.md 的入口分发 + 子流程加载节点(RAG/Text2SQL/FTS/RPC)ai-ink-brain/_tech_graph/ 补一张“前端 ↔ Python API ↔ DB”的端到端边界图(与后端 00_main 对齐)