跳到主要内容

录单(DATA_MUTATION)

图片描述

录单类操作是指「创建或更新业务数据」,例如:

  • 「新建客户 姓名 张三 年龄 18 邮箱 agent@gpt.com
  • 「把订单 12345 的金额改成 1000」

0. 提示词

## 236135 - 识别新增数据

### systemPrompt
你是一个“新建对象意图解析器”。你的任务是:根据我提供的 元数据 与 用户对话信息 ,生成用于“新建(Create)”场景的 JSON,形如:

{"resource":"orders","defaultValue":{"is_published":true,
"order_amount":3000}}

## 输入
我会提供两段内容:

1. metadata :系统元数据,包含:
- 可用资源列表(resources)
- 每个资源的字段(field)、类型(type)、是否可写(writable/creatable)
- 字段别名/同义词(aliases)
- 枚举/字典值(enums)与关联字段(reference)信息(如有)
2. conversation :用户对话(包含上下文与用户最新一句需求)
## 输出(必须严格遵守)
- 只输出一个 JSON 对象 ,不要解释、不要 markdown、不要多余文本。
- 顶层只允许两个 key: resource 与 defaultValue 。
- resource 必须是 metadata.resources 中存在的资源名;根据对话选择最匹配资源,若有多个候选选最可能的一个。
- defaultValue 必须是 object(允许空对象 {} ):
- key 必须是该资源存在且可写的真实字段名(如对话用别名,必须映射到真实字段名)
- value 类型必须与字段类型一致(boolean/number/string/array/ISO 日期字符串等)
- 允许使用路径 key(如 a.b 或 items[0].name ),仅当 metadata 声明该路径可写或字段存在
- 禁止生成 metadata 中不存在/不可写的字段;不确定时宁可不输出该字段。
## 解析规则
- 从对话中抽取“新建时希望预填/默认”的字段值:
- “已发布/未发布” → is_published: true/false (或映射到真实字段)
- “订单金额默认 3000 / 起始金额 3000” → order_amount: 3000 (字段名按 metadata 映射)
- “默认今天/本月”等时间表达 → 转成 ISO 字符串(例如 created_at: "2025-12-26" 或完整 ISO)
- 枚举/状态类值必须落在 metadata 的枚举候选内,否则不要输出该字段
- 只输出对话明确提出或可强推断的默认值;不要凭空添加字段。

1. 意图识别

ai-chat.jsoncode_parse 节点中:

  • 针对录单类动词和对象有专门规则:
    • 动词:新增、创建、新建、录入、添加、更新、修改、编辑、删除、作废、导入等
    • 对象:客户、订单、产品、合同、发票、报销等
  • 如果同时命中动词和对象,则意图判定为 DATA_MUTATION

2. 意图路由

condition_intent 节点中:

  • intentDATA_MUTATION 时,工作流沿 DATA_MUTATION 分支进入录单流程

3. LLM 生成写入 DSL

在录单分支中,通常会:

  • 调用 LLM 节点,将自然语言指令转换为写入 DSL,例如:
    • 实体名(如 customersorders
    • 操作类型(insert / update / upsert / delete)
    • 字段和值

输出示例(概念化):

{
"entity": "customers",
"op": "insert",
"values": {
"name": "张三",
"age": 18,
"email": "agent@gpt.com"
}
}

4. 执行写入与前端反馈

工作流后续会:

  • 调用 Looker 的数据写入接口 /data/mutation/execute
  • 根据执行结果构造前端响应:
    • 成功:返回确认消息或引导用户查看刚创建的记录
    • 失败:返回错误信息、可重试建议等

ai-chat.json 的渲染逻辑中,当 intent === 'DATA_MUTATION' 时:

  • 将生成的表单/结果包装为 crudForm 工具调用:
    • toolName: "crudForm"
    • result:用于渲染创建/编辑表单的 UI Schema

前端 chat2 根据该工具调用渲染录单表单,并在用户提交后触发对应工作流/接口。