---
url: /zh/data/agents.md
description: 用 wow-data-query Skill 让 AI Agent 根据运行中的 Wow 服务回答业务问题：它读取什么、从不做什么，以及它的回答附带什么。
---

# 让 Agent 回答

`wow-data-query` 这个 Agent Skill 根据运行中的 Wow 服务回答业务问题，比如“上周按仓库统计有多少订单延迟发货？”。它通过只读路由读取服务的查询模型，回答时给出数字、产生它们的查询，以及可能让它们产生误导的因素。它从不编写代码，也从不写入数据。安装方法见 [Agent Skills](../start/skills)。

## 它读取什么 {#what-it-reads}

[Wow 系统中的数据](./)中的三种查询模型：聚合的快照，用于事物现在是什么样；它的事件流，用于发生了什么、何时发生；以及数据集，用于跨聚合或跨服务的问题。在任何查询之前，它先读取模型的能力描述符，即对同一路由的 `GET`，并只使用描述符接受的东西：描述符没有列出的字段，对 Agent 来说就不存在；描述符没有授予的操作符或分组，它不会尝试。同一个问题可能在一个后端上没问题，在另一个后端上被拒绝；由服务的描述符决定。

## 它从不做什么 {#what-it-never-does}

* **未经你同意查询生产环境。** 默认情况下它在开发或预发服务上工作。在配置、文档或历史中发现的生产 URL 不算同意；同意要由你在对话中给出。
* **经手你的凭据。** 它从环境、导出的令牌或配置好的 CLI 读取凭据，从不在对话中索要密码或令牌，也从不打印它们。它以这些凭据所代表的调用方身份读取，所以只读取该调用方的租户、所有者和空间。
* **写入。** 只用查询路由和状态读取：从不使用命令路由、快照重建、运维路由或任何其他会写入的东西。
* **绕过保护。** 遮蔽的字段保持遮蔽，不能比较的字段不会被过滤或排序，受保护的字段不会被分组。它从不尝试通过过滤、范围或检索还原被遮蔽的值。
* **手工关联。** 跨聚合的问题由提供它的数据集回答，否则就不回答。

## 回答附带什么 {#what-an-answer-comes-with}

* 直接的答案，带着单位、所覆盖的时段，以及任何按日期分组所用的时区。除非查询指明了时区，日期都按 UTC 计算，所以 Agent 会询问或推断业务所在的时区，并说明它用了哪个。
* 会改变含义的注意事项：
  * 标记为不精确的计数或总数是下限；
  * 近似指标是估计值；
  * limit 或前 N 名可能截掉了一些行；
  * 除非查询选择了它们，已删除的聚合不包含在内；
  * 快照比提交稍有滞后，数据集比它的源有滞后。
* 证据：环境、描述符的版本，以及它发送的确切请求，让你可以再次运行。

## 被拒绝时 {#when-it-is-refused}

被拒绝的查询会在每个 violation 中指明它的规则；Agent 在描述符的范围内修正查询，再试一次。429 `wow.query.busy` 要等待 `Retry-After`；409 `wow.query.dataset-unavailable` 表示数据集正在修订；504 `wow.query.timeout` 意味着要收窄查询。第二次被拒绝、服务器错误或与数据矛盾的结果，是要交给服务开发者的问题，由 `wow-develop` Skill 诊断。

无法访问服务时，Agent 仍然会给出请求体以及发送它们的命令，并说明没有读取任何数字。对于人们反复打开的视图，而不是一次性的回答，请在[工作台](./workbench)中定义一个。
