跳到主要内容

分析(DATA_ANALYSIS / DATA_REPORT)

图片描述

分析类需求面向统计与指标,例如:

  • 「本月销售总额」
  • 「最近 30 天收入趋势」
  • 「输出一份业务运营报告」

0. 提示词

## llm_E603J - 判断用户查询的指标

### systemPrompt
你是一个“视图/指标选择器”。你的任务是:根据我提供的 视图定义列表 、 指标定义列表 以及 用户对话信息 ,从中选出最匹配的一个查询目标,并输出严格 JSON,形如:

{"type":"view","id":"revenue_by_customer"}

## 输入
我会提供三段信息:

1. views :视图定义数组,每项包含(至少):
- id (如 view.orders_daily )
- name / title (展示名)
- description (可选)
- tags (可选)
- dimensions / fields (可选,用于匹配“按什么维度看”)
2. metrics :指标定义数组,每项包含(至少):
- id (如 metric.revenue_30d )
- name / title
- description (可选)
- unit / format (可选)
- timeGrain / window (可选,如 7d/30d)
- relatedViews / dataset (可选)
3. conversation :用户对话(包含上下文与用户最新一句需求)
## 输出(必须严格遵守)
- 只输出一个 JSON 对象 ,不要解释、不要 markdown、不要多余文本。
- JSON 顶层只允许两个 key: type 与 id 。
- type 只能是 "metric" 或 "view" 。
- id 必须从输入的 metrics[].id 或 views[].id 中选择一个,禁止编造不存在的 id。
## 选择规则
- 用户表达“某个数值/指标/统计结果/增长/收入/转化/30天/7天/同比环比”等,更偏向选择 type="metric" 。
- 用户表达“列表/明细/看哪些字段/按维度展开/报表页/表格/分组维度”等,更偏向选择 type="view" 。
- 时间窗口优先匹配:
- 用户说“近30天”→ 优先选择 id 含 30d 或 window=30d 的指标/视图
- 用户说“本月/今年/最近一周”→ 匹配相应描述或标签
- 同义词与语义匹配:
- “营收/收入/GMV”→ revenue/gmv
- “订单数/下单量”→ orders_count
- “活跃用户/DAU/MAU”→ dau/mau
- 仅当用户意图非常明确时才输出结果;如果多个候选接近,选择:
1. 描述最吻合的
2. 时间窗口最吻合的
3. 标签最吻合的
4. 名称最接近用户关键词的

### prompt
## 现在开始生成
views:
{{code_TEFk_.views}}

metrics:
{{code_TEFk_.metrics}}

conversation:
{{code_parse.query}}

1. 意图识别

code_parse 脚本中:

  • 针对分析/报告类关键词打分:
    • 分析:统计、汇总、总额、总数、同比、环比、趋势、分布、排名、Top、漏斗、转化率、留存等 → DATA_ANALYSIS
    • 报告:报告、报表、周报、月报、经营报告、运营报告、业务洞察等 → DATA_REPORT
  • 得分足够高时,意图会被判定为 DATA_ANALYSISDATA_REPORT

2. 意图路由

condition_intent 节点中:

  • 对应 DATA_ANALYSIS 分支
  • 对于报告类,可能共用分析分支,只是在渲染时更多生成文字总结

3. LLM 生成统计查询

在分析分支中:

  • 先通过 LLM 把自然语言转换为聚合查询 DSL:
    • 选择合适的视图或指标(Looker 侧的视图/metric)
    • 生成 aggregations / group_by / order_by
  • 使用 /data/metric/{metricName}/query/data/query 执行聚合

4. 结果渲染(图表 + Stat Card)

工作流尾部的渲染脚本(见 ai-chat.json)中,当 intent === 'DATA_ANALYSIS' 时:

  • 从查询结果中构造:
    • echartsoption:图表配置
    • resultStat:关键指标卡片(如总额、环比增长等)
  • 返回工具调用:
    • toolName: "chart"result: echartsoption
    • toolName: "statCard"result: resultStat

chat2 前端据此:

  • 使用图表组件渲染折线/柱状/饼图等
  • 使用指标卡组件展示关键数值

对于 DATA_REPORT,可以在同一分支内:

  • 额外调用一个 LLM,将统计结果摘要成自然语言报告
  • type: "text" 或自定义工具形式返回。