Commit 2bdf307cbe14fb9fd997f78a32b0875456ef9594

Authored by zichun
1 parent 57028160

Add viw_kg_domain: L1 business-domain map for the system prompt

Roll L2 flow up to domain->domain adjacency (11 domains) with anchor
forms, form/tool counts, and the matching AI-agent scene. This is the
coarse L1 tier meant to live in the agent system prompt for routing;
L2/L3 stay as on-demand tools. Domains align to ai_agent's 8 business
智能体 (+ 基础资料/设备/其他 -> ERP代理人).
sql/README.md
@@ -14,14 +14,20 @@ mysql --no-defaults -h127.0.0.1 -P33307 -uroot -plocal xlyweberp_saas @@ -14,14 +14,20 @@ mysql --no-defaults -h127.0.0.1 -P33307 -uroot -plocal xlyweberp_saas
14 14
15 ## 三个粒度 15 ## 三个粒度
16 16
17 -| 层 | 关注 | 视图 | 规模 |  
18 -|-----|--------------------|-----------------------------------------|------|  
19 -| L1 | 业务域(路由) | `viw_kg_form.sDomain` | ~11 域 |  
20 -| L2 ⭐| 单据流转(最有用) | `viw_kg_edge_flow` | 411 边 |  
21 -| L3 | 实体字段 ER(NL2SQL)| `viw_kg_edge_ref` + `viw_kg_field_dict` | 1597 FK / 38k 术语 | 17 +| 层 | 关注 | 视图 | 规模 | 消费方式 |
  18 +|-----|--------------------|-----------------------------------------|------|----------|
  19 +| L1 | 业务域(路由) | `viw_kg_domain` | 11 域 | ⇒ 常驻 system prompt |
  20 +| L2 ⭐| 单据流转(最有用) | `viw_kg_edge_flow` / `viw_kg_form_neighbors` | 411 边 | ⇒ tool 按需查 |
  21 +| L3 | 实体字段 ER(NL2SQL)| `viw_kg_edge_ref` + `viw_kg_field_dict` | 1597 FK / 38k 术语 | ⇒ tool 按需查 |
  22 +
  23 +**消费分层(agentic RAG):** L1 体量小且永远相关 → 直接进 system prompt 做路由地图;
  24 +L2/L3 大且稀疏 → 做成 agent tools(`DynamicExeDbService.findSql` 薄封装)按需索引,
  25 +L3 工具必须"按词查询"而非整表 dump。L1 的 11 个域对齐 `ai_agent` 的 8 个业务智能体
  26 +(+基础资料/设备/其他→ERP代理人),可直接驱动场景路由。
22 27
23 ## 视图/脚本一览(按依赖顺序) 28 ## 视图/脚本一览(按依赖顺序)
24 29
  30 +0. **`viw_kg_domain`** — L1 业务域地图(11 行):域→域流转上卷 + 锚点单据 + 对应智能体,渲染进 system prompt。
25 1. **`viw_ai_useful_forms`** — 1748 张有用业务表单目录(此前已建)。节点主键 `sFormId`,菜单 `sModuleId`。 31 1. **`viw_ai_useful_forms`** — 1748 张有用业务表单目录(此前已建)。节点主键 `sFormId`,菜单 `sModuleId`。
26 2. **`viw_kg_edge_flow`** — 单据流转边:源菜单 --生成--> 目标菜单。 32 2. **`viw_kg_edge_flow`** — 单据流转边:源菜单 --生成--> 目标菜单。
27 目标由 `gdsconfigformslave` 上 `BtnCopyTo.<Action>` 行的 **`sActiveId`** 解析(照搬存储过程 33 目标由 `gdsconfigformslave` 上 `BtnCopyTo.<Action>` 行的 **`sActiveId`** 解析(照搬存储过程
@@ -42,8 +48,8 @@ mysql --no-defaults -h127.0.0.1 -P33307 -uroot -plocal xlyweberp_saas @@ -42,8 +48,8 @@ mysql --no-defaults -h127.0.0.1 -P33307 -uroot -plocal xlyweberp_saas
42 # 注意:zsh 不对未加引号的变量做分词,用数组 48 # 注意:zsh 不对未加引号的变量做分词,用数组
43 DB=(mysql --no-defaults -h127.0.0.1 -P33307 -uroot -plocal xlyweberp_saas) 49 DB=(mysql --no-defaults -h127.0.0.1 -P33307 -uroot -plocal xlyweberp_saas)
44 for v in viw_ai_useful_forms viw_kg_edge_flow viw_kg_form viw_kg_edge_ref \ 50 for v in viw_ai_useful_forms viw_kg_edge_flow viw_kg_form viw_kg_edge_ref \
45 - viw_kg_form_card viw_kg_field_dict viw_kg_form_neighbors; do  
46 - "${DB[@]}" < "$v.sql" 51 + viw_kg_form_card viw_kg_field_dict viw_kg_form_neighbors viw_kg_domain; do
  52 + "${DB[@]}" < "$v.sql" # viw_kg_domain 依赖 viw_kg_form + viw_kg_edge_flow,放最后
47 done 53 done
48 ./export_form_cards.sh form_cards.jsonl # → 1748 行 JSONL 54 ./export_form_cards.sh form_cards.jsonl # → 1748 行 JSONL
49 ``` 55 ```
sql/viw_kg_domain.sql 0 → 100644
  1 +-- ============================================================
  2 +-- 视图:viw_kg_domain —— ERP 知识图谱·业务域 (L1, 路由层, 塞 system prompt 用)
  3 +-- 约 11 行,每行一个业务域:规模 + 锚点单据 + 域级流转邻接 + 对应 AI 智能体场景。
  4 +-- 这是 L1 的"全局地图":把 L2 单据流转上卷到 域→域,信息密度最高、最适合常驻提示词。
  5 +--
  6 +-- 域名对齐 ai_agent 的 8 个业务智能体 (销售/采购/生产/报价/品质/发外/库存/财务);
  7 +-- 基础资料/设备/其他 无专属智能体 → 归 ERP代理人(通用)。
  8 +-- sDownstreamDomains/sUpstreamDomains = 本域可生成到 / 来源于 的其它域(来自 viw_kg_edge_flow 上卷)。
  9 +-- sAnchorForms = 本域内流转枢纽单据 Top6(按 上下游度数 排序)。
  10 +-- ============================================================
  11 +CREATE OR REPLACE VIEW viw_kg_domain AS
  12 +WITH mod_dom AS (
  13 + SELECT sModuleId AS mid, MIN(sDomain) AS dom
  14 + FROM viw_kg_form GROUP BY sModuleId
  15 +),
  16 +dom_flow AS (
  17 + SELECT sd.dom AS src_dom, td.dom AS tgt_dom
  18 + FROM viw_kg_edge_flow e
  19 + JOIN mod_dom sd ON sd.mid = e.sSrcModuleId
  20 + JOIN mod_dom td ON td.mid = e.sTgtModuleId
  21 + WHERE e.bSelfLoop = 0
  22 +)
  23 +SELECT
  24 + f.sDomain, -- 业务域(L1)
  25 + CASE f.sDomain
  26 + WHEN '销售' THEN '销售智能体' WHEN '采购' THEN '采购智能体'
  27 + WHEN '生产' THEN '生产智能体' WHEN '报价' THEN '报价智能体'
  28 + WHEN '品质' THEN '品质智能体' WHEN '发外' THEN '发外智能体'
  29 + WHEN '库存' THEN '库存智能体' WHEN '财务' THEN '财务智能体'
  30 + ELSE 'ERP代理人'
  31 + END AS sAiScene, -- 对应智能体场景
  32 + COUNT(*) AS iForms, -- 域内表单数
  33 + SUM(f.bHasFlow) AS iFlowForms, -- 参与流转的表单数
  34 + SUM(f.bAiTool) AS iAiTools, -- 已挂 AI 工具数
  35 + SUBSTRING_INDEX(
  36 + GROUP_CONCAT(CASE WHEN f.bHasFlow = 1 THEN f.sFormTitle END
  37 + ORDER BY (f.iDownstream + f.iUpstream) DESC SEPARATOR '、'),
  38 + '、', 6) AS sAnchorForms, -- 枢纽单据Top6
  39 + (SELECT GROUP_CONCAT(DISTINCT df.tgt_dom ORDER BY df.tgt_dom SEPARATOR ',')
  40 + FROM dom_flow df WHERE df.src_dom = f.sDomain AND df.tgt_dom <> f.sDomain)
  41 + AS sDownstreamDomains, -- 下游域
  42 + (SELECT GROUP_CONCAT(DISTINCT df.src_dom ORDER BY df.src_dom SEPARATOR ',')
  43 + FROM dom_flow df WHERE df.tgt_dom = f.sDomain AND df.src_dom <> f.sDomain)
  44 + AS sUpstreamDomains -- 上游域
  45 +FROM viw_kg_form f
  46 +GROUP BY f.sDomain
  47 +ORDER BY iForms DESC;