【免费下载链接】autoskillsOne command. Your entire AI skill stack. Installed.项目地址https://gitcode.com/gh_mirrors/au/autoskills点击查看免费下载在 autoskills 仓库的 agents-sdk 技能包中references/think.md 记录了一个尚处于实验阶段的重量级能力cloudflare/think。它是 Cloudflare Agents SDK 提供的更高层聊天 Agent 类把streamText循环、工具执行tool execution与消息持久化message persistence全部内置让你只需实现getModel()和getSystemPrompt()两个方法即可得到一个完整可用的对话 Agent。本文将以该文档为骨架结合仓库内同一技能包的配套参考configuration、streaming-chat、client-sdk、routing 等完整还原 Think 的接入方式、生命周期钩子、子 Agent 机制、前端客户端与 AIChatAgent 的取舍并补充底层原理与配置要点帮助你在 Cloudflare Workers 上以最小代码量搭建生产可用的聊天应用。Think 是什么把「脏活」全部接管传统上用 Cloudflare Agents SDK 构建聊天 Agent 需要你手动编排 AI SDK 的streamText循环、把模型输出转成 UI 消息流、再自行把消息持久化到 SQLite参考同目录 streaming-chat.md 中AIChatAgent.onChatMessage的手写实现。cloudflare/think改变了这一模式cloudflare/think是一个更高层的聊天 Agent 类为你处理streamText循环、工具执行和消息持久化。你提供getModel()和getSystemPrompt()Think 负责其余一切。也就是说Think 把「框架流程」与「你的业务」彻底分离关注点Think 负责你需要负责streamText循环内置—工具执行自动在getTools()中声明工具消息持久化自动SQLite—模型选择—getModel()系统提示词—getSystemPrompt()每轮行为定制—beforeTurn(ctx)等生命周期钩子安装仅需一条命令npm install cloudflare/think由于 Think 本质上是聊天 Agent 的进阶形态它同样依赖 Agents SDK 的 DODurable Object与 SQLite 基础设施在 autoskills 的检测体系中只要项目中安装了agents包见 README.md 的「Cloudflare Agents」检测项就会触发安装本技能包因此npm install agents是 Think 正常工作的前置条件可用npm ls agents先确认是否已安装。最小 Agent20 行跑通一个聊天机器人Think 的最小实现只需要继承ThinkEnv并实现两个方法import { Think } from cloudflare/think; import { createWorkersAI } from workers-ai-provider; import { routeAgentRequest } from agents; export class MyAgent extends ThinkEnv { getModel() { return createWorkersAI({ binding: this.env.AI })(cf/meta/llama-4-scout-17b-16e-instruct); } getSystemPrompt() { return You are a helpful assistant.; } } export default { fetch: (req, env) routeAgentRequest(req, env) };关键点逐一拆解ThinkEnv泛型参数Env是你的 Worker 绑定类型通常由wrangler types生成见 configuration.md。Think 内部已经为你实现了onChatMessage之类的聊天流程方法你无需再触碰底层。getModel()返回一个 AI SDK v5/v6 兼容的 model 实例。示例使用workers-ai-provider的createWorkersAI绑定 Workers AI 的AIbinding直接调用cf/meta/llama-4-scout-17b-16e-instruct模型——这样无需任何外部 API Key全部走 Cloudflare 的 AI 网关计费。getSystemPrompt()返回系统提示词字符串等价于streamText中的system参数。routeAgentRequest(req, env)Agents SDK 的标准路由入口把/agents/my-agent/{instance-name}之类的请求路由到对应 DO 实例URL 模式细节见 routing.md。注意类名MyAgent在 URL 中会变成 kebab 形式my-agent路由匹配时需精确对应。Wrangler 配置Think 需要experimental标志Think 依赖实验性运行时特性因此experimental兼容性标志是必选项这一点与标准AIChatAgent只需nodejs_compat不同{ compatibility_flags: [nodejs_compat, experimental], durable_objects: { bindings: [{ name: MyAgent, class_name: MyAgent }] }, migrations: [{ tag: v1, new_sqlite_classes: [MyAgent] }], ai: { binding: AI } }配置要点durable_objects.bindings每个 Agent 类都必须有一个 DO bindingname与class_name需要与导出的类名严格一致否则会出现 Namespace not found 错误routing.md 明确指出了这一常见坑。migrationsnew_sqlite_classes声明新建的 SQLite 存储类。规则是永远不要修改旧迁移新增 Agent 类时追加新 tag如v2。ai.binding与getModel()中this.env.AI对应本地联调时如需使用远程 Workers AI可参考 configuration.md 中的建议在.dev.vars或配置里加remote: true。tsconfig 注意切勿开启experimentalDecorators它会破坏 Agents SDK 的callable装饰器该提示同样出现在 configuration.md 的「Key Rules」中是全局性约束。自定义工具Think 自动完成工具循环Think 让你通过覆写getTools()来声明工具之后工具调用、参数解析、结果回填模型全部由框架自动执行——你不再需要像AIChatAgent那样手动把tools塞进每次streamText调用import { tool } from ai; import { z } from zod; export class MyAgent extends ThinkEnv { getTools() { return { getWeather: tool({ description: Get weather, parameters: z.object({ city: z.string() }), execute: async ({ city }) 72°F in ${city} }) }; } }这里的tool()与z均来自 Vercel AI SDK 生态tool()用于定义工具元数据与执行函数zod的z.object({ city: z.string() })负责声明参数 JSON Schema同时为模型提供结构化输入约束。description是模型决定何时调用工具的关键依据务必写得语义明确。Think 还会把返回字符串如72°F in Beijing自动回注给模型继续生成回复整个「请求工具 → 执行 → 反馈」的多轮循环对开发者完全透明。另外值得注意的是Think 内置了 Workspace、execute、browser 等开箱即用的工具见下文的对比表你可以把它们与getTools()中自定义的工具一起参与自动执行。生命周期钩子六阶段接管 Agent 行为Think 通过一组生命周期钩子提供细粒度的定制点下表完整覆盖了原文档定义的六个钩子Hook触发时机典型用途configureSession()Agent 启动时初始化记忆memory、配置上下文提供器context providersbeforeTurn(ctx)每次 LLM 调用之前按轮次动态决定 model / tools / system prompt返回TurnConfigonChunk(chunk)每个流式 chunk 到达时进度追踪、流式 UI 更新onChatResponse(result)一次 LLM 轮次完成后链式调用、追加saveMessages实现服务端主动发消息onChatError(error)LLM 出错时统一错误处理、降级策略beforeTurn是其中最灵活的钩子它接收TurnContext并返回TurnConfig可以针对不同场景切换模型。原文档给出的典型示例是续写轮次降级到便宜模型async beforeTurn(ctx: TurnContext): PromiseTurnConfig { if (ctx.continuation) { return { model: cheaperModel }; } return {}; }ctx.continuation为 true 表示当前是工具执行后的续写轮continuation此时回复通常较短切换到成本更低的模型可以在不明显影响体验的前提下省钱返回空对象{}则代表沿用默认配置。这种「按轮次动态路由模型」的能力在纯手写的AIChatAgent.onChatMessage中是很难优雅实现的那里模型在每次消息里写死参见 streaming-chat.md。configureSession()与记忆系统对接时可以结合 Agents SDK 的this.sqlAPI 自行存取会话数据参考 state-scheduling.md 中的 SQL 用法或接入 MCP 上下文提供器。子 Agent让 Specialist 各司其职Think 支持通过subAgent()在 Agent 内部派生并驱动子 Agent实现多角色协作如把任务委派给专门的 Specialistconst child this.subAgent(SpecialistAgent, specialist-1); await child.chat(Analyze this data..., (chunk) { // stream callback });this.subAgent(SpecialistAgent, specialist-1)第一个参数是子 Agent 的类同样继承自 Think 或 Agents SDK 的 Agent第二个参数是子 Agent 的实例名。子 Agent 作为独立 DO 实例运行拥有自己的状态与 SQLite 存储天然隔离会话。child.chat(message, callback)向子 Agent 发起一次对话第二个参数是流式回调每个 chunk 都会触发可用于实时聚合子 Agent 的产出。这一机制让「调度者 Agent 专业子 Agent」的分层架构成为可能主 Agent 负责意图理解与编排各 Specialist 负责特定领域数据分析、代码审查、搜索等且每个子 Agent 的上下文相互隔离、互不污染。客户端接入与 AIChatAgent 完全相同的 React HooksThink 的客户端 API 与AIChatAgent完全一致意味着你可以直接复用 client-sdk.md 与 streaming-chat.md 中介绍的前端模式const agent useAgent({ agent: MyAgent, name: session-1 }); const { messages, input, handleInputChange, handleSubmit } useAgentChat({ agent });useAgent来自agents/react建立与/agents/my-agent/session-1的 WebSocket 连接返回agent句柄。它同样支持onStateUpdate同步状态、onIdentity回调以及query/queryDeps做查询参数鉴权完整选项见 client-sdk.md。useAgentChat来自cloudflare/ai-chat/react封装聊天输入输出返回messages、input、handleInputChange、handleSubmit、status等。status取值包括ready/streaming/submitted/errorstreaming-chat.md 有完整状态表。消息持久化与可续流Think 内置消息持久化流式 chunk 在传输过程中缓冲进 SQLite客户端断线重连后缓冲的 chunk 会立即补发再继续实时流AIChatAgent的这一行为默认开启Think 同样继承。如果项目不使用 React还可以用agents/client的AgentClientvanilla JS或agentFetch纯 HTTP对接 Think Agent 的可调用方法。Think vs AIChatAgent何时选哪个维度ThinkAIChatAgentstreamText循环内置无需编写需要你在onChatMessage里手写工具执行自动声明getTools()即可需要你手动接线把 tools 传入每次streamText定制方式覆写生命周期钩子在onChatMessage中拥有完全控制权内置工具Workspace、execute、browser无兼容性标志需要experimental标准仅nodejs_compat选择建议选 Think当你的场景是「标准的多轮对话 工具调用」希望以最少样板代码快速上线且能接受experimental标志与 API 可能变动的实验性质。Think 的钩子体系beforeTurn动态换模型、onChatResponse链式编排让多数常见定制无需触碰底层流。选 AIChatAgent当你需要对每次 LLM 调用的输入输出做精细控制例如自定义流式协议、特殊的多模型路由、深度定制 UI 消息流或者你正在使用标准的nodejs_compat配置、不想引入实验性依赖。AIChatAgent 的完整手写范式见 streaming-chat.md其中还包括createUIMessageStream的自定义流方案与messageConcurrency、chatRecovery、maxPersistedMessages等关键属性。此外需要留意Think 属于实验性能力与本技能包中 Voicecloudflare/voice、Codemode、Browse the web 等并列均标注为 experimental见 SKILL.md 的能力清单升级cloudflare/ai-chat到 AI SDK v5/v6 时同样需要关注其兼容性。小结与阅读延伸cloudflare/think的意义在于把 Cloudflare Agents SDK 聊天能力封装到「实现两个方法即可用」的极致模型getModel()、系统提示getSystemPrompt()与工具getTools()是你的全部业务输入streamText循环、工具执行循环、SQLite 消息持久化、可续流传输与 React 客户端集成全部内置。对于需要细粒度行为控制的场景六阶段生命周期钩子与子 Agent 机制提供了足够的扩展深度。想深入掌握本文涉及的底层机制可以继续阅读本技能包内的相关参考references/streaming-chat.md — AIChatAgent 手写范式、可续流原理与useAgentChat状态机references/client-sdk.md —useAgent/AgentClient/agentFetch的完整客户端 APIreferences/configuration.md — wrangler.jsonc 完整配置、Vite 集成与类型生成references/routing.md — URL 路由模式与routeAgentRequest选项references/state-scheduling.md — 状态管理、SQL API 与调度能力SKILL.md — Agents SDK 全量能力地图与安装校验提示Think 仍为实验性 API生产环境使用前请确认所选 Agents SDK / AI SDK 版本对该特性的支持状态并保留experimental兼容性标志的升级预案。赞分享【免费下载链接】autoskillsOne command. Your entire AI skill stack. Installed.项目地址https://gitcode.com/gh_mirrors/au/autoskills点击查看免费下载相关推荐Think Chat SDK Messenger基于 Cloudflare Think 构建 Telegram 原生聊天机器人与会话仪表盘Think Chat SDK Messenger基于 Cloudflare Think 构建 Telegram 原生聊天机器人与会话仪表盘 导读 本文讲解 eAI AgentAgent 框架后端云原生MCP 服务实时通信diagrams 自定义节点内置图标库缺什么就用 Custom 节点画什么手把手diagrams 自定义节点内置图标库缺什么就用 Custom 节点画什么手把手 diagrams 是一个用 Python 代码绘制云架构图的库Dia数据可视化开发工具文档在 Cloudflare Agents 上使用 Vue 构建 WebSocket 聊天应用接入 AI SDK useChat 的完整实践在 Cloudflare Agents 上使用 Vue 构建 WebSocket 聊天应用接入 AI SDK useChat 的完整实践 导读 本文围绕仓库中AI AgentAgent 框架后端云原生MCP 服务实时通信上一篇GraphQL 规范导读从 graphql-spec 仓库读懂查询语言的完整技术栈下一篇Thunderbird Monterail 主题项目推荐创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考