当云服务的用户变成自主 Agent:重新设计存储、执行与安全边界

2026-08-03 57 预计阅读时间: 1 分钟
来源: blog.cloudflare.com AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:8 分钟

传统 Web 基础设施主要服务人类浏览器:用户点击按钮,服务器处理一次请求,再返回页面或 JSON。自主 Agent 改变了这个节奏。它们可能持续运行数小时,反复调用工具、保存中间状态,并在无人确认的情况下执行下一步动作。Agents Week 聚焦的核心问题,正是云基础设施如何从“响应人类请求”转向“承载自主执行”。

浏览器请求与 Agent 任务不是同一种工作负载

典型 HTTP 请求通常短暂、相对无状态,并且有人类用户处于交互回路中。Agent 任务则更像一个能够暂停、恢复和重试的工作流:

  • 它需要保存计划、工具调用结果、模型输出和检查点。
  • 它可能等待外部系统数分钟甚至数小时。
  • 同一步骤可能因超时而重复执行,因此工具操作必须考虑幂等性。
  • 它会动态决定下一次调用什么服务,执行路径难以提前完全枚举。
  • 它可能代表用户操作敏感资源,但用户并不会确认每个动作。

这意味着“启动一个容器并让它一直跑”并不足以构成 Agent 原生基础设施。平台还需要明确任务身份、状态归属、恢复语义、预算限制和审批边界。

三类基础能力需要一起演进

存储:从会话数据变成可恢复状态

Agent 不仅需要保存聊天记录,还需要区分原始输入、工作记忆、长期记忆、工具结果和执行检查点。每份状态都应带有任务 ID、租户、版本和来源信息,否则重试时很难判断哪些结果可以复用。

对于会产生外部副作用的步骤,可以把“准备执行”和“执行完成”分别写入持久化存储,并为操作分配幂等键。这样即使工作进程崩溃,恢复程序也能判断某个动作是否已经提交。

执行:从请求处理变成可暂停的任务租约

Agent 执行器需要面对超时、进程退出和节点迁移。一个实用模型是任务租约:工作进程领取任务后定期续约;租约到期,调度器才允许其他工作进程接管。检查点则记录下一步从哪里继续。

执行环境还应限制 CPU、内存、运行时间、模型令牌和工具调用次数。自主性越强,预算越不能只是监控指标,而应成为平台可以强制执行的约束。

安全:授权对象是任务,而不只是用户

把用户的长期凭证直接交给 Agent,会让一次提示注入或错误规划获得过大的影响范围。更稳妥的方向是为每个任务签发短期、最小权限凭证,并分别控制网络出口、文件访问和工具权限。

高风险动作还需要独立的策略检查。例如读取日历可以自动完成,发送邮件可能需要内容审查,而转账、删除资源或修改生产配置通常应进入人工审批队列。

可以这样实践:构造一个最小任务执行边界

下面是一个概念性配置示例,并非来源中声明的真实产品 API。假设平台支持任务租约、检查点、预算和工具策略,可以先用类似 YAML 明确运行边界,再映射到现有的队列、容器平台和密钥系统。

apiVersion: agents.example/v1
kind: AgentTask
metadata:
  name: invoice-review-2025-03
spec:
  identity:
    tenant: accounting
    credentialTTL: 15m
  execution:
    leaseDuration: 60s
    checkpointEvery: 5
    timeout: 20m
    maxRetries: 2
  budget:
    maxModelTokens: 50000
    maxToolCalls: 30
  storage:
    checkpointURI: s3://agent-state/invoice-review-2025-03/
    encryptWith: alias/agent-task-state
  network:
    defaultDeny: true
    allowedHosts:
      - api.accounting.internal
  tools:
    - name: read_invoice
      permission: allow
    - name: update_invoice_status
      permission: require_approval
    - name: initiate_payment
      permission: deny

在真实系统中,执行器还必须在调用工具前再次校验策略,不能只相信模型生成的工具名称。下面的 Python 示例可以直接运行,用来演示“允许、审批、拒绝”三种决策;它只是策略边界示意,不是生产级沙箱。

from dataclasses import dataclass
from enum import Enum


class Decision(str, Enum):
    ALLOW = "allow"
    REQUIRE_APPROVAL = "require_approval"
    DENY = "deny"


@dataclass(frozen=True)
class ToolCall:
    task_id: str
    tool: str
    arguments: dict


POLICY = {
    "read_invoice": Decision.ALLOW,
    "update_invoice_status": Decision.REQUIRE_APPROVAL,
    "initiate_payment": Decision.DENY,
}


def authorize(call: ToolCall) -> Decision:
    return POLICY.get(call.tool, Decision.DENY)


def execute(call: ToolCall) -> None:
    decision = authorize(call)
    if decision == Decision.DENY:
        raise PermissionError(f"tool denied: {call.tool}")
    if decision == Decision.REQUIRE_APPROVAL:
        print(f"approval queued for {call.task_id}: {call.tool}")
        return
    print(f"executing {call.tool} with {call.arguments}")


if __name__ == "__main__":
    calls = [
        ToolCall("task-42", "read_invoice", {"invoice_id": "INV-1007"}),
        ToolCall("task-42", "update_invoice_status", {"status": "approved"}),
        ToolCall("task-42", "initiate_payment", {"amount": 1200}),
    ]

    for item in calls:
        try:
            execute(item)
        except PermissionError as error:
            print(error)

运行方式:

python agent_policy.py

生产实现还应记录策略版本、调用参数摘要、审批人和最终结果,并对参数执行模式校验,避免一个看似安全的工具通过危险参数越权。

落地时先回答这些问题

Agent 原生架构不一定要求推倒现有云平台。团队可以先在任务队列、对象存储、容器执行器和身份系统之上补齐控制面,但要明确以下问题:

  • 任务中断后,从哪个检查点恢复,已经产生的副作用如何去重?
  • 每个任务可以使用哪些工具、访问哪些主机,凭证多久失效?
  • 谁为令牌、计算时间和外部 API 调用设置硬上限?
  • 哪些动作可以自动执行,哪些动作必须审批,哪些动作永远禁止?
  • 审计日志能否还原模型决策、策略判断、工具参数和执行结果?

真正的变化不是给现有应用接入一个模型,而是把自主任务当作新的基础设施主体。存储负责让它可恢复,执行系统负责让它可控制,安全层则负责限制它即使判断错误也只能在明确边界内行动。


相关推荐