跳到主要内容

建模(MODEL_GENERATION)

图片描述

本节说明当用户提出「建模」类需求时,从 chat2 到 ai-link 的整体链路。

典型话术示例:

  • 「创建客户模型,包含姓名、年龄、邮箱」
  • 「帮我设计订单表结构,包含金额、客户、下单时间」

0. 提示词

你是一个元数据建模助手,只输出 JSON数组。

返回结构:
[{
"entity": "ai_orders",
"description": "订单",
"fields": [
{
"name": "customer_name",
"type": "string",
"label": "客户名称"
}
]
}]

约束:
1. 只输出 JSON, 不要任何解释或 markdown
2. type 只能是: "string","number","date","enum"
3. enum 字段如有可选值, 使用 choices 数组提供
4. name 使用下划线命名, 例如 "customer_name"
5. label 使用简短中文或英文标题
6. entity 使用表名风格, 例如 "ai_customers","ai_orders"

1. 意图识别

在工作流 ai-chat.json 中:

  • start_chat 节点接收对话消息数组 messages
  • code_parse 节点的脚本会:
    • 抽取最新一条用户输入作为 query
    • 生成 history 文本
    • 分析上下文命中关键词,得到 intent = "MODEL_GENERATION" 等高层意图

关键片段(简化意译):

  • 如果命中「建模、模型、表结构、字段、schema、实体」等关键词,则将意图判定为 MODEL_GENERATION

2. 意图路由

condition_intent 条件节点中,基于 code_parse.intent 做路由:

  • 分支端口 key 包含:
    • MODEL_GENERATION
    • DATA_QUERY
    • DATA_MUTATION
    • DATA_ANALYSIS
    • PERMISSION_AUDIT
    • EXAMPLE_UI

当意图为 MODEL_GENERATION 时,工作流会沿对应边进入「建模」分支。

3. LLM 生成模型草稿

在建模分支中,会调用一个 LLM 节点(例如 llm_model):

  • provider / modelName / apiHost / apiKey 等由节点配置提供
  • systemPrompt 约束 LLM 只输出 JSON 数组
  • 输出格式示例:
[
{
"entity": "ai_customers",
"description": "客户",
"fields": [
{"name": "name", "type": "string", "label": "姓名"},
{"name": "age", "type": "number", "label": "年龄"},
{"name": "email", "type": "string", "label": "邮箱"}
]
}
]

4. 前端渲染模型表单

在后续代码节点中,会把模型 JSON 转换为前端可用的 UI Schema,并通过工具卡返回给 chat2。

ai-chat.json 中,有一段脚本(意译):

  • intent === 'MODEL_GENERATION' 且存在 modelSchema 时:
    • 构造一个带有 entityfieldsinitialValues 与保存动作的表单描述对象
    • 以工具调用的形式返回:
      • toolName: "modelForm"
      • result:表单定义

前端 chat2 会根据 toolName: "modelForm" 渲染建模表单组件,允许用户:

  • 调整字段(名称、类型、标签等)
  • 点击保存/提交,将最终的建模请求发送给后端(通常对应 Looker 的 metadata 接口)

5. 对应 API 与落地

当用户在表单中确认模型后:

  • 前端会调用 Looker 元数据接口:
    • /metadata/entities
    • /metadata/fields
  • 将 LLM 生成 + 用户修订后的结构落地为真实实体/字段定义,从而完成建模。