用途
volcengine-billing-and-cost-management 是一个用于 FinOps 场景的费用异常分析、波动解释和根因定位(RCA)技能。它面向账单与成本管理,帮助定位费用上涨或下降的来源,并解释波动由哪些因素驱动。
主要能力
该技能是一个总控型分析技能,内部包含三个分析工具:
- QueryCostChangeDimensions:定位异常主要集中在哪些对象上,例如哪个产品、地域、实例或项目导致上涨或下跌。
- QueryCostChangeAmountComponents:分析某个 charge_item_code 的金额构成变化,例如应付金额、原价、折后价、退款、代金券等金额项分别如何变化。
- QueryCostChangeDrivers:分析某个 charge_item_code 的变化由哪些驱动因子造成,例如用量、单价、影响因子分别贡献了多少。
技能会根据问题自动选择异常维度定位、异常指标定位等能力,使用当前授权身份分析费用波动。
适用场景
当用户出现以下任一意图时,可使用本技能:
- 为什么费用涨了或降了
- 帮我做 RCA 或根因分析
- 哪个产品、地域、实例、主体导致异常
- 是单价、用量、折扣还是其他指标导致异常
- 帮我定位费用异常来源
- 帮我看某个客户、账户或账期的费用波动原因
- 帮我解释某个账单异常
不适用于:纯术语解释、纯权限问题、不涉及异常分析的静态数据查询。
使用方式
运行环境需要 Python 3.9+、PATH 中可用的 ve CLI,以及 Host 提供并隔离的当前用户认证上下文(CLI profile 或环境凭证)。技能不读取、输出或复制 AK/SK/token,不修改全局 CLI 登录配置。
RCA 分析必须通过 scripts/run_rca_workflow.py 的 init / step / resume 流程执行。标准流程为:
-
初始化: python3 scripts/run_rca_workflow.py init
--question "<用户问题>"
--context-json '<current_period/base_period 等业务上下文>'
--state-file <state.json> -
根据脚本输出 action 执行:
- action=await_hook:读取 hook_request_file,按 hook_type 生成 hook_response.json,然后执行 resume --hook-response-file。
- action=execute_tool:按脚本输出的 tool_command 参数数组执行 scripts/call_openapi.py,将工具结果写入 tool_result.json,然后执行 resume --tool-result-file。
- action=final:输出脚本返回的 final_answer。
-
每次 resume 后,继续按脚本返回的 action 执行,直到 action=final。
技能包含三个 LLM hook:choose_task(从 pending_tasks 中选择 selected_task_id 并给出 decision_reason)、interpret_result(解释工具结果,输出 result_summary、findings、candidate_tasks、llm_decision)、draft_answer(在脚本确认 stop_condition.final.should_stop=true 后,基于 findings 生成最终自然语言答案)。
底层分析动作统一通过 call_openapi.py 执行 ve billing <Action> --force 调用 OpenAPI,使用 QueryCostChangeDimensions、QueryCostChangeAmountComponents、QueryCostChangeDrivers 三个动作,固定 billing、2022-01-01、POST 和 JSON Content-Type。
限制
- 需要 Python 3.9+、ve CLI 及 Host 提供的认证上下文。
- 如果调用返回 VE_CLI_UPGRADE_REQUIRED(ve 不支持 --force),必须提示用户先升级 ve 到支持 --force 泛化调用的版本,再重新发起分析;不要自动反复重试、移除 --force 或回退旧接口。
- 不兼容旧动作名及旧分析状态,请新建分析任务。
- 默认分析当前授权账号,不向用户追问账号 ID,也不向 OpenAPI 传 account_id / AccountID。用户指定其它账号时,先说明当前身份边界;没有 Host 的授权切换能力时不能代查或静默改查当前账号。
- QueryCostChangeAmountComponents 和 QueryCostChangeDrivers 只能在 charge_item_code 已知时调用;如果缺少 charge_item_code,必须先通过 QueryCostChangeDimensions 补齐。
- 用户只提供月份、未指定年份时,默认使用当前年份;有明确历史上下文时沿用该年份。缺少账期时向用户追问。
- 禁止直接写 SQL 查数据,所有数据必须通过脚本获取;禁止编造数据,所有数值结论必须来自脚本输出的 JSON。
- 如果脚本执行失败,必须说明卡在哪一步、报错信息是什么,并根据错误区分凭证失效、无权限、参数错误、超时或服务异常;不能把失败解释为零费用。
- 不得把 Authorization、AK、SK、token、JWT、cookie、API key 等敏感信息写入运行文件或控制台输出。
- 最终回答面向业务用户表达,不输出底层脚本命令、OpenAPI 请求体或实现层字段映射作为正文主体。
输出规范
最终回答应基于脚本返回结果生成,采用先结论、后展开的表达方式。先用 1–2 句话说明总体结论:费用是涨了还是降了,主要由什么对象或因素驱动;再按需要展开关键证据,可结合短段落和表格。数值统一保留两位小数,金额使用千分位分隔。若异常高度集中,可只展示 Top1,并说明集中度高。若当前结果不足以支持明确结论,应直接说明信号不足或前置条件缺失,不得补造原因。