跳到主要内容

最佳实践:业务自助取数

OpenInsight 可以让 Agent 优先走语义层数据集回答业务问题:先对齐口径,再查数,最后在回答末尾用脚注标明来源、可信度与数据新鲜度。

对话:查环比变化

业务自助取数示例

问题: 帮我查一下某店铺 6 月商品销量比 5 月的环比变化。

Agent 思路:

  • 先读当前 project 的 datasets/*.md,匹配业务问题对应的数据集、粒度与指标字段。
  • 按数据集约定取数:同一月份仅取最新落盘数据,避免重复落盘干扰。
  • 给出结果表,并说明口径(汇总字段、过滤条件、时间窗口)。
  • 若两期覆盖范围不一致,补充可比口径结果,确认趋势是否一致。
  • 回答末尾附脚注:来源、可信度、审查轮次、数据新鲜度、归属。

使用原理

业务自助取数依赖两层约定一起工作:

  1. 数据分析 Skillopeninsight-data-analysis-skill):规定 Agent 遇到业务取数问题时必须怎么走。
  2. 权威数据集datasets/*.md):由分析师沉淀的语义口径,是 Agent 取数的强制默认路径。

只有语义层覆盖不了时,才允许回退到表元信息、看板或原始 SQL 探索,并在脚注中下调可信度。

数据分析 Skill

初始化项目后,模板会安装 openinsight-data-analysis-skill。当用户用自然语言查销量、环比、对比等业务数据时,Agent 应调用该 Skill,而不是直接拼 SQL。

Skill 要求的工作流:

  1. 定位项目路径:运行 openinsight current,读取 knowledge.domainknowledge.glossaryresources.datasets 等路径。
  2. 加载业务知识:读取业务域与术语表,对齐用户说法和指标含义。
  3. 加载权威数据集:读取 datasets/ 下除 example.md 外的全部 *.md
  4. 发现与细查:按问题关键词匹配数据集、字段、指标、来源表和使用限制;命中后读完整定义。
  5. 编译并运行:按数据集口径构造查询,通过 openinsight cluster query 执行。
  6. 回退:仅当数据集明确不覆盖需求、或无法从定义可靠构造 SQL 时,才读表 / 看板元信息或做原始探索。

不要因为“需要自定义日期过滤”“需要 JOIN”“用户提到了看板”就过早放弃语义层:先检查数据集是否已定义时间字段、来源关系与口径,再用看板验证呈现方式。

查询前还需对齐日期窗口与数据新鲜度:优先用数据集约定;没有约定时先查 max(date) 或等价分区,不要默认“昨天”。

权威数据集

权威数据集是本地维护的语义契约,存放于当前 project 的 datasets/<id>.md。文件名即数据集 id,正文用 Markdown 描述业务上下文、维度、关联表、注意事项与常见查询模式。

它解决的是“Agent 该按什么口径取数”:

  • 业务问题优先映射到数据集,而不是直接扫物理表。
  • 字段、粒度、过滤条件、适用 / 禁用场景以数据集为准。
  • 物理表只有被数据集引用时,才视为语义层来源表。

分析师维护数据集后,Agent 就能在取数时自动对齐口径;数据集未覆盖时再降级,并在回答脚注明示来源降级。

数据集示例

下面是一份脱敏后的市场行情权威数据集示例(已隐藏具体平台与真实表前缀),结构可直接复用到自己的 datasets/

# [市场行情域] 平台行情数据集

## 快速参考
### 业务上下文 — 本数据集存放电商平台市场大盘数据

## 维度
- **业务日期**:统计数据的日期,格式为 YYYY-MM-DD,如果是月份则 DD 为 01,例如 2026-06-01
- **dt**:数据落盘日期。注意一份数据可能会落盘多次,取最近一次落盘的日期
- **类目ID**:代表平台类目树中的叶子类目 ID

## 关联数据表
### market_brand_pool_monthly_du
- **粒度**:每行代表某个品牌 * 某个月的市场行情数据统计

### market_category_pool_monthly_du
- **粒度**:每行代表某个叶子类目 * 某个月的市场行情数据统计

### market_shop_pool_monthly_du
- **粒度**:每行代表某个店铺 * 某个月的市场行情数据统计

### market_product_pool_monthly_du
- **粒度**:每行代表某个商品 * 某个月的市场行情数据统计

### market_brand_pool_du
- **粒度**:每行代表某个品牌 * 某个月的市场行情数据统计

### market_category_pool_du
- **粒度**:每行代表某个叶子类目 * 某个月的市场行情数据统计

### market_shop_pool_du
- **粒度**:每行代表某个店铺 * 某个月的市场行情数据统计

### market_product_pool_du
- **粒度**:每行代表某个商品 * 某个月的市场行情数据统计

### market_metadata_du
- **粒度**:每行代表一个叶子类目
- **使用场景**:查询平台类目列表
- **注意**:忽略其中的 `validity_start_date` `validity_end_date` 字段,数据未启用
- **注意**:每天都是一份完整数据,只取最新日期的即可

## 注意事项
- 暂无

## 最佳实践 / 常见查询模式
- **类目ID** 在各表中字段名均为 `cate_id`,与 `market_metadata_du` 表中的 `leaf_category_id` 进行关联

## 交叉引用
- 暂无

维护建议:

  • 把“一行代表什么”、落盘去重规则、JOIN 键写清楚,Agent 才不会猜。
  • 同一业务日期多次落盘时,在数据集里约定“只取最新 dt”。
  • 不适用场景也要写出来,避免 Agent 误用后仍标高可信度。

回答脚注

每个取数回答都应带脚注,方便业务方判断“能不能直接用”。常见字段:

脚注字段含义
来源结果依据哪类知识:语义层数据集、语义层来源表、非语义层表元信息、看板/图表元信息、原始探索。
可信度高 / 中 / 低,由来源类型与口径确定性共同决定。
已审查是否完成对抗性 SQL 审查,以及审查轮次。
数据新鲜度所用数据的最新业务日期或最新落盘时间;未知时明确写未知。
归属数据集或表的负责人 / 团队;未知时写 unknown。

来源与可信度

来源典型场景可信度建议
语义层数据集严格按 datasets/*.md 中的字段、指标、过滤条件和使用限制取数。
语义层来源表SQL 用到的物理表出现在相关数据集的来源表 / 关联表中,但仍需自行拼口径。中~高(口径明确可为高)
看板 / 图表元信息复现或解释看板数字,口径来自仪表盘 / 图表定义。中~高(与数据集冲突时先对齐)
非语义层表元信息表只在本地表元信息中存在,未被数据集引用。中及以下;须注明“未在语义层定义”
原始探索靠表名、字段名或样本临时摸索,缺少语义层 / 看板 / 业务文档支撑。低~中

可信度下调场景

场景处理方式可信度
两期覆盖范围不一致(如类目数不同)同时给出全量与可比子集结果,说明差异。口径说明清楚时可保持
数据集未覆盖该问题回退到表元信息或看板,并标明来源降级。通常
文档过期、枚举未知、字段需猜测先用小样本 / 最大分区验证,再回答。
使用了未被数据集引用的物理表明确写出未定义;除非用户确认口径,否则不得标高。不得高于
业务上下文缺失(术语 / 域知识为空)可继续取数,但在回答中标注上下文缺失。视口径确定性降为
数据新鲜度未知脚注写“未知”,不要默认“昨天”。视情况降为

脚注示例:

来源:语义层数据集(店铺月度数据集) · 可信度:高 · 已审查:SQL 审查 ✓,第 2 轮 · 数据新鲜度:该店 6 月数据最新落盘于 2026-07-11 · 归属:数据负责人

适用场景

  • 业务方用自然语言查销量、环比、对比等常规指标。
  • 需要把结果口径、新鲜度、可信度一并交代清楚。
  • 语义层能覆盖时优先走数据集;覆盖不了时再降级到表 / 看板 / 探索,并下调可信度。