mcpField
A
agents-sdk

agents-sdk

github.com/cloudflareAgent 工作流3.2k108.8k 次安装今天更新
代码仓库

关于 agents-sdk

用于在 Cloudflare Workers 构建持久化 Agent 的框架,面向开发聊天、后台处理和客户端连接应用的开发者。它结合状态管理、调度、工作流、RPC 与 MCP 支持,并指导检索最新文档。

主要功能

  1. 01基于 SQLite 的持久状态
  2. 02可调用 RPC 与流式传输
  3. 03定时任务和工作流
  4. 04队列、重试与持久执行
  5. 05聊天 Agent 和 React hooks
  6. 06MCP 客户端与服务端支持

适用场景

  1. 01构建有状态聊天 Agent
  2. 02调度持久化后台任务
  3. 03将 Agent 应用连接到客户端
  4. 04连接或创建 MCP 服务

MCP 相关

SDK 可将 Agent 连接到 MCP 服务,也可通过 `createMcpHandler` 构建 MCP 服务,并提供传输方式与安全配置说明。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/cloudflare/skills --skill agents-sdk

安装后在 Claude Code 中输入/agents-sdk确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
browse-the-web.md
callable.md
client-sdk.md
codemode.md
configuration.md
durable-execution.md
email.md
human-in-the-loop.md
mcp.md
observability.md
queue-retries.md
routing.md
server-driven-messages.md
state-scheduling.md
streaming-chat.md
think.md
voice.md
webhooks-push.md
workflows.md

详细介绍

Cloudflare Agents SDK

你对 Agents SDK 的了解可能已经过时。对于任何 Agents SDK 相关任务,优先检索,而非依赖预训练知识。

检索来源

Cloudflare 文档:https://developers.cloudflare.com/agents/index.md

主题文档 URL用途
快速入门快速开始创建第一个 Agent、设置项目
添加到现有项目添加到现有项目安装到现有的 Workers 应用
配置配置wrangler.jsonc、绑定、资源、部署
Agent 类Agents APIAgent 生命周期、模式、注意事项
状态存储和同步状态setState、validateStateChange、持久化
路由路由URL 模式、routeAgentRequest
可调用方法可调用方法@callable、RPC、流式传输、超时
调度安排任务schedule()、scheduleEvery()、cron
工作流运行工作流AgentWorkflow、持久化的多步骤任务
HTTP/WebSocketsWebSockets生命周期钩子、休眠
聊天 Agent聊天 AgentAIChatAgent、流式传输、工具、持久化
客户端 SDK客户端 SDKuseAgent、AgentClient、状态、RPC、HTTP
客户端工具客户端工具客户端工具、autoContinueAfterToolResult
服务端驱动的消息自主响应saveMessages、waitUntilStable、由服务端发起的轮次
可恢复的流式传输聊天 Agent断开连接后的流恢复
电子邮件电子邮件电子邮件路由、安全回复解析器
MCP 客户端MCP 客户端连接到 MCP 服务
MCP 服务MCP 服务使用 createMcpHandler 构建 MCP 服务
MCP 传输MCP 传输Streamable HTTP、SSE、RPC 传输选项
保护 MCP 服务保护 MCPOAuth、代理 MCP、强化安全性
人在回路中人在回路中工作流审批、信息收集、超时处理
持久化执行持久化执行runFiber()、stash()、在 DO 驱逐后继续运行
队列队列内置 FIFO 队列、queue()
重试重试this.retry()、退避/抖动
可观测性可观测性diagnostics-channel 事件
推送通知推送通知Agent 提供的 Web Push + VAPID
WebhookWebhook接收外部 Webhook
跨域身份验证跨域身份验证WebSocket 身份验证、令牌、CORS
只读连接只读shouldConnectionBeReadonly
语音语音实验性 STT/TTS、withVoice
浏览网页浏览器工具实验性 CDP 浏览器自动化
ThinkThink实验性的更高层级聊天 Agent 类
迁移AI SDK v5、AI SDK v6升级 @cloudflare/ai-chat

功能

Agents SDK 提供:

  • 持久化状态 — 由 SQLite 提供支持,并通过 setState 自动同步到客户端
  • 可调用 RPC — 通过 WebSocket 调用 @callable() 方法
  • 调度 — 一次性、重复(scheduleEvery)和 cron 任务
  • 工作流 — 通过 AgentWorkflow 执行持久化的多步骤后台处理
  • 持久化执行 — 使用 runFiber() / stash() 执行即使 DO 被驱逐也能继续的任务
  • 队列 — 内置 FIFO 队列,并通过 queue() 重试
  • 重试 — 使用指数退避和抖动的 this.retry()
  • MCP 集成 — 连接到 MCP 服务,或使用 createMcpHandler 构建自己的服务
  • 电子邮件处理 — 通过安全路由接收和回复电子邮件
  • 流式聊天 — AIChatAgent,支持可恢复的流、消息持久化和工具
  • 服务端驱动的消息 — 使用 saveMessages、waitUntilStable 发起主动 Agent 轮次
  • React hooks — 面向客户端应用的 useAgent、useAgentChat
  • 可观测性 — 用于状态、RPC、调度和生命周期的 diagnostics_channel 事件
  • 推送通知 — 从 Agent 发送 Web Push + VAPID 通知
  • Webhook — 接收并验证外部 webhook
  • 语音(实验性)— 通过 @cloudflare/voice 实现 STT/TTS
  • 浏览器工具(实验性)— 通过 agents/browser 使用 CDP 驱动的浏览功能
  • Think(实验性)— 通过 @cloudflare/think 提供更高层级的聊天 Agent

首先:验证安装

npm ls agents  # Should show agents package

如果尚未安装:

npm install agents

对于聊天 Agent:

npm install agents @cloudflare/ai-chat ai @ai-sdk/react

Wrangler 配置

{
  "compatibility_flags": ["nodejs_compat"],
  "durable_objects": {
    "bindings": [{ "name": "MyAgent", "class_name": "MyAgent" }]
  },
  "migrations": [{ "tag": "v1", "new_sqlite_classes": ["MyAgent"] }]
}

注意事项:

  • 不要在 tsconfig 中启用 experimentalDecorators(这会导致 @callable 出错)
  • 切勿编辑旧迁移;始终添加新的标签
  • 每个 Agent 类都需要自己的 DO 绑定和迁移条目
  • 为 Workers AI 添加 "ai": { "binding": "AI" }

Agent 类

import { Agent, routeAgentRequest, callable } from "agents";

type State = { count: number };

export class Counter extends Agent<Env, State> {
  initialState = { count: 0 };

  validateStateChange(nextState: State, source: Connection | "server") {
    if (nextState.count < 0) throw new Error("Count cannot be negative");
  }

  onStateUpdate(state: State, source: Connection | "server") {
    console.log("State updated:", state);
  }

  @callable()
  increment() {
    this.setState({ count: this.state.count + 1 });
    return this.state.count;
  }
}

export default {
  fetch: (req, env) => routeAgentRequest(req, env) ?? new Response("Not found", { status: 404 })
};

路由

请求会路由到 /agents/{agent-name}/{instance-name}:

类URL
Counter/agents/counter/user-123
ChatRoom/agents/chat-room/lobby

客户端:useAgent({ agent: "Counter", name: "user-123" })

自定义路由:使用 getAgentByName(env.MyAgent, "instance-id"),然后调用 agent.fetch(request)。

核心 API

任务API
读取状态this.state.count
写入状态this.setState({ count: 1 })
SQL 查询this.sql`SELECT * FROM users WHERE id = ${id}`
调度(延迟)await this.schedule(60, "task", payload)
调度(cron)await this.schedule("0 * * * *", "task", payload)
调度(间隔)await this.scheduleEvery(30, "poll")
RPC 方法@callable() myMethod() { ... }
流式 RPC@callable({ streaming: true }) stream(res) { ... }
启动工作流await this.runWorkflow("ProcessingWorkflow", params)
持久化 fiberawait this.runFiber("name", async (ctx) => { ... })
将任务加入队列this.queue("handler", payload)
使用退避策略重试await this.retry(fn, { maxAttempts: 5 })
向客户端广播this.broadcast(message)
获取连接this.getConnections(tag?)

React 客户端

请阅读 client-sdk.md,了解客户端选择和当前连接的示例。对于聊天 UI 和工具,也请阅读 streaming-chat.md。

参考资料

核心
聊天与流式传输
后台处理
集成
实验性功能

评论

支持 Markdown