跳转到内容
本站为社区维护的非官方中文翻译,与 Cloudflare, Inc. 无关联。本站不提供账户登录,请勿在任何非官方站点输入您的 Cloudflare 账户信息。官方文档:developers.cloudflare.com

Agent 类

最后更新 查看 MarkdownAgent 设置

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

概览

Agents SDK 提供两个主要 API:

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

Agent 类

Agent 是扩展基类 Agent 的类:

import { Agent, routeAgentRequest } from "agents";

export class MyAgent extends Agent<Env, State> {
	// Your agent logic
}

export default {
	async fetch(request: Request, env: Env) {
		return (
			(await routeAgentRequest(request, env)) ||
			new Response("Not found", { status: 404 })
		);
	},
} satisfies ExportedHandler<Env>;

每个 Agent 可有数百万实例。每个实例是独立运行的单独微服务器,实现水平扩展。实例由唯一标识符(user ID、email、工单号等)寻址。

生命周期

flowchart TD
    A["onStart<br/>(实例唤醒)"] --> B["onRequest<br/>(HTTP)"]
    A --> C["onConnect<br/>(WebSocket)"]
    A --> D["onEmail"]
    C --> E["onMessage ↔ send()<br/>onError(失败时)"]
    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) 状态变化时(来自 server 或 client)

核心属性

属性 类型 描述
this.env Env 环境变量与绑定
this.ctx ExecutionContext 请求的执行上下文
this.state State 当前持久化状态
this.sql 函数 在嵌入式 SQLite 上执行 SQL 查询

服务端 API 参考

功能 方法 文档
状态 setState(), onStateChanged(), initialState 存储并同步状态
可调用方法 @callable() 装饰器 Callable 方法
调度 schedule(), scheduleEvery(), getScheduleById(), listSchedules() 计划任务
Durable 执行 runFiber(), startFiber(), stash(), onFiberRecovered(), keepAlive(), keepAliveWhile() 持久执行
队列 queue(), dequeue(), dequeueAll(), getQueue() 队列任务
WebSockets onConnect(), onMessage(), onClose(), broadcast() WebSockets
HTTP/SSE onRequest() HTTP 和 SSE
邮件 onEmail(), replyToEmail() 电子邮件路由
Workflows runWorkflow(), waitForApproval() 运行 Workflows
MCP 客户端 addMcpServer(), removeMcpServer(), getMcpServers() MCP 客户端 API
AI 模型 Workers AI、OpenAI、Anthropic 绑定 模型
协议消息 shouldSendProtocolMessages(), isConnectionProtocolEnabled() 协议消息
上下文 getCurrentAgent() getCurrentAgent()
追踪 wrapAISDK() 追踪
诊断通道 subscribe()、诊断通道 诊断通道
子 Agent subAgent(), abortSubAgent(), deleteSubAgent() 子 Agent
Agent 作为工具 runAgentTool(), clearAgentToolRuns(), hasAgentToolRun() 将 Agent 用作工具
Agent Skills SKILL.md 解析器、Workspace、R2 和清单源、脚本运行程序 Agent Skills
会话 Sessions 功能模块:消息历史、分支、压缩和搜索 Sessions
Think Think 基类、工作区工具、生命周期钩子、扩展 Think
Chat SDK createChatSdkState(), ChatSdkStateAgent Chat SDK

SQL API

每个 Agent 实例有通过 this.sql 访问的嵌入式 SQLite 数据库:

// 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 客户端 AgentClient 客户端 SDK
HTTP 客户端 agentFetch() 客户端 SDK
React hook useAgent() 客户端 SDK
Chat hook useAgentChat() 客户端 SDK
Agent 工具事件 useAgentToolEvents() 将 Agent 用作工具

模块级 helper export 包括 agents/agent-tools 的 agentTool(),将 Think 或 AIChatAgent 子类转为 AI SDK tool 定义。

快速示例

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 });
}

Chat Agent

AI 聊天应用请扩展 AIChatAgent 而非 Agent:

import { AIChatAgent } from "@cloudflare/ai-chat";

class ChatAgent extends AIChatAgent {
	async onChatMessage(onFinish) {
		// this.messages contains the conversation history
		// Return a streaming response
	}
}

功能包括:

  • 内置消息持久化
  • 自动可恢复流式传输(重连 mid-stream)
  • 与 useAgentChat React hook 配合

完整教程请参阅构建 chat agent。

路由

Agent 通过 URL 模式访问:

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

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

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>;

自定义路径、CORS 和实例命名模式请参阅路由。

下一步

这篇文档对您有帮助吗?