让 Agent 回答
wow-data-query 这个 Agent Skill 根据运行中的 Wow 服务回答业务问题,比如“上周按仓库统计有多少订单延迟发货?”。它通过只读路由读取服务的查询模型,回答时给出数字、产生它们的查询,以及可能让它们产生误导的因素。它从不编写代码,也从不写入数据。安装方法见 Agent Skills。
它读取什么
Wow 系统中的数据中的三种查询模型:聚合的快照,用于事物现在是什么样;它的事件流,用于发生了什么、何时发生;以及数据集,用于跨聚合或跨服务的问题。在任何查询之前,它先读取模型的能力描述符,即对同一路由的 GET,并只使用描述符接受的东西:描述符没有列出的字段,对 Agent 来说就不存在;描述符没有授予的操作符或分组,它不会尝试。同一个问题可能在一个后端上没问题,在另一个后端上被拒绝;由服务的描述符决定。
它从不做什么
- 未经你同意查询生产环境。 默认情况下它在开发或预发服务上工作。在配置、文档或历史中发现的生产 URL 不算同意;同意要由你在对话中给出。
- 经手你的凭据。 它从环境、导出的令牌或配置好的 CLI 读取凭据,从不在对话中索要密码或令牌,也从不打印它们。它以这些凭据所代表的调用方身份读取,所以只读取该调用方的租户、所有者和空间。
- 写入。 只用查询路由和状态读取:从不使用命令路由、快照重建、运维路由或任何其他会写入的东西。
- 绕过保护。 遮蔽的字段保持遮蔽,不能比较的字段不会被过滤或排序,受保护的字段不会被分组。它从不尝试通过过滤、范围或检索还原被遮蔽的值。
- 手工关联。 跨聚合的问题由提供它的数据集回答,否则就不回答。
回答附带什么
- 直接的答案,带着单位、所覆盖的时段,以及任何按日期分组所用的时区。除非查询指明了时区,日期都按 UTC 计算,所以 Agent 会询问或推断业务所在的时区,并说明它用了哪个。
- 会改变含义的注意事项:
- 标记为不精确的计数或总数是下限;
- 近似指标是估计值;
- limit 或前 N 名可能截掉了一些行;
- 除非查询选择了它们,已删除的聚合不包含在内;
- 快照比提交稍有滞后,数据集比它的源有滞后。
- 证据:环境、描述符的版本,以及它发送的确切请求,让你可以再次运行。
被拒绝时
被拒绝的查询会在每个 violation 中指明它的规则;Agent 在描述符的范围内修正查询,再试一次。429 wow.query.busy 要等待 Retry-After;409 wow.query.dataset-unavailable 表示数据集正在修订;504 wow.query.timeout 意味着要收窄查询。第二次被拒绝、服务器错误或与数据矛盾的结果,是要交给服务开发者的问题,由 wow-develop Skill 诊断。
无法访问服务时,Agent 仍然会给出请求体以及发送它们的命令,并说明没有读取任何数字。对于人们反复打开的视图,而不是一次性的回答,请在工作台中定义一个。