查询(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 前端据此渲染列表视图,支持点击行查看详情、二次过滤等。