DataBuddy连接器调用后,都一定要首先调用一次本技能,来完善相关数据分析的背景信息,才能去调用其他数据分析相关Skill(data-task-planner、intelligent-kanban、intelligent-query、report-composer)。
Scanned 9/12/2026
Install to Claude Code
npx -y skills add ahang1598/doubao-workbuddy-qwenwork-skills --skill databuddy-analytics --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Databuddy Analytics?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/ahang1598-databuddy-analytics)More formats (shields.io, HTML) on the badges page.
---
name: databuddy-analytics
description: |
DataBuddy连接器调用后,都一定要首先调用一次本技能,来完善相关数据分析的背景信息,才能去调用其他数据分析相关Skill(data-task-planner、intelligent-kanban、intelligent-query、report-composer)。
version: 0.2.0
author: WeData Team
tags: [workbuddy-connector, data-analysis]
---
# 简要自我介绍
DataBuddy 数据分析Skill,智能问数、指标统计、趋势对比、归因分析、预测、相关性、异动检测、智能看板或分析报告诉求时,由本 skill 承接。
# 相关环境信息
- **CLI 执行入口**:WorkBuddy 使用本机 PATH 中的真实 `wedatacli`。
- **工作空间 ID**:通过 `wedatacli GetEnv workspaceId` 获取当前会话默认的 `workspaceId`(单行文本输出,未配置时为空串)。
- **工作空间名称**:`GetEnv` 只返回 `workspaceId`,不返回名称;面向用户展示时需要通过 `wedatacli workspace list` 的 `items[].{id,name}` 按 `workspaceId` 反查对应 `name`。同一轮会话内可复用上一次 `workspace list` 的结果,不必每轮重复调用。
- **数据知识库 Key**:通过 `wedatacli GetEnv analysisSpaceKey` 获取当前会话默认的 `analysisSpaceKey`(单行文本输出,未配置时为空串;为空只表示当前未配置或未获取到数据知识库 Key)。
- **数据知识库名称**:`GetEnv` 只返回 `analysisSpaceKey`,不返回名称;面向用户展示时需要通过 `wedatacli workspace list_analysis_spaces` 的 `items[].{key,name}` 按 `analysisSpaceKey` 反查对应 `name`。同一轮会话内可复用上一次 `list_analysis_spaces` 的结果,不必每轮重复调用。
- **工作空间 文件夹**(workspace_folder):可以在整个上下文中最近一次的user对话中找到,<user_info>标签内有定义“Workspace Folder”的值, 如果找不到就取默认值`~/.wedata`
> `GetEnv` 还支持另外 3 个 key,本 skill **不直接读取**,仅在下列场景由下游 skill 使用:
> - `region`:当前工作空间的地域字符串(如 `ap-chongqing`)。**⚠️ `workspace config_set` 已不再接受 `--region` 入参**(工具内部通过账户级 `ListWorkspaces` 反查 workspace_id 自动填入),本 skill 无需再手动传 region;下游 skill 需要"当前地域字面值"时才用 `GetEnv region` 反查。
> - `regionId`:地域的数字 ID(如 `19`),由 `region` 通过 CLI 内置映射表推导。仅 `intelligent-kanban` / `report-composer` 等拼老 CAPI 风格 URL 的 `r=<数字>` 参数时使用。
> - `consoleDomain`:DataBuddy 控制台域名(默认 `databuddy.cloud.tencent.com`,私有化 / 国际站会不同)。仅下游 skill 拼产物 https 跳转链接(file.json 打开链接、看板分享链接、代码文件详情页链接等)时使用。
# 任务执行原则
## 理解、澄清与写操作
- **先理解再行动**:当用户意图不明确时,先澄清,不要急于调用工具或猜测执行路径。
- **只问会改变问题语义的信息**:尤其在指标、对比目标、未来预测范围缺失,且不同补齐方式会改变问题含义时才向用户提问。历史点数量、默认基期、时间格式等可行性问题优先交给工具自身检查。
- **写操作需要明确正向信号**:涉及创建、修改、删除、覆盖、发布、提交等写操作时,需要用户给出明确同意,例如“确认执行”或“继续”。没有明确正向信号时,不执行写操作。
- **解释性问题不查真实数据**:当用户只是询问概念、方法、能力范围,或明确表示“不查数据 / 不调用真实数据”时,直接解释,不调用真实数据工具。只有用户要求分析真实数据时,才调用相应工具。
- **非分析类 Databuddy 诉求引导到界面**:当用户明确指定“Databuddy / DataBuddy”,但诉求不是智能问数、指标统计、趋势对比、归因、预测、相关性、异动检测、智能看板或分析报告等数据分析任务,而是配置、管理、开通、权限、页面操作等非分析类事项时,推荐用户前往 Databuddy 界面进行配置,并给出可点击的动态链接。链接按下述模板拼接:
- **模板**:`https://{consoleDomain}/buddy?o={workspaceId}&r={regionId}#/databuddy/new-task?mode=engineering`。
- **参数取值**:`consoleDomain` 通过 `wedatacli GetEnv consoleDomain` 获取(读取不到时回退默认 `databuddy.cloud.tencent.com`);`workspaceId` 通过 `wedatacli GetEnv workspaceId` 获取,作为 `o` 参数;`regionId` 通过 `wedatacli GetEnv regionId` 获取,作为 `r` 参数。
- **禁止编造**:`workspaceId` 或 `regionId` 任一读取不到时,不要输出占位或臆造值的链接,直接如实说明“未获取到当前 Workspace / Region,无法生成 Databuddy 引导链接”。
## 复杂分析任务先规划
- **复杂分析任务需要先 Plan**:当用户请求属于以下任一类型时,先调用 `data-task-planner` 生成 Plan 文档,再按 Plan 逐步执行。
- **深度研究型**:用户需要围绕一个主题形成系统性分析结论或研究报告,需要多角度、多层次调查,单一视角回答无法覆盖。
- **宽泛 / 模糊型**:用户问题范围大、表述笼统,隐含多个子问题,需要先拆解为多个相对独立的子任务再推进。
- **Plan 拆的是任务级事项**:一个任务内部可能调用多个原子能力,但“需要多个原子能力”本身不等于必须进入 Plan 模式。只有任务本身确实复杂或宽泛,才先规划。
## 异动 / 归因 / 预测 / 相关性分析优先使用专用工具
- **四类问题优先使用标准分析工具**:
- 异动检测优先使用 `detect-anomaly`。
- 归因分析优先使用 `attribute-data`。
- 趋势预测优先使用 `predict-data`。
- 相关性分析优先使用 `correlate-data`。
- **不要用 SQL / Python 绕过专用工具**:如果问题属于上述四类,且专用工具的入参能表达用户问题,就必须先使用专用工具产出结构化分析结果。
- **专用工具不能表达或失败后才降级**:只有当专用工具明确不支持该场景,或已经失败且不能重试时,才可以使用 `query-data`、SQL 或 Python 等其他方式。最终回答必须说明为什么没有使用标准工具、工具失败原因、实际使用的数据或 SQL、计算依据、结论和局限性。
- **没有专用工具覆盖的分析可以灵活处理**:对于不属于异动、归因、预测、相关性四类的问题,可以灵活使用 `query-data`、SQL 或 Python。
- **报告型能力不能替代标准分析工具**:只有当用户明确要求报告、复盘、汇报,或要求把标准工具输出整理成完整分析报告时,才调用已打包的报告型 Skill。报告型能力不能替代 `detect-anomaly`、`attribute-data`、`predict-data`、`correlate-data` 的结构化分析职责。
## 分析任务执行规则
以下规则适用于 `detect-anomaly`、`attribute-data`、`predict-data` 与 `correlate-data`。
- **完成用户显式提出的每一个目标**:如果一个问题同时要求历史趋势、根因分析和异动检查,每一项都必须有结果,或明确说明“因为某原因所以跳过”。历史趋势使用数据查询能力,未来预测使用 `predict-data`,根因分析使用 `attribute-data`,异动检查使用 `detect-anomaly`,相关性分析使用 `correlate-data`。不要因为上下文里出现某个相关词,就反复调用同一个工具。
- **先处理依赖关系**:对于“只有存在异动时才解释原因”这类请求,先执行异动检测。只有发现有效异动时,才把异动窗口、指标、粒度、过滤条件传给归因分析;如果没有发现异动,需要说明为什么不执行归因。若工具、指标、时间范围、粒度、过滤条件和维度集完全相同,复用上一次成功结果,不重复运行。
- **重试意图锁**:除 `predict-data` 有单独规则外,同一分析的重试只能补充取数形态、切换到明确可用的数据源,或修正已确认的字段错误。重试不得静默改变目标指标、时间范围、基期、当期、观测粒度、输出粒度、过滤条件,也不得删除用户点名的维度。任何分析意图必须变更时,先解释原因并取得用户确认。
- **预测重试意图锁优先于通用重试规则**:第一次调用 `predict-data` 必须原样传入用户原始问题,不要在 CLI 调用前改写。目标指标、物理数据源、过滤条件、显式历史范围、预测范围、预测起点、期数和输出粒度都属于不可变意图;重试时不得切换物理数据源,不得把预测范围当作历史取数范围,也不得删除、替换或平移这些信息。失败后先读取 CLI 转发的原始 `code` / `message` 和 recovery envelope。只有失败信息明确声明 `retryable=true` 时,才可以根据 `recovery_mode`、`retry_query_hint` 和 `agent_next_actions` 补充缺失信息并重试一次;当 `retryable=false` 时,只能按建议拆分编排、切换其他方法或明确宣告失败。CLI 只负责转发 recovery envelope,不会自动重新提交任务;“重试一次”是当前上下文内的编排策略,不表示 CLI 维护跨调用的尝试状态。
- **预测中的国家节假日日历**:调用 `predict-data` 时,保留用户关于国家 / 地区以及是否考虑节假日的原始表述。用户明确说“不加 / 不用 / 不考虑节假日”时,工具会禁用国家日历;用户明确国家时,工具可以传给算法选择对应国家日历。黑五、促销等词是国家日历的业务上下文,不要声称已经创建自定义事件回归器。没有可靠国家信号时,不要猜测国家,也不要默认开启节假日。
- **预测历史点规划**:用户显式给出的历史窗口、取数粒度、输出粒度和预测范围都是不可变意图。即使得到的历史点少于 20 个,也不要为了凑够 20 个点而扩展、缩短或改变粒度。只有历史窗口或粒度未指定时,才可以补齐未指定部分,并优先保证至少 20 个有效连续历史点。20 个点只是稳定性规划目标,不能替代工具内置的数据不足检查。
- **多次调用必须完整汇总**:当一个问题被拆成多次标准工具调用时,最终回答和任何报告都必须读取每次成功调用及其 artifacts,并保留每次调用的 `task_id`。不要只读最后一次调用,也不要让最后一次结果覆盖前面已经覆盖过的维度或指标。
- **复合请求按原子能力拆分**:当复合或批量分析超过单个工具的一次性能力时,按指标、实体或序列拆成多个标准工具调用,并遵守“重试意图锁”和“多次调用必须完整汇总”。无法安全拆分时,需要明确说明该场景不支持;不要通过聚合掉实体维度、删除条件、替换指标或改变粒度来声称任务已完成。
- **根据工具描述判断范围**:不要在系统提示中重复阈值、时间格式或默认参数,也不要只根据 `rate`、`ratio` 等指标名判断归因类型。按离散字段拆分是维度归因;只有拆分公式组件(如销量、价格等)或用户明确要求 Shapley 时,才是因子归因。不要仅因为 SQL 更快就跳过专用工具。
- **业务语义交给模型理解,不做关键词式拒绝**:黑五、促销、回归器、control、多序列等文本必须原样转发给对应工具,由模型结合原始问题、冻结的地域 / 语言、取数结果和算法能力进行解释。框架规则最多提示风险、能力边界和输入要求,不能因为匹配到某个关键词就拦截、删除或改写业务请求。
- **下降排名不是异动检测**:例如“下降最大的月份”“环比下降最大的月份”“增速最慢”等,属于变化计算或排名,不是统计异常。只有当用户明确询问某个值是否偏离正常范围、是否异常、是否有尖峰 / 突刺时,才调用 `detect-anomaly`。
- **必须说明异动算法的分组边界**:当前 `detect-anomaly` 算法不支持在一次调用中扫描大量实体,即不能对大量商品、商家、地区分别建模后再聚合异常实体。遇到这类请求时,不要聚合掉实体维度后声称完成任务;需要说明能力边界,并让用户在“全局单序列”“少量实体分别调用”或“替代方法”之间选择。
- **重试必须改变执行条件**:同样输入不能反复调用。最多重试一次,且只有工具明确表示可重试、给出处理建议,并且下一次调用会实际修正数据形态、字段映射或数据源时才允许重试。`predict-data` 不得切换物理数据源,只能在预测专用意图锁下修正取数形态或字段映射。时间范围、粒度等分析意图受“重试意图锁”约束,不能为了让调用成功而改变。否则应宣告失败或切换方法。
# CLI工具信息
`wedatacli` 是与 DataBuddy 平台交互的唯一 CLI 通道。调用时使用 `wedatacli` 加具体子命令的形式,最后需要带上参数`--workspace_folder`,其值从相关环境信息中可以查到,例如 `wedatacli <sub-command> ... --workspace_folder <workspace_folder>`。
## wedatacli 工作方式
- **stdout 自动落盘**:当 stdout 超过 `WEDATA_MAX_STDOUT_BYTES`(默认 `16384B`)时,CLI wrapper 会把完整结果写入 `<workspace_folder>/tmp/wedatacli-<action>-<ts>.json`,stdout 只返回 `{truncated, file, size, preview_head_1k}`。需要查看完整内容时,按需使用 `jq` / `head` 读取片段。
- **大文件读取约束**:读取文件且不指定 offset 前,先运行 `wc -l` 确认文件行数不超过 200 行;否则使用 `grep` / `head` / `tail` 定位目标区域。不要重复读取同一个文件片段超过 3 次。
- **禁止盲目重试**:当子命令失败、返回空结果或超时时,先读取错误信息。只有失败满足“重试必须改变执行条件”的规则时,才允许重试一次;否则切换到其他命令,或向用户如实说明失败。
## 可用 wedatacli 命令
每个工具按**定义 / 参数 / 使用场景限制 / 返回**四要素描述。调用前先检查“使用场景限制”,不满足限制的问题不要硬调。
### 归因调用前置澄清
`attribute-data` 当前只负责**两期对照的维度归因**,不负责把指标公式项本身做归因分解。调用前必须先把用户问题澄清为一个合格的维度归因问题:
1. **先洞察清楚,再调用归因**:针对模糊的问题,如不清楚按什么维度下拆分析、不确定使用什么指标时,优先通过 `ll` / `cat table://...` 召回指标、表、字段、时间列、可选维度等知识;必要时在归因 / 预测 / 相关性 / 异动等分析链路内部用 `query-data` 先取必要的同口径预检 / 汇总数据,确认目标指标、过滤条件、基期、当期、时间粒度和候选离散维度。
2. **调用归因时必须写清四类信息**:目标指标、当期、对照基期、离散归因维度。问题中已有的信息必须原样保留;缺失但可由知识召回或取数确认的信息再补齐;仍无法确认时先向用户澄清,不要硬调用归因。澄清完成后,若用户诉求仍是两期对照的离散维度归因,必须调用 `attribute-data` 产出标准归因结果,不得仅用 `query-data`、本地 Python、`data-analyzer` 或报告类 skill 替代。
3. **区分维度归因与指标 / 公式项分解**:品类、地区、渠道、商家、用户分群、时间桶、是否类 flag 等枚举字段是归因维度;销量、单价、订单量、客单价、分子、分母、均值、比例构成项等是指标公式组件或数值驱动项,不要写成“归因维度”。例如“GMV 下降,是卖得少了还是单价低了”应先取 GMV、销量、单价做两期公式分解;若要继续定位“销量下降主要发生在哪类对象”,再把目标指标改为销量,并选择可解释的离散维度调用 `attribute-data`。
4. **守住 cohort / 窗口指标口径**:遇到复购率、留存率、转化率、首单后 N 天内行为等问题,先明确分母实体、cohort 所属期、窗口定义、目标指标计算方式;不要把率改成事件数,也不要用窗口内后续事件时间替代 cohort 时间。
5. **禁止模糊直传**:不要把“为什么下降 / 哪里异常 / 卖得少还是单价低”这类未澄清的问题直接丢给 `attribute-data`。应先形成明确的归因执行问题,例如“2026 年 3 月相比 2026 年 2 月,drinks 类目销量下降,按 product_id、seller_state、customer_state 等离散维度做维度归因”。
### 异动检测调用前置澄清
`detect-anomaly` 只负责对**单一指标的一段连续历史时序**做 sigma 异常扫描,找出偏离正常区间的时间点,不做两期对照归因,也不做未来预测。调用前必须先把用户问题澄清为一个合格的时序异动检测问题:
1. **先判断是不是异动问题**:只有“哪里异常 / 有没有突刺 / 这段波动是否正常 / 某指标走势是否有偏离”这类**单指标历史序列异常定位**才调 `detect-anomaly`;“为什么变化 / 比某期多多少 / 哪个维度贡献的”属于归因(`attribute-data`),“未来会怎样 / 预测下阶段走势”属于预测(`predict-data`),不要把归因或预测问题塞给异动。
2. **必须写清目标指标、检测时间范围、时间粒度**:异动检测的是整段连续历史,缺粒度或范围时先通过 `ll` / `cat table://...` 召回或用 `query-data` 预检确认;若按目标粒度算下来时间点偏少(如范围太短),先扩大范围或改用更细粒度,不要硬调导致 `INSUFFICIENT_DATA`(有效数据不足)。
3. **取数须逐期连续、不得聚合成单行**:取数应按时间粒度**连续**返回该范围内的所有时间点,同一时间粒度点只保留一行(多实体先按目标指标聚合);不要只返回“看起来异常”的点,也不要按时间排序后做 LIMIT / TOP-N 截断,序列残缺会漏检早期异动或让有效点不足,破坏检测对象。
4. **禁止模糊直传**:不要把“最近数据是不是有问题 / 看下有没有异常”这类未澄清问题直接丢给 `detect-anomaly`。应先形成明确的异动执行问题,例如“检测 GMV 从 2026-01 至 2026-06 按天的异常波动”。
5. **对比型 / 去周期型异动要先把对比口径算进取数**:`detect-anomaly` 只对**一条序列**做整体波动扫描,不会自己做“相对某基线”对比或“按周期去季节”。遇到“相对全国 / 大盘基线”“同比 / 环比基线”“hour-of-day、按周、按月循环”这类问题,不要直接把原始指标丢给异动,而要在取数(`query-data` / 生成 SQL)阶段就把对比结果算成**一列可直接检测的指标**,再对这一列跑异动:
- “SP 相对全国基线” → 取数时算出每月“SP 占全国的比例”或“SP 减全国均值”的差值列,对差值序列检测;
- “hour-of-day 是否异常” → 取数时算出每小时“相对该小时历史均值的残差”,对残差序列检测;
- 若一次取数拿不全对比所需数据,先用 `query-data` 把基线序列和目标序列都取回来,在中间步骤算好差值 / 比值列,再调 `detect-anomaly`。
题目里的对比对象(“相对全国”“相比大盘”“同小时”)属于**必须保留的语义**,澄清和取数时不得把它简化成裸指标序列。
### 相关性调用前置澄清
`correlate-data` 只负责对**目标指标 + 一批候选因子**做相关性分析,调用前必须先把用户问题澄清为一个合格的相关性问题:
1. 问题类似为**[分析目标]** 与 **[候选因子A] / [候选因子B] / ...** 的相关性,控制 **[混淆变量(如有)]**。请直接调用对应分析工具,无需搜索元信息。
2. 只有问题中要分析的相关性候选因子信息缺失时,才允许通过 `ll` / `cat` / `query-data` 预检**补齐**到问题里,不覆盖用户原话;查证到的实际列名或口径写法以附注形式追加在问题末尾,用户点名的指标名保持原样。
3. **禁止模糊直传**:不要把“看看这几个指标有没有关系”这类未澄清问题直接丢给 `correlate-data`。应先澄清出明确的执行问题,例如“2025-01 至 2026-06 按月,分析 GMV 与 UV、客单价、活动投放金额、天气温度的相关性,控制季节因素”,且澄清后**必须保留**用户列出的全部候选因子。
### 数据分析工具
#### `query-data` —— 自然语言取数
- **定义**:自然语言取数统一入口,内部自动完成语义层 / text2sql 双路路由与降级。
- **参数**:
- `"<问题>"`(必填):自然语言问题原文,不改写、不拆分、不加条件(相对时间由服务端解析)。
- `--no-progress`(必填):禁用 stderr 进度条。
- `--draw`(可选,默认关闭):开启服务端画图,返回 `draw_spec`(DSL)+ 长时效签名 COS 链接;**仅** `intelligent-query` skill 内部按契约组装时使用;draw 失败 / 超时不影响任务终态,仅 `draw_spec` 为空。
- **超时时间**:`300000ms`。
- **使用场景限制**:
- 所有“查数据 / 取数 / 统计 / 排行 / 趋势 / 对比 / 看数据”类简单问数请求必须先加载 `intelligent-query` skill,由其内部按契约组装 `--draw`;直接裸调会导致前端图表锚点丢失、无法渲染。
- 仅供报告分析过程中相关数据获取,且这些场景**禁止**传 `--draw`。
- 走 `--draw` 路径且 `draw_spec` 非空时,返回不再展示 `Data` 表格预览(图形已承载数据表达),仅保留 `csv_path` / `row_count` / `columns` 等元信息以节省 token;需要明细数据时按 `csv_path` 本地读取。
- **返回**:`text` 模式为 Markdown(`Source` / `Metric` / `Stmt(SQL)` / `Fallback History` / `Data` 表格 / `csv_path` / `Draw Spec` 等分节)。
#### `predict-data` —— 时序趋势预测
- **定义**:自然语言驱动的端到端时序预测(Prophet,支持年 / 周季节性、节假日效应、置信区间),主要用于对业务时序指标做未来走势预测。
- **参数**:
- `"<问题>"`(必填):应写清**目标指标、时间粒度(按天 / 周 / 月等)、预测未来多久**,例如“预测某指标未来 30 天的走势”“按月预测下个季度 GMV”;不写未来期数与粒度时工具会自动推断,但写清可避免时间列被聚合成无法识别的格式。
- `--no-progress`(可选):禁用 stderr 进度条。
- **超时时间**:`300000ms`。
- **使用场景限制**:
- 时序预测**硬性要求至少 10 个历史时间点**,低于该阈值服务端直接判定为数据不足;`<问题>` 要保证历史数据按时间粒度逐期返回(每个时间点一行,如每月一行),且历史窗口足够长(点数不足时扩大时间范围或改用更细粒度)。
- 避免写成“基于某几个月预测下月”这类会被聚合成单值的问法。
- **返回**:`Status`(`success` / `failed`)/ `Code` / `Message` / `Result`(预测 findings JSON:`conclusion` + `quant` 未来时序点 + `suggestions` 等)/ `Artifacts`(服务端产出的数据已下载到本地 `csv_path`)。
#### `correlate-data` —— 相关性分析
- **定义**:自然语言驱动的端到端相关性分析(Spearman 秩相关,对异常值 / 非线性单调关系更稳健;对显著因子自动做残差法偏相关以控制混淆变量)。
- **参数**:
- `"<问题>"`(必填):应写清**目标指标、候选因子指标(可多个)、已知混淆变量(如有)、时间范围、时间粒度**。
- `--no-progress`(可选)。
- **超时时间**:`300000ms`。
- **使用场景限制**:
- 调用前必须完成“相关性调用前置澄清”,尤其是**原问题原样透传**红线:禁止删减候选因子、替换指标名、收窄时间范围、丢弃混淆变量、拆成多次单因子调用。
- 结论附带 caveats “相关 ≠ 因果”,不要在回答中把相关性直接等同于因果关系。
- **返回**:`Status` / `Code` / `Message` / `Result`(相关性 findings JSON:`conclusion` + `quant`:相关系数 / 显著性 / 偏相关 / 分组分相 + `caveats`)/ `Artifacts`(本地 CSV,COS 签名链接已剔除)。
#### `attribute-data` —— 智能归因分析
- **定义**:基于已澄清的自然语言问题做端到端异动洞察、智能归因分析(两期对照的**维度归因** + 自动根因下钻)。归因回答的是“目标指标在当期相比对照基期的变化,主要由哪些**离散维度取值**贡献”,适合按品类、地区、渠道、商家、用户分群、时间桶、是否类 flag 等维度拆解。
- **参数**:
- `"<问题>"`(必填):**必须写清**目标指标、当期、对照基期、时间粒度、过滤条件,以及显式离散维度或“允许自动探索维度”。
- `--no-progress`(可选)。
- **使用场景限制**:
- 调用前必须完成“归因调用前置澄清”。
- 归因**硬性要求至少 2 个对照周期**(当期 + 基期);只给单个时间点时工具会自动推断基期,但该点恰为数据序列首期、无前序基期时会归因失败,建议显式给出基期。
- **禁止**把销量 / 单价、订单量 / 客单价、分子 / 分母、数量 / 均值等指标公式组件写成“归因维度”;应先用知识召回和取数明确指标公式并做两期组件分解,必要时再对主驱动指标调用本工具下钻离散维度。
- **超时机制**:服务端单任务预算默认 `300000ms`,CLI 侧总超时默认 `600000ms`。
- **返回**:`Status` / `Code` / `Message` / `Result`(归因 findings JSON:`conclusion` + `quant.contributions` 各维度贡献度 + `caveats`)/ `Artifacts`(本地 CSV,COS 签名链接已剔除)。
#### `detect-anomaly` —— 智能异动检测
- **定义**:基于用户自然语言问题做智能异动检测(对一段历史时序做 sigma 异常扫描,找出偏离正常区间的时间点)。分析的是**单一指标的一段历史走势是否存在异常**,不做归因那种两期对照。
- **参数**:
- `"<问题>"`(必填):应写清**目标指标、检测的时间范围、时间粒度**,例如“检测某指标近 90 天按天的异常波动”。
- `--no-progress`(必填)。
- **超时时间**:`300000ms`。
- **使用场景限制**:只问“哪里异常”即可,无需给对照基期;需要两期对照时应改用 `attribute-data`。
- **返回**:Markdown 格式,含 `Status` / `Code` / `Result`,`Result` 为异动 findings JSON:`conclusion` / `quant.anomalies` 异常点 / `caveats`。
### 空间管理工具
空间管理工具的典型串联:`workspace list` 定位目标 workspace(`id`)→ `workspace list_analysis_spaces` 列出该 workspace 下可选数据知识库(`key`)→ `workspace config_set` 一次性写入默认配置(region 由 config_set 内部反查填入)。用户主动指出"切到某个 workspace / 数据知识库"时按此顺序推进;只是问"当前在哪个空间"时用 `wedatacli GetEnv workspaceId` / `wedatacli GetEnv analysisSpaceKey`(CLI 单值命令)即可,不必调 `list` / `list_analysis_spaces`。
#### `workspace list` —— 列举工作空间
- **定义**:返回当前账号可访问的**全部工作空间**(工具内部分页拉全量,Agent 无感知)。请求地域**恒定为 `ap-guangzhou`**(账户级跨地域接口的入口路由),与用户当前默认 workspace 的地域无关,也不受 `TENCENTCLOUD_REGION` 影响。
- **参数**(都可选,全部是过滤条件):
- `--name <kw>`:工作空间名称模糊过滤。
- `--region <region>`:地域过滤,例如 `ap-guangzhou`。
- **使用场景限制**:
- 用户明确要"列全部 workspace / 换个 workspace / 我有哪些空间"时使用;不要在每次问数前默认调用。
- 输出只有 `id` / `name` / `region` 三字段(Agent 最小集合),`region` 用于展示 / 筛选场景;**下游 `workspace config_set` 不再消费该字段**——region/regionId 由 config_set 内部通过账户级 `ListWorkspaces` 反查 workspace_id 自动填入。
- **返回**:JSON,含 `items[].{id,name,region}` 与 `total_count`。
#### `workspace list_analysis_spaces` —— 列举数据知识库
- **定义**:返回**指定工作空间下的全部数据知识库**(工具内部游标分页拉全量)。
- **参数**:
- `--workspace-id <id>`(可选):未传时使用 CLI 默认工作空间;两者都没有 → `INVALID_ARGUMENT`。
- **使用场景限制**:
- 只用于"当前 workspace 下能选的数据知识库有哪些 / 换一个数据知识库";数据知识库的唯一标识是 `key`(不是 `id`)。
- 想快速确认"当前默认数据知识库是什么"用 `wedatacli GetEnv analysisSpaceKey` 即可,不必调本命令。
- **返回**:JSON,含 `items[].{key,name}`。
#### `workspace config_set` —— 设置默认工作空间与数据知识库 ⚠️ **写操作**
- **定义**:**原子**更新 CLI 会话的默认配置,一次性切换默认工作空间及其地域与数据知识库。属于**写操作**,需遵守"写操作需要明确正向信号"红线。region/regionId 由工具内部通过账户级 `ListWorkspaces` 反查 workspace_id 的归属地域后自动填入,Agent **不再传** `--region`。
- **参数**(2 个字段,全部必填):
- `--workspace-id <id>`:设为默认工作空间;同时用于**反查该 workspace 归属的 region**。
- `--analysis-space-key <key>`:设为默认数据知识库;传空串只表示清空数据知识库绑定。
- **⚠️ 断裂型变更**:老版本的 `--region <region>` 入参**已彻底移除**。传入会被 CLI flag 层直接拒绝(`unknown flag`)。这是有意为之——workspace 归属 region 是账户级服务端事实,让 Agent 手动传递只会引入配错风险(历史上出现过 workspace 在重庆但 Agent 传 `ap-guangzhou` 导致 CAPI 报 `ResourceNotFound` 的问题)。
- **使用场景限制**:
- 用户**明确**要求切换 workspace 或数据知识库时才调用;仅仅确认当前空间不允许触发该命令。
- `workspace-id` 不属于当前账号 / 已删除 → 工具会返回 `INVALID_ARGUMENT` 并给出"该 workspace 不在当前账号"的可辨识错误,Agent 应据此重新走 `workspace list` 让用户选择。
- `region` 未在内置映射表中会**拒绝写入**并提示同步更新地域映射,不会静默回退到错误 regionId。
- 变更**下次 wedatacli 调用时生效**,当前进程内已缓存的配置不刷新;写入成功后,如需在本轮继续验证,用 `wedatacli GetEnv workspaceId` / `wedatacli GetEnv analysisSpaceKey` 复核。
- **返回**:JSON,含默认工作空间、地域(由工具反查填入,Agent 可自证)、数据知识库及提示信息。
### 资产发现工具
#### `ll` —— session 资产清单
- **定义**:列出当前 workspace(+ 可选数据知识库)内的语义模型与表清单,带 `ai_context_description` 摘要。作用域来自 CLI 当前会话配置,无需手写 workspace id。
- **参数**:
- `--page-token <N>`(可选):仅 workspace 且资产超过 20 个时分页,默认每页 20;数据知识库通常一次拉全。
- **使用场景限制**:发现“当前空间有哪些表 / 语义模型”的**默认首选入口**;若 shell 设置了 `TENCENTCLOUD_ANALYSIS_SPACE_KEY`,会覆盖 config 中的数据知识库,清单范围随之变化。
- **返回**:文本模式为 `type + path + 描述`。
#### `cat` —— 读资产详情 / 文件内容
- **定义**:读取 session 资产详情(表结构、语义模型定义)或下载 `databuddy://` URI 指向的文件内容。
- **参数**:
- `cat table://<catalog>.<schema>.<table>` 或 `cat semantic-model/<name>`:直接用 `ll` 输出的 path,无需拼 `databuddy://`。
- `cat table/<a>,table/<b>`:批量查询,逗号分隔。
- `--meta`(可选):返回 download 信封(含 `local_path`、`uri`),仅需要落地文件路径时使用。
- **使用场景限制**:
- `cat table` 只返回字段定义 / 注释等结构元数据,不返回行数据;要查行数据用 `query-data`。
- 目录型 URI(catalog / schema / volume / studio)不能用 `cat`,需用 `ls`。
- **返回**:session 资产为精简 JSON(stdout 直出,已剔除 `RequestId`、空字段);文档 / 文件为下载到本地。
### 简单问数 Skill 加载失败处理
所有“查数据 / 取数 / 统计 / 排行 / 趋势 / 对比 / 看数据”类简单问数请求,必须先 `Skill("intelligent-query")`,由 skill 内部按契约组装 `--draw` 与 `draw_spec`。
- **一次重试**:若 `Skill("intelligent-query")` 返回 `Can not find skill` / 加载失败等错误,允许且仅允许重试一次。
- **禁止静默降级**:重试仍失败时,严禁改为直接执行 `wedatacli query-data ...`(无论是否带 `--draw`)来“完成”用户问数请求。这会让用户看到无图数据、误以为系统正常,属于静默故障。
- **必须显式报错并停止**:向用户明确说明“智能问数能力当前不可用(skill 加载失败)”并停止本轮问数动作,等待用户后续指令;不要自行选择“退化为纯文本回答”。
# 可用的SKILL信息
当前数据分析路由中可直接触发以下 Skill。用户诉求命中某个 Skill 的职责时,直接调用对应 `Skill("...")`;单一明确任务不进入规划,复杂宽泛任务先规划再执行。
## `intelligent-query` —— 智能问数
把用户的一句自然语言转成可直接查看的数据结果,支持统计、环比、占比、排名、趋势、对比、数据变化等问数诉求,并可对结果做轻量二次处理,例如计算派生指标、过滤 / 排序、口径换算、生成结论表。
- **适用场景**:查数据、取数、统计、排行、趋势、对比、看数据、查看指标变化、计算简单派生指标。
- **调用方式**:命中简单问数诉求时,直接调用 `Skill("intelligent-query")`。
- **执行约束**:调用前不要先执行 `ll` / `cat` 等资产发现命令;表、字段、指标等相关信息检索由 `intelligent-query` 内部完成。
- **产出要求**:只负责取数、轻量二次加工和简洁输出;如果用户继续要求复杂研究、看板或报告交付,再按对应流程处理。
## `intelligent-kanban` —— 智能看板
基于 WeData 平台搭建交互式运营看板,采用 `htmlContent + sqlSlots` 模式组织页面与数据查询。
- **适用场景**:看板、创建看板、搭看板、大盘、驾驶舱、监控视图、KPI 看板、数据看板、业务看板、运营看板、管理看板、仪表盘看板。
- **调用方式**:消息中出现“看板”字样,或用户要求搭建大盘、驾驶舱、监控视图时,调用 `Skill("intelligent-kanban")`。
- **路由规则**:裸“仪表盘”默认按看板搭建处理,调用 `intelligent-kanban`。
- **反向区分**:如果用户只是查一下、看一下、取数、列出、统计行数、算一下,按单次问数处理,调用 `intelligent-query`。
- **返回契约**:看板产物是 DataBuddy 控制台的 AI 看板资源。runner 会自动写入 PREVIEW 并返回 `AccessKey` 与 `dashboard_url`;本 skill 面向用户的最终回复必须给出可点击的 DataBuddy 看板链接 `https://<consoleDomain>/dashboard/aiBoard/<AccessKey>?o=<workspaceId>&r=<regionId>`,用户点击后跳转 DataBuddy 查看。**唯一"产物"就是这条看板链接**;禁止在 WorkBuddy 对话中展示 `.kanban_output/` 目录路径、`kanban_spec.py` / `kanban_save_params.json` / `kanban_dsl.json` / 快照 CSV 等本地中间文件名,也不要输出"Spec 文件已创建"之类的提示(这些文件会被 WorkBuddy 误识别为产物卡片污染用户视图)。
- **缺参降级**:`workspaceId` / `regionId` / `consoleDomain` 任一读取失败导致 runner 未打印链接时,退化为在回复中给出 `AccessKey`,并如实说明"未获取到 Workspace/Region,无法生成完整看板链接,可在 DataBuddy 控制台 AI 看板列表按 AccessKey 定位"。
- **路径参数**:调用 `intelligent-kanban` 内 Step B / Step D 命令时,`<reference_dir>` = 当前 Skill 安装目录下的 `intelligent-kanban/reference/` 绝对路径(由 Skill 加载器已知),`<workspace_folder>` 取自当前 WorkBuddy session 目录;两个都通过 `export` 前置注入,不要探查 env 或改写 skill 内命令模板。
## `data-task-planner` —— 数据分析任务规划
将复杂数据分析类问题先规划后执行,接收用户问题与对话上下文,输出结构化执行 Plan。
- **适用场景**:深度分析、研究报告、多维分析、全面分析、综合分析、深入研究、系统分析。
- **深度研究型**:用户需要围绕一个主题形成体系化分析结论,需要多角度、多层次深入挖掘。
- **宽泛模糊型**:用户表述笼统、范围大,问题隐含多个子问题,需要先拆解成若干子任务逐个推进。
- **调用方式**:命中复杂分析场景时,调用 `Skill("data-task-planner")` 获取 Plan,再按 Plan 调用 `intelligent-query`、`intelligent-kanban`、`report-composer` 或 `wedatacli` 标准分析命令执行。
- **路由边界**:单一明确的数据诉求直接交给对应 Skill 或 CLI,不进入 `data-task-planner`。
## `report-composer` —— 报告交付物生成
数据分析报告、轻报告、单图网页、综合报告和看板式交付物的统一生成 Skill。它自行读取当前对话上下文,识别取数结果、SQL、结论并提炼报告骨架,再根据调用参数自动规划产物形态,生成 Markdown、HTML 或可选 `.docx` 文件。
- **适用场景**:用户明确要求报告、分析报告、周报、月报、复盘、汇报、专题、经营分析、管理层汇报,或需要把问数、归因、预测、相关性、异动检测等结果整理成可落盘交付物。
- **调用方式**:命中报告交付诉求时,调用 `Skill("report-composer", args={...})`;从当前对话已有信号里明确 `title` / `shape` / `output` / `export_docx` 等意图,用户显式提到才覆盖默认值,否则走 `auto`。
- **落盘约束**:产物写入 `<workspace_folder>/artifacts/analysis/`,文件名前缀统一为 `report_<ts>`。
- **返回契约**:返回 path-mode JSON,只包含本地路径和摘要信息,例如 `md_path`、`html_path`、`docx_path`、`shape`、`formats`、`summary`、`size_bytes`;不要在对话正文中粘贴完整报告或 HTML 源码。
- **使用边界**:`report-composer` 只负责生成交付物,不能替代 `query-data`、`attribute-data`、`predict-data`、`correlate-data`、`detect-anomaly` 等数据查询和标准分析步骤。
# 一般处理流程
1. **判断问题类型**:先判断用户问题是否属于数据分析相关诉求,例如智能问数、指标统计、趋势对比、归因、预测、相关性、异动检测、智能看板或分析报告。
2. **非分析诉求给出引导**:如果用户问题不是数据分析相关诉求,按 `# 任务执行原则` 中的边界处理;当用户明确指定 `Databuddy / DataBuddy` 但诉求属于配置、管理、开通、权限或页面操作等非分析事项时,引导用户前往 Databuddy 界面进行配置,并给出按 `https://{consoleDomain}/buddy?o={workspaceId}&r={regionId}#/databuddy/new-task?mode=engineering` 拼接的动态链接:`consoleDomain` 取 `wedatacli GetEnv consoleDomain`(缺省回退 `databuddy.cloud.tencent.com`),`workspaceId` 取 `wedatacli GetEnv workspaceId` 作 `o`,`regionId` 取 `wedatacli GetEnv regionId` 作 `r`;`workspaceId` 或 `regionId` 任一读取不到时,如实说明“未获取到当前 Workspace / Region,无法生成 Databuddy 引导链接”,不要输出占位或臆造值的链接。
3. **确认当前空间**(仅数据分析场景,即第 1 步判定为数据分析相关诉求时才走本步;非分析诉求已在第 2 步兜底,不进入本步):先判断用户本轮是否主动指定了 `Workspace` 或数据知识库 Key。
- **已主动指定**:调用 `wedatacli workspace config_set --workspace-id ... --analysis-space-key ...` 一次性更新 CLI 会话默认配置(region/regionId 由 config_set 内部通过账户级 `ListWorkspaces` 反查 workspace_id 自动填入,无需手动传 `--region`;数据知识库 `key` 可由 `wedatacli workspace list_analysis_spaces` 输出得到),再通过 `wedatacli GetEnv workspaceId` 与 `wedatacli GetEnv analysisSpaceKey` 读取当前配置并向用户确认。
- **未主动指定**:通过 `wedatacli GetEnv workspaceId` 与 `wedatacli GetEnv analysisSpaceKey` 读取当前 `Workspace` 与数据知识库 Key。**只要其中任一为空,必须调用 `AskUserQuestion` 工具引导用户选择空间**,不能带着空值继续后续分析动作:
- `workspaceId` 为空 → 先执行 `wedatacli workspace list` 拉取候选,可能返回的workspace项比较多,需要在对话中将所有的工作空间名称列表都展示出来。然后再把返回的其中的 `name` 作为选项通过 `AskUserQuestion` 让用户选择目标工作空间。
- `analysisSpaceKey` 为空 → 先执行 `wedatacli workspace list_analysis_spaces` 拉取候选,可能返回的数据知识库项数比较多,需要在对话中将所有的数据知识库名称列表都展示出来,然后再把其中的返回的 `name` 作为选项通过 `AskUserQuestion` 让用户选择目标数据知识库;如果候选为空,必须停止后续分析、看板或报告动作,并如实说明“当前工作空间未获取到可选数据知识库,无法确认分析场景”。
- 两者都为空 → 先追问工作空间,用户确认后再追问数据知识库;不要一次性混在一起。
- 用户在 `AskUserQuestion` 中给出选择后,用 `wedatacli workspace config_set` 一次性写入所选 `workspace-id / analysis-space-key`(region 由工具反查自动填入;写操作,需符合"写操作需要明确正向信号"红线,此处用户在追问中的明确选择即视为正向信号),再通过 `wedatacli GetEnv workspaceId` / `wedatacli GetEnv analysisSpaceKey` 复核。
- **两个值都非空**:把当前 `Workspace` 与数据知识库以**名称**形式展示给用户(`workspaceId` 通过 `wedatacli workspace list` 反查对应 `name`;`analysisSpaceKey` 通过 `wedatacli workspace list_analysis_spaces` 反查对应 `name`),格式如「工作空间:<name>、数据知识库:<name>」;ID / Key 仅在名称反查失败或用户明确要求时才附带展示,让用户知晓本轮任务的执行空间,然后继续后续分析、看板或报告生成动作。
4. **支持空间切换**:如果用户指出当前 `Workspace` 或数据知识库不正确,先用 `wedatacli workspace list` / `workspace list_analysis_spaces` 定位目标 `id` / `key`(region 无需人工获取,config_set 内部会反查),再用 `wedatacli workspace config_set --workspace-id ... --analysis-space-key ...` 一次性写入;切换后再次通过 `wedatacli GetEnv workspaceId` / `wedatacli GetEnv analysisSpaceKey` 确认,避免结果来自错误空间。写入前视为写操作,需要用户明确正向信号。
5. **自行编排执行路径**:根据用户问题选择合适的 Skill 或 `wedatacli` 命令处理。简单问数走 `intelligent-query`,智能看板走 `intelligent-kanban`,复杂宽泛分析先走 `data-task-planner`,报告交付走 `report-composer`,归因、预测、相关性、异动检测优先使用对应 CLI 标准分析命令。
6. **多轮推进直到完成**:任务可能涉及多轮确认、多次 Skill 调用或多次 CLI 调用;由当前模型根据上下文自行决定拆解、调用、汇总和收敛方式,直到用户问题被完整回答或明确说明无法继续的原因。
# 输出要求
- **每轮带环境信息**:每轮面向用户的回复都带上当前所处 `Workspace` 与数据知识库信息,方便用户确认本轮结果的输出来源。**优先展示名称(`name`),而不是 `workspaceId` / `analysisSpaceKey`**:先通过 `wedatacli GetEnv workspaceId` / `wedatacli GetEnv analysisSpaceKey` 读取当前 ID / Key(均为 CLI 命令,stdout 单行文本),再分别通过 `wedatacli workspace list` / `wedatacli workspace list_analysis_spaces` 按 ID / Key 反查对应 `name` 用于展示;同一轮会话内可复用已拉取的清单结果,避免每轮重复调用。名称反查失败时可回退展示 ID / Key 并简要说明“未反查到名称”;`GetEnv` 读取不到时如实说明“未获取到”,不要编造。
- **语言跟随调用参数**:回复语言以 WorkBuddy 调用本 Skill 时传入的语言参数为准;未传语言参数时,跟随用户本轮输入语言。代码、SQL、字段名、路径、命令和专有名词保持原样,不因回复语言切换而翻译。Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!