Commit b3f288a3728b5d9e997ed72c7f3993e73c974278

Authored by zichun
1 parent 840b10f2

docs: add FormCollect tool (param collection, replaces quote-Skill); Read serves…

… ERP procs, Query = ad-hoc-only
docs/agent-architecture.md
... ... @@ -50,14 +50,16 @@
50 50  
51 51 | # | 工具 | 职责 | 关键入参 | 出参 | 安全 | HITL |
52 52 |---|------|------|----------|------|------|------|
53   -| 1 | **Read** | 读单据明细,包 `getBusinessDataByFormcustomId` | formId, moduleId, 过滤, page | 行(截断)+分页游标 | ERP API 鉴权 | 否 |
54   -| 2 | **Query** | 只读 SQL/统计沙箱 (NL2SQL) | 自然语言或受限 SQL | 聚合结果(小) | ⚠ 见 §9 | 否 |
  53 +| 1 | **Read** | 调**任意 ERP 表单/过程**(明细 **+ 预建聚合** AR/AP/库存/进度,即旧 type-5),包 `getBusinessDataByFormcustomId` | formId, moduleId, 过滤, page | 行(截断)+分页游标 | ERP API 鉴权(安全) | 否 |
  54 +| 2 | **Query** | 只读 SQL 沙箱,**仅 ad-hoc 兜底**(没有现成表单/过程能答时才用) | 自然语言 → SQL | 聚合结果(小) | ⚠ 见 §9 | 否 |
55 55 | 3 | **KgSearch** | L2 邻居 / L3 字段→列→表 / 解析 formId(**暂缓,预留接口**) | 表单名/术语/域 | 子图/映射 | 只读 | 否 |
56   -| 4 | **AskUser** | 向用户提问(选项 + 自由输入) | question, options[] | — (immediate-return) | — | ✅ |
57   -| 5 | **ProposeWrite** | 出 diff → 确认 → 暂存 | formId, op, payload | diff + stagingRef | 见 §12 | ✅ |
  56 +| 4 | **AskUser** | 小问题(选项 + 自由输入),消歧/澄清 | question, options[] | — (immediate-return) | — | ✅ |
  57 +| 5 | **FormCollect(表单呈现)** | 渲染一张表单收集 N 个参数(字段/类型/下拉来自 ERP 元数据),用户填 | formId(+ 已知预填) | 收集到的参数 | — | ✅ |
  58 +| 6 | **ProposeWrite** | 出 diff → 确认 → 暂存(单一写工具) | formId, op, payload | diff + stagingRef | 见 §12 | ✅ |
58 59  
59   -- **Read 的 formId 定位**依赖 KgSearch(过渡期先用表单名模糊匹配 `viw_ai_useful_forms`)。
60   -- **另需一个「取表单 schema」能力**(字段/类型/必填/下拉/默认)供 ProposeWrite 预填 —— 数据在 `gdsconfigformslave`。
  60 +- **路由原则**:预建表单/过程能答的 → **Read(安全)**;纯 ad-hoc 分析 → **Query(锁死)**。压缩 Query 危险面。
  61 +- **Read/ProposeWrite 的 formId 定位**依赖 KgSearch(过渡期先用表单名模糊匹配 `viw_ai_useful_forms`)。
  62 +- **「取表单 schema」能力**(字段/类型/必填/下拉/默认,数据在 `gdsconfigformslave`)供 **FormCollect 渲染** 和 ProposeWrite 预填。复杂写(报价 25 字段)= FormCollect 渲染该表单让用户填,**无需 Skill**。
61 63  
62 64 ## 6. Skills(自搭轻量版,框架无原生支持)
63 65  
... ...
docs/legacy-tool-inventory.md
... ... @@ -33,7 +33,7 @@ form-backed 61;3 个无业务表单(`queryWorkOrderCost` 空 `sSrcFormId`;
33 33 2. **每表单的向量 collection + 字段映射**(`sVectorfiled/sVectorjson/…`)驱动 KgSearch,以及 SQL-vs-向量的 `routeQuery` 决策。
34 34 3. **学习到的 SQL few-shot 缓存 + 自修复循环**:`ai_global_agent_question_sql` 缓存、5 次带错重试、`ai_sql_error_history`。
35 35 4. **BtnCopyTo 单据流转引擎(21 工具)**:源→目标表单对、`operateType` **合并 vs 分单**(一个/多个单据)、行→`sSlaveId` 解析、`Sp_Ai_AddCommonAfterNew`、`sCopyTo/sCopyToSrcId` 打开已建单据。→ 通用 ProposeWrite **必须带 源/目标表单对 + 选择模式**,不能只给一堆行。**(这正是我建的 `viw_kg_edge_flow` 提供的映射。)**
36   -5. **报价定价引擎(4 工具)**:分组参数(产品/部件)、动态部件增删(拼音克隆)、`sDynamicParamRuleSql` 动态参数、枚举/常量/SQL 选项列表、`sParamMissMemo` 缺参提示、`Sp_Ai_AddQuoQuoAfter` 定价。→ **复杂到应单独做成一个 Skill/专用能力,别硬塞通用 ProposeWrite。**
  36 +5. **报价定价引擎(4 工具)**:分组参数(产品/部件)、动态部件增删(拼音克隆)、`sDynamicParamRuleSql` 动态参数、枚举/常量/SQL 选项列表、`sParamMissMemo` 缺参提示、`Sp_Ai_AddQuoQuoAfter` 定价。→ **参数收集交给 `FormCollect(表单呈现)`**(渲染报价表单让用户填,字段由 ERP 元数据驱动,无需 Skill);写仍走单一 `ProposeWrite`,报价 ERP 侧自动执行。
37 37 6. **参数归一化 + 外键消歧**(`applyValues`):名称→id 解析、"不存在"拒绝、"存在多个请选择"编号消歧、中↔英/CONST 反查、`sDefaultValue`、类型感知必填(数值 d 字段 0=空)、只校验首个必填参的怪癖、date 强制 `yyyy-MM-dd` 注入当前日期、`bConfirmAfter`。→ 映射到 **AskUser + KG 字段字典**。
38 38 7. **ERP-API 读路径(type-5 + type-4 的读半段)**:走 ERP token、表单权限、列可见性 `bVisible`、聚合过程(AR/AP/进度)、Excel 导出。→ 直连 DB 的 Query **会绕过**这些。
39 39 8. **数据权限**:`fun_get_jurisdiction`(queryTodayTask)、表单权限——通用 Query 必须保留。
... ... @@ -46,6 +46,6 @@ form-backed 61;3 个无业务表单(`queryWorkOrderCost` 空 `sSrcFormId`;
46 46 - `sSrcSlaveId` 全 NULL;`iBizType 3`(HTTP)定义了但 0 工具使用。
47 47  
48 48 ## 对架构的启示
49   -- **ProposeWrite 需分两类**:copyto(源→目标+合并/分单,靠 KG 映射)与 报价(结构化多部件填单+定价,做成 Skill)
  49 +- **ProposeWrite 保持单一写工具**;copyto(源→目标+合并/分单,靠 KG 映射)与报价的差异只在 ERP 执行策略(报价自动执行)。报价的多部件参数收集交给 **FormCollect(表单呈现)**,非 Skill
50 50 - **KgSearch + KG 视图正好承接** BtnCopyTo 的源→目标映射(`viw_kg_edge_flow`)与参数消歧(`viw_kg_field_dict`)。
51   -- **Query 的"每表单范围"必须从"喂模型软约束"升级为"执行期强制 allowlist"**(与安全调查一致)。
  51 +- **Query 降级为 ad-hoc 兜底**:预建表单/过程能答的(含 type-5 那类聚合统计)都走 **Read(ERP API,权限安全)**;Query 只留没有现成表单能答的分析尾巴,且"每表单范围"从"软约束"升级为"执行期强制 allowlist"(与安全调查一致)。
... ...