Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Agents API

本页提供 Agents SDK 的概览。各功能的详细文档请参阅链接的参考页面。

概览

Agents SDK 提供两套主要 API:

API描述
服务端 Agent 类封装 Agent 逻辑:连接、状态、方法、AI 模型、错误处理
客户端 SDKAgentClient、useAgent 与 useAgentChat,用于从浏览器连接

注意

Agents 依赖 Cloudflare Durable Objects。请参阅 Configuration 了解如何添加所需的 bindings。

Agent 类

Agent 是一个继承自 Agent 基类的类:

TypeScript


import { Agent } from "agents";


class MyAgent extends Agent<Env, State> {

  // Your agent logic

}


export default MyAgent;


每个 Agent 可以有数百万个实例。每个实例都是一个独立运行的微型服务器,支持横向扩展。实例通过唯一标识符寻址(用户 ID、电子邮件、工单号等)。

注意

Agent 的实例是全局唯一的:给定相同的名称(或 ID),你总会得到同一个 Agent 实例。

这让你无需在请求之间同步状态:如果某个 Agent 实例代表特定用户、团队、频道或其他实体,你可以直接用该 Agent 实例来存储那个实体的状态。无需搭建集中式的会话存储。

如果客户端断开连接,你始终可以将其路由回完全相同的 Agent,从中断处继续。

生命周期

flowchart TD A[“onStart
(instance wakes up)”] –> B[“onRequest
(HTTP)”] A –> C[“onConnect
(WebSocket)”] A –> D[“onEmail”] C –> E[“onMessage ↔ send()
onError (on failure)”] E –> F[“onClose”]

方法触发时机
onStart(props?)实例启动或从休眠中唤醒时触发。可接收通过 getAgentByName 或 routeAgentRequest 传入的可选 初始化 props
onRequest(request)发送到该实例的每一个 HTTP 请求时触发
onConnect(connection, ctx)建立 WebSocket 连接时触发
onMessage(connection, message)每收到一条 WebSocket 消息时触发
onError(connection, error)发生 WebSocket 错误时触发
onClose(connection, code, reason, wasClean)WebSocket 连接关闭时触发
onEmail(email)邮件被路由到该实例时触发
onStateChanged(state, source)状态变化时触发(来自服务端或客户端)

核心属性

属性类型描述
this.envEnv环境变量与 bindings
this.ctxExecutionContext请求的执行上下文
this.stateState当前持久化的状态
this.sqlFunction在嵌入式 SQLite 上执行 SQL 查询

服务端 API 参考

功能方法文档
StatesetState()、onStateChanged()、initialStateStore and sync state
Callable methods@callable() 装饰器Callable methods
Schedulingschedule()、scheduleEvery()、getSchedules()、cancelSchedule()Schedule tasks
Durable executionrunFiber()、stash()、onFiberRecovered()、keepAlive()、keepAliveWhile()Durable execution
Queuequeue()、dequeue()、dequeueAll()、getQueue()Queue tasks
WebSocketsonConnect()、onMessage()、onClose()、broadcast()WebSockets
HTTP/SSEonRequest()HTTP and SSE
EmailonEmail()、replyToEmail()Email routing
WorkflowsrunWorkflow()、waitForApproval()Run Workflows
MCP ClientaddMcpServer()、removeMcpServer()、getMcpServers()MCP Client API
AI ModelsWorkers AI、OpenAI、Anthropic bindingsUsing AI models
Protocol messagesshouldSendProtocolMessages()、isConnectionProtocolEnabled()Protocol messages
ContextgetCurrentAgent()getCurrentAgent()
Observabilitysubscribe()、diagnostics channels、Tail WorkersObservability
Sub-agentssubAgent()、abortSubAgent()、deleteSubAgent()Sub-agents
SessionsSession.create()、上下文块、压缩、搜索Sessions
ThinkThink 基类、工作区工具、生命周期钩子、扩展Think

SQL API

每个 Agent 实例都内置一个 SQLite 数据库,通过 this.sql 访问:

TypeScript


// Create tables

this.sql`CREATE TABLE IF NOT EXISTS users (id TEXT PRIMARY KEY, name TEXT)`;


// Insert data

this.sql`INSERT INTO users (id, name) VALUES (${id}, ${name})`;


// Query data

const users = this.sql<User>`SELECT * FROM users WHERE id = ${id}`;


如果状态需要与客户端同步,请改用 State API

客户端 API 参考

功能方法文档
WebSocket clientAgentClientClient SDK
HTTP clientagentFetch()Client SDK
React hookuseAgent()Client SDK
Chat hookuseAgentChat()Client SDK

快速示例

TypeScript


import { useAgent } from "agents/react";

import type { MyAgent } from "./server";


function App() {

  const agent = useAgent<MyAgent, State>({

    agent: "my-agent",

    name: "user-123",

  });


  // Call methods on the agent

  agent.stub.someMethod();


  // Update state (syncs to server and all clients)

  agent.setState({ count: 1 });

}


Explain Code

聊天 Agent

对于 AI 聊天应用,改为继承 AIChatAgent 而非 Agent:

TypeScript


import { AIChatAgent } from "agents/ai-chat-agent";


class ChatAgent extends AIChatAgent {

  async onChatMessage(onFinish) {

    // this.messages contains the conversation history

    // Return a streaming response

  }

}


特性包括:

  • 内置消息持久化
  • 自动可恢复流式传输(可在流中途重连)
  • 可与 useAgentChat React hook 协同工作

完整教程请参阅 Build a chat agent

路由

Agents 通过 URL 模式访问:


https://your-worker.workers.dev/agents/:agent-name/:instance-name


在 Worker 中使用 routeAgentRequest() 来路由请求:

TypeScript


import { routeAgentRequest } from "agents";


export default {

  async fetch(request: Request, env: Env) {

    return (

      routeAgentRequest(request, env) ||

      new Response("Not found", { status: 404 })

    );

  },

} satisfies ExportedHandler<Env>;


Explain Code

参阅 Routing 了解自定义路径、CORS 与实例命名模式。

后续步骤

Quick start 用约 10 分钟构建你的第一个 Agent。

Configuration 了解 wrangler.jsonc 配置与部署。

WebSockets 与客户端进行实时双向通信。

Build a chat agent 使用 AIChatAgent 构建 AI 应用。