Commit e6dff8a62d48b11668dc67d06168986148dae0d1

Authored by zichun
1 parent 79dfd6cd

Add form-card export: viw_kg_form_card + export_form_cards.sh (deliverable 4)

Assemble one structured, embeddable text card per form (1748) merging
node metadata, upstream/downstream document names, and the field 中文名
list. export_form_cards.sh emits JSONL for vector-store ingestion
(group_concat_max_len raised to avoid truncating 269-field forms).
Generated corpus is gitignored — regenerate deterministically via script.
sql/.gitignore 0 → 100644
  1 +# Generated RAG corpus — reproduce with ./export_form_cards.sh
  2 +form_cards.jsonl
  3 +*.jsonl
sql/export_form_cards.sh 0 → 100755
  1 +#!/usr/bin/env bash
  2 +# ============================================================
  3 +# export_form_cards.sh —— 导出 1748 张 ERP 表单卡片为 JSONL (GraphRAG 交付物4)
  4 +# 每行一个 JSON:{id, moduleId, title, domain, dataSource, execType,
  5 +# aiTool, aiScene, upstream, downstream, text}
  6 +# text = viw_kg_form_card.sCard,可直接切块灌向量库(Milvus)。
  7 +#
  8 +# 依赖视图:viw_kg_form_card ← viw_kg_form ← viw_kg_edge_flow ← viw_ai_useful_forms
  9 +# 用法: ./export_form_cards.sh [输出文件, 默认 form_cards.jsonl]
  10 +# 注意:必须 --no-defaults(本地 ~/.my.cnf 默认指向不存在的库 xlyweberp_saas_ai)。
  11 +# group_concat_max_len 提到 1e6 防字段清单截断(最长表单 269 字段)。
  12 +# ============================================================
  13 +set -euo pipefail
  14 +
  15 +OUT="${1:-form_cards.jsonl}"
  16 +DB_ARGS=(--no-defaults -h127.0.0.1 -P33307 -uroot -plocal xlyweberp_saas)
  17 +
  18 +mysql "${DB_ARGS[@]}" --batch --skip-column-names --raw 2>/dev/null <<'SQL' > "$OUT"
  19 +SET SESSION group_concat_max_len = 1000000;
  20 +SELECT JSON_OBJECT(
  21 + 'id', sFormId,
  22 + 'moduleId', sModuleId,
  23 + 'title', sFormTitle,
  24 + 'domain', sDomain,
  25 + 'dataSource', sDataSource,
  26 + 'execType', sExecType,
  27 + 'aiTool', bAiTool,
  28 + 'aiScene', sAiScene,
  29 + 'upstream', sUpstreamForms,
  30 + 'downstream', sDownstreamForms,
  31 + 'text', sCard
  32 +)
  33 +FROM viw_kg_form_card
  34 +ORDER BY sDomain, sFormTitle;
  35 +SQL
  36 +
  37 +echo "wrote $(wc -l < "$OUT" | tr -d ' ') form-cards to $OUT"
sql/viw_kg_form_card.sql 0 → 100644
  1 +-- ============================================================
  2 +-- 视图:viw_kg_form_card —— ERP 知识图谱·表单卡片 (RAG 文档, 1748 行)
  3 +-- 每个表单一段结构化文本 sCard,用于灌入向量库做召回;另暴露结构化元数据列供过滤。
  4 +-- 汇聚三层图谱:节点(viw_kg_form) + 上下游单据名(viw_kg_edge_flow) + 字段中文名清单。
  5 +--
  6 +-- ⚠ 字段清单用 GROUP_CONCAT 拼接,单表单字段可达 269 个 / 2477 字,
  7 +-- 默认 group_concat_max_len=1024 会截断 —— 查询前必须
  8 +-- SET SESSION group_concat_max_len = 1000000; (见 export_form_cards.sql)
  9 +--
  10 +-- sCard 结构:表单名 / 业务域 / 数据源(执行类型) / 上游单据 / 下游单据 / 字段 / 标识(formId,moduleId)
  11 +-- 节点粒度 = 表单 sFormId (1748);上下游为菜单级。
  12 +-- ============================================================
  13 +CREATE OR REPLACE VIEW viw_kg_form_card AS
  14 +SELECT
  15 + fm.sFormId,
  16 + fm.sModuleId,
  17 + fm.sFormTitle,
  18 + fm.sModuleName,
  19 + fm.sDomain,
  20 + fm.sDataSource,
  21 + fm.sExecType,
  22 + fm.iUpstream,
  23 + fm.iDownstream,
  24 + fm.bAiTool,
  25 + fm.sAiScene,
  26 + up.names AS sUpstreamForms, -- 上游单据名(逗号)
  27 + dn.names AS sDownstreamForms, -- 下游单据名(逗号)
  28 + fl.field_names AS sFieldList, -- 字段中文名清单(顿号)
  29 + CONCAT_WS('\n',
  30 + CONCAT('【表单】', fm.sFormTitle),
  31 + CONCAT('业务域:', fm.sDomain),
  32 + CONCAT('数据源:', fm.sDataSource, '(', fm.sExecType, ')'),
  33 + CONCAT('上游单据:', IFNULL(up.names, '无')),
  34 + CONCAT('下游单据:', IFNULL(dn.names, '无')),
  35 + CONCAT('字段:', IFNULL(fl.field_names, '')),
  36 + CONCAT('标识:formId=', fm.sFormId, ' moduleId=', fm.sModuleId,
  37 + CASE WHEN fm.bAiTool = 1 THEN CONCAT(' AI场景=', IFNULL(fm.sAiScene,'')) ELSE '' END)
  38 + ) AS sCard -- 可直接向量化的卡片文本
  39 +FROM viw_kg_form fm
  40 +LEFT JOIN (
  41 + SELECT sParentId,
  42 + GROUP_CONCAT(DISTINCT sChinese ORDER BY iOrder SEPARATOR '、') AS field_names
  43 + FROM gdsconfigformslave
  44 + WHERE IFNULL(sChinese,'') <> '' AND sControlName NOT LIKE 'Btn%'
  45 + GROUP BY sParentId
  46 +) fl ON fl.sParentId = fm.sFormId
  47 +LEFT JOIN (
  48 + SELECT sSrcModuleId AS mid,
  49 + GROUP_CONCAT(DISTINCT sTgtName ORDER BY sTgtName SEPARATOR ',') AS names
  50 + FROM viw_kg_edge_flow WHERE bSelfLoop = 0 GROUP BY sSrcModuleId
  51 +) dn ON dn.mid = fm.sModuleId
  52 +LEFT JOIN (
  53 + SELECT sTgtModuleId AS mid,
  54 + GROUP_CONCAT(DISTINCT sSrcName ORDER BY sSrcName SEPARATOR ',') AS names
  55 + FROM viw_kg_edge_flow WHERE bSelfLoop = 0 GROUP BY sTgtModuleId
  56 +) up ON up.mid = fm.sModuleId;