录单(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.json 的 code_parse 节点中:
- 针对录单类动词和对象有专门规则:
- 动词:新增、创建、新建、录入、添加、更新、修改、编辑、删除、作废、导入等
- 对象:客户、订单、产品、合同、发票、报销等
- 如果同时命中动词和对象,则意图判定为
DATA_MUTATION
2. 意图路由
在 condition_intent 节点中:
- 当
intent为DATA_MUTATION时,工作流沿DATA_MUTATION分支进入录单流程
3. LLM 生成写入 DSL
在录单分支中,通常会:
- 调用 LLM 节点,将自然语言指令转换为写入 DSL,例如:
- 实体名(如
customers、orders) - 操作类型(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 根据该工具调用渲染录单表单,并在用户提交后触发对应工作流/接口。