Skip to content

用于 ADK 的 Restate 插件

Supported in ADKPython

Restate 是一种持久执行引擎,可将 ADK 智能体变成生来就具有弹性、鲁棒性的系统。它提供持久会话、用于人工审批的暂停/恢复、弹性多智能体编排、安全版本控制以及对每次执行的完全可观测性和控制。所有 LLM 调用和工具执行都会记录到日志中,因此如果发生任何故障,你的智能体可以从上次中断的地方准确恢复。

使用场景

Restate 插件为你的智能体提供:

  • 持久执行:永不丢失进度。如果你的智能体崩溃,它会从上次中断的地方准确继续,并支持自动重试 and 恢复。
  • 人工干预的暂停/恢复:将执行暂停几天或几周,直到人工审批,然后从上次中断的地方恢复。
  • 持久状态:通过内置的会话管理,智能体记忆和会话历史在重启后依然存在。
  • 可观测性和任务控制:准确查看智能体做了什么,并随时终止、暂停和恢复智能体执行。
  • 弹性的多智能体编排:通过并行执行在多个智能体之间运行弹性的工作流。
  • 安全版本控制:通过不可变部署分发新版本,而不会破坏正在进行的执行。

先决条件

要运行下面的示例,你还需要:

安装

安装 Python 版 Restate SDK:

pip install "restate-sdk[serde]"

在智能体中使用

按照以下步骤运行持久智能体,并在 Restate UI 中查看其执行日志:

  1. 克隆 restate-google-adk-example 仓库 并进入示例目录

    git clone https://github.com/restatedev/restate-google-adk-example.git
    cd restate-google-adk-example/examples/hello-world
    
  2. 导出你的 Gemini API 密钥

    export GOOGLE_API_KEY=your-api-key
    
  3. 启动天气智能体

    uv run .
    
  4. 在另一个终端启动 Restate

    docker run --name restate --rm -p 8080:8080 -p 9070:9070 -d \
      --add-host host.docker.internal:host-gateway \
      docker.restate.dev/restatedev/restate:latest
    

    其他安装方式:Brew、npm、二进制下载

  5. 注册智能体

    localhost:9070 打开 Restate UI 并注册你的智能体部署(例如 http://host.docker.internal:9080):

    Restate 注册

    安全版本控制

    Restate 将每次部署注册为不可变快照。当你部署新版本时,正在进行的执行会在原始部署上完成,而新请求则路由到最新版本。了解有关版本感知路由的更多信息。

  6. 向智能体发送请求

    在 Restate UI 中,选择 WeatherAgent,打开 演练场 (Playground),然后发送请求:

    在 UI 中发送请求

    持久会话和重试

    此请求通过 Restate 进行,Restate 在将其转发到你的智能体之前会先持久化请求。每个会话(此处为 session-1)都是隔离的、有状态的且持久的。如果智能体在执行中途崩溃,Restate 会自动重试并从最后一个记录到日志中的步骤恢复,而不会丢失进度。

  7. 检查执行日志

    点击 调用 (Invocations) 选项卡,然后点击你的调用以查看执行日志:

    UI 中的 Restate 日志

    完全控制智能体执行

    每一次 LLM 调用和工具执行都会记录在日志中。在 UI 中,你可以暂停、恢复、从任何中间步骤重启或终止执行。点击 状态 (State) 选项卡以检查智能体当前的会话数据。

功能

Restate 插件为你的 ADK 智能体提供以下功能:

功能 描述
持久工具执行 使用 restate_object_context().run_typed() 包装工具逻辑,使其自动重试并恢复
人工干预 使用 restate_object_context().awakeable() 暂停执行,直至接收到外部信号(例如人工审批)
持久会话 RestateSessionService() 持久存储智能体记忆和对话状态
持久 LLM 调用 RestatePlugin() 记录 LLM 调用日志并支持自动重试
多智能体交互 使用 restate_object_context().service_call() 进行持久的跨智能体 HTTP 调用
并行执行 使用 restate.gather() 并行运行工具和智能体,以实现确定性恢复

其他资源