From 2bdf307cbe14fb9fd997f78a32b0875456ef9594 Mon Sep 17 00:00:00 2001 From: zichun <26684461+reporkey@users.noreply.github.com> Date: Tue, 21 Jul 2026 09:54:50 +0800 Subject: [PATCH] Add viw_kg_domain: L1 business-domain map for the system prompt --- sql/README.md | 20 +++++++++++++------- sql/viw_kg_domain.sql | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 7 deletions(-) create mode 100644 sql/viw_kg_domain.sql diff --git a/sql/README.md b/sql/README.md index 8b0b620..5ae5b37 100644 --- a/sql/README.md +++ b/sql/README.md @@ -14,14 +14,20 @@ mysql --no-defaults -h127.0.0.1 -P33307 -uroot -plocal xlyweberp_saas ## 三个粒度 -| 层 | 关注 | 视图 | 规模 | -|-----|--------------------|-----------------------------------------|------| -| L1 | 业务域(路由) | `viw_kg_form.sDomain` | ~11 域 | -| L2 ⭐| 单据流转(最有用) | `viw_kg_edge_flow` | 411 边 | -| L3 | 实体字段 ER(NL2SQL)| `viw_kg_edge_ref` + `viw_kg_field_dict` | 1597 FK / 38k 术语 | +| 层 | 关注 | 视图 | 规模 | 消费方式 | +|-----|--------------------|-----------------------------------------|------|----------| +| L1 | 业务域(路由) | `viw_kg_domain` | 11 域 | ⇒ 常驻 system prompt | +| L2 ⭐| 单据流转(最有用) | `viw_kg_edge_flow` / `viw_kg_form_neighbors` | 411 边 | ⇒ tool 按需查 | +| L3 | 实体字段 ER(NL2SQL)| `viw_kg_edge_ref` + `viw_kg_field_dict` | 1597 FK / 38k 术语 | ⇒ tool 按需查 | + +**消费分层(agentic RAG):** L1 体量小且永远相关 → 直接进 system prompt 做路由地图; +L2/L3 大且稀疏 → 做成 agent tools(`DynamicExeDbService.findSql` 薄封装)按需索引, +L3 工具必须"按词查询"而非整表 dump。L1 的 11 个域对齐 `ai_agent` 的 8 个业务智能体 +(+基础资料/设备/其他→ERP代理人),可直接驱动场景路由。 ## 视图/脚本一览(按依赖顺序) +0. **`viw_kg_domain`** — L1 业务域地图(11 行):域→域流转上卷 + 锚点单据 + 对应智能体,渲染进 system prompt。 1. **`viw_ai_useful_forms`** — 1748 张有用业务表单目录(此前已建)。节点主键 `sFormId`,菜单 `sModuleId`。 2. **`viw_kg_edge_flow`** — 单据流转边:源菜单 --生成--> 目标菜单。 目标由 `gdsconfigformslave` 上 `BtnCopyTo.` 行的 **`sActiveId`** 解析(照搬存储过程 @@ -42,8 +48,8 @@ mysql --no-defaults -h127.0.0.1 -P33307 -uroot -plocal xlyweberp_saas # 注意:zsh 不对未加引号的变量做分词,用数组 DB=(mysql --no-defaults -h127.0.0.1 -P33307 -uroot -plocal xlyweberp_saas) for v in viw_ai_useful_forms viw_kg_edge_flow viw_kg_form viw_kg_edge_ref \ - viw_kg_form_card viw_kg_field_dict viw_kg_form_neighbors; do - "${DB[@]}" < "$v.sql" + viw_kg_form_card viw_kg_field_dict viw_kg_form_neighbors viw_kg_domain; do + "${DB[@]}" < "$v.sql" # viw_kg_domain 依赖 viw_kg_form + viw_kg_edge_flow,放最后 done ./export_form_cards.sh form_cards.jsonl # → 1748 行 JSONL ``` diff --git a/sql/viw_kg_domain.sql b/sql/viw_kg_domain.sql new file mode 100644 index 0000000..0ffaa94 --- /dev/null +++ b/sql/viw_kg_domain.sql @@ -0,0 +1,47 @@ +-- ============================================================ +-- 视图:viw_kg_domain —— ERP 知识图谱·业务域 (L1, 路由层, 塞 system prompt 用) +-- 约 11 行,每行一个业务域:规模 + 锚点单据 + 域级流转邻接 + 对应 AI 智能体场景。 +-- 这是 L1 的"全局地图":把 L2 单据流转上卷到 域→域,信息密度最高、最适合常驻提示词。 +-- +-- 域名对齐 ai_agent 的 8 个业务智能体 (销售/采购/生产/报价/品质/发外/库存/财务); +-- 基础资料/设备/其他 无专属智能体 → 归 ERP代理人(通用)。 +-- sDownstreamDomains/sUpstreamDomains = 本域可生成到 / 来源于 的其它域(来自 viw_kg_edge_flow 上卷)。 +-- sAnchorForms = 本域内流转枢纽单据 Top6(按 上下游度数 排序)。 +-- ============================================================ +CREATE OR REPLACE VIEW viw_kg_domain AS +WITH mod_dom AS ( + SELECT sModuleId AS mid, MIN(sDomain) AS dom + FROM viw_kg_form GROUP BY sModuleId +), +dom_flow AS ( + SELECT sd.dom AS src_dom, td.dom AS tgt_dom + FROM viw_kg_edge_flow e + JOIN mod_dom sd ON sd.mid = e.sSrcModuleId + JOIN mod_dom td ON td.mid = e.sTgtModuleId + WHERE e.bSelfLoop = 0 +) +SELECT + f.sDomain, -- 业务域(L1) + CASE f.sDomain + WHEN '销售' THEN '销售智能体' WHEN '采购' THEN '采购智能体' + WHEN '生产' THEN '生产智能体' WHEN '报价' THEN '报价智能体' + WHEN '品质' THEN '品质智能体' WHEN '发外' THEN '发外智能体' + WHEN '库存' THEN '库存智能体' WHEN '财务' THEN '财务智能体' + ELSE 'ERP代理人' + END AS sAiScene, -- 对应智能体场景 + COUNT(*) AS iForms, -- 域内表单数 + SUM(f.bHasFlow) AS iFlowForms, -- 参与流转的表单数 + SUM(f.bAiTool) AS iAiTools, -- 已挂 AI 工具数 + SUBSTRING_INDEX( + GROUP_CONCAT(CASE WHEN f.bHasFlow = 1 THEN f.sFormTitle END + ORDER BY (f.iDownstream + f.iUpstream) DESC SEPARATOR '、'), + '、', 6) AS sAnchorForms, -- 枢纽单据Top6 + (SELECT GROUP_CONCAT(DISTINCT df.tgt_dom ORDER BY df.tgt_dom SEPARATOR ',') + FROM dom_flow df WHERE df.src_dom = f.sDomain AND df.tgt_dom <> f.sDomain) + AS sDownstreamDomains, -- 下游域 + (SELECT GROUP_CONCAT(DISTINCT df.src_dom ORDER BY df.src_dom SEPARATOR ',') + FROM dom_flow df WHERE df.tgt_dom = f.sDomain AND df.src_dom <> f.sDomain) + AS sUpstreamDomains -- 上游域 +FROM viw_kg_form f +GROUP BY f.sDomain +ORDER BY iForms DESC; -- libgit2 0.22.2