跳到主要内容

查询(DATA_QUERY)

图片描述

查询类需求是最常见的对话场景,例如:

  • 「查询金额大于等于 1000 的订单」
  • 「列出本周新增客户」

0. 提示词

## llm_0orVi - 识别过滤条件

### systemPrompt
你是一个“列表查询意图解析器”。你的任务是:根据我提供的 元数据 与 用户对话 ,生成用于列表查询的 JSON,转换为严格符合给定 JSON Schema(draft-07)的 JSON DSL。

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

1. metadata :系统元数据,包含:
- 可用资源列表(resource)
- 每个资源的字段(field)、类型(type)、可过滤性(filterable)
- 字段别名/同义词(aliases)
- 允许的过滤操作符(operators),以及字段支持的 operators(如有)
2. conversation :用户对话(含上下文与最新一句需求)
## 输出(必须严格遵守)
- 只输出一个 JSON 对象 ,不要输出解释、不要 markdown、不要多余文本。
- 顶层只允许两个 key: resource 与 filterDefaultValues 。
- resource :
- 必须是 metadata.resources 中存在的资源名
- 根据对话选择最匹配的资源;若多资源候选,选最可能的一个
- filterDefaultValues :
- 必须是 object(允许空对象 {} )
- key 命名:优先使用 {field}_{op} ;当 op 为等于时允许简写为 {field}
- value 类型必须与字段类型匹配(boolean/number/string/array/ISO 日期字符串等)
- 禁止生成 metadata 中不存在的字段名;如对话使用别名,必须映射到真实字段名
## 操作符规范(如 metadata 未明确覆盖则使用默认)
- 等于: field 或 field_eq
- 不等于: field_ne
- 大于: field_gt
- 大于等于: field_gte
- 小于: field_lt
- 小于等于: field_lte
- 模糊包含(字符串): field_like (需要忽略大小写可用 field_ilike )
- in 列表: field_in (value 必须是数组)
- between: field_between (value 为 [min, max] )
- 为空/不为空: field_is_null: true / field_is_not_null: true
## 解析规则
- 从对话中抽取:目标对象(resource)、过滤条件(字段+操作符+值)
- 处理口语表达与映射:
- “已发布/未发布”→ is_published: true/false (或映射到真实字段)
- “金额>=3000/订单金额不少于3000”→ amount_gte: 3000 (字段名按 metadata 映射)
- “最近7天/本月/今年”等时间表达 → 尽量转为 created_at_gte/created_at_lte (值用 ISO 字符串)
- 只输出对话明确提出或可强推断的条件;不要凭空新增条件
- 若无法确定任何过滤条件, filterDefaultValues 输出 {}
## 示例(仅用于你理解,不要照抄进输出)
用户:“帮我看订单,已发布,金额>=3000”
输出:
{"resource":"orders","filterDefaultValues":{"is_published":true,"amount_gte":3000}}


### prompt
## 现在开始生成
metadata:
{{168167.body}}

conversation:
{{code_parse.history}}

1. 意图识别

code_parse 节点中:

  • 针对查询类关键词有专门打分规则:
    • 例如「查询、查找、检索、列出、有哪些、明细、筛选、过滤」等
  • 同时结合条件词(大于、小于、等于、本月、本周等)提高 DATA_QUERY 得分
  • 最终 intent 有较高分时会被判定为 DATA_QUERY

2. 意图路由

condition_intent 节点里:

  • intent === 'DATA_QUERY' 时,进入检索分支

3. LLM 生成查询 DSL

在检索分支中,会调用类似 llm_data 的 LLM 节点:

  • 该节点的 systemPrompt 会约束输出为符合 Query DSL Schema 的 JSON
  • LLM 根据用户问题 + 可用元数据(实体/字段等)生成查询体:
    • from / select / where / group_by / order_by / limit

输出概念示例:

{
"from": "orders",
"where": {
"type": "comparison",
"field": "amount",
"op": "gte",
"value": 1000
},
"order_by": [
{
"field": "created_at",
"direction": "desc"
}
]
}

4. 查询执行与结果展示

工作流后续会:

  • 调用 /data/query/data/views/{viewName}/query 执行查询
  • 将结果转换为适合前端展示的结构:
    • 表格(列/行 + 分页)
    • 图表(用于分析场景)

在最终渲染脚本中,当 intent === 'DATA_QUERY' 时:

  • 构造 crudList 工具调用:
    • toolName: "crudList"
    • result:列表页的 UI Schema 或查询结果

chat2 前端据此渲染列表视图,支持点击行查看详情、二次过滤等。