---
title: "审批"
description: "审批要回答的是：某个 Tool Call 到底该不该发生。需要审批的调用会一直等到有人答复，可能是几分钟，也可能是几天，等待期间不占用 Worker。"
canonical_url: "https://docs.superdurable.io/zh-Hans/agent-frameworks/approvals/"
source: "docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/agent-frameworks/approvals.mdx"
locale: "zh-Hans"
language: "python"
---

> 供 AI Agent 使用的全部页面索引：https://docs.superdurable.io/zh-Hans/llms.txt

# 审批

本页代码为 Python。其他语言：[TypeScript](https://docs.superdurable.io/zh-Hans/agent-frameworks/approvals.typescript.md)

审批要回答的是：某个 Tool Call 到底该不该发生。需要审批的调用会一直等到有人答复，可能是几分钟，也可能是几天，等待期间不占用 Worker。

<a id="approvals"></a>

## 审批如何运作

需要审批的 Tool Call 会在自己的 `AwaitToolApproval` Step 中等待，直到有人答复。等待期间不占用 Worker slot，并且能挺过 Worker 重启和部署。人可以 [在你的应用中](https://docs.superdurable.io/zh-Hans/agent-frameworks/approvals.md#approve-from-your-application) 或 [在 Dex Web 中](https://docs.superdurable.io/zh-Hans/agent-frameworks/approvals.md#approve-in-dex-web) 批准或拒绝这次调用。模型能看到拒绝结果，并据此作出反应。

Tool 的 policy 决定它的调用是否要等待审批；[要求审批](https://docs.superdurable.io/zh-Hans/agent-frameworks/tool-calls.md#require-approval) 给出了默认值，以及如何按 tool 修改。

审批与重试是两回事：带幂等键的退款仍然是一笔真实的退款。

审批等待期间，turn 也随之等待，新的用户消息会排队，直到这个 turn 结束。如果审批不能无限期等待，请设置审批期限。到期时仍在等待的调用会被 Dex 拒绝。参见 [Approval deadlines](https://docs.superdurable.io/zh-Hans/reference/agents/approvals.md#approval-deadlines)（英文）。

<a id="approve-from-your-application"></a>

## 在你的应用中审批

应用通过 Session Flow 的 `resolve_interrupt` RPC 答复一个等待中的调用。它传入 interrupt ID、是否批准，以及一条可选的给模型的消息。在 Python 中，`AgentSessionClient` 把这个 RPC 包装为 `resolve_interrupt`。`get_agent_snapshot` 返回的 snapshot 把等待中的调用列在 `pending_interrupts` 下。

示例应用把这个 RPC 暴露为一个 HTTP route。下面是节选：`session_request` 等请求辅助函数在每个标签页链接的文件中。[完整的 Agent 快速开始应用](https://docs.superdurable.io/zh-Hans/agent-frameworks/add-to-your-agent.md#web-handler) 展示了同一个 route 的完整代码。

**Python**

```python
    @blueprint.post("/interrupts/resolve")
    async def resolve_interrupt() -> Response:
        body, session_id = await session_request()
        interrupt_id = _required_string(body, "interrupt_id")
        if not isinstance(approved := body.get("approved"), bool):
            raise BadRequest("approved must be a boolean")
        rejection_message = body.get("rejection_message")
        if rejection_message is not None and not isinstance(rejection_message, str):
            raise BadRequest("rejection_message must be a string")
        accepted = await sessions.resolve_interrupt(
            session_id, interrupt_id, approved=approved, rejection_message=rejection_message
        )
        return jsonify(accepted=accepted)
```

例子: [examples/python/agent-harnesses/agent_harness_examples/http_routes.py](https://github.com/superdurable/dex/tree/main/examples/python/agent-harnesses/agent_harness_examples/http_routes.py)

调用 RPC 之前，先检查谁有权审批。示例的 route 只接受持有该 Session 签名 token 的调用方。`resolve_interrupt` 可以安全重试：对同一个 interrupt 的第二次调用返回 **False**，并且什么都不改变。Worker 重启期间调用方会看到什么，参见 [部署期间的 RPC](https://docs.superdurable.io/zh-Hans/agent-frameworks/production.md#rpcs-during-a-deploy)。

<a id="approve-in-dex-web"></a>

## 在 Dex Web 中审批

你也可以在 Dex Web 中审批调用。如果 server 保存了某个 Flow type 的 Session graph，Dex Web 就会为它显示 **Agent session** 标签页。

[Agent 快速开始](https://docs.superdurable.io/zh-Hans/agent-frameworks/quick-start.md) 程序会自己上传这个 graph，Python 和 TypeScript 都是如此：它的 Worker 在启动时通过 Worker options（Python 中是 `flow_definitions`，TypeScript 中是 `flowDefinitions`）传入 graph。所以只用普通的 **dexcli dev**，Dex Web 就已经能显示这个标签页。上传需要较新的 Dex Agents 和 Dex Server 版本；详情参见 [Upload the session graph from the Worker](https://docs.superdurable.io/zh-Hans/reference/agents/dex-web.md#upload-the-graph)（英文）。

然后审批这次调用：

1. 打开这个 Session 的 run。它的 Flow ID 就是 Session ID。
2. 选择 **Agent session** 标签页。
3. 把 **Working as** 设为 graph 中的 permission `agent-quick-start.operate`。
4. 在 `cancel_order` 卡片上选择 **Approve** 或 **Reject**。Dex Web 会替你调用 `resolve_interrupt`。

生产环境中的两种做法，参见 [Show sessions in Dex Web](https://docs.superdurable.io/zh-Hans/reference/agents/dex-web.md)（英文）。

<a id="next"></a>

## 下一步

- [Tool Call](https://docs.superdurable.io/zh-Hans/agent-frameworks/tool-calls.md)
- [Approvals reference](https://docs.superdurable.io/zh-Hans/reference/agents/approvals.md)（英文）
