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

附录 C:其它 agent 武器速览

主线 10 章把“一台 coding agent 上线“讲透了。但 Cloudflare 2026 Agents Week 还放了一堆周边武器,任何一个都能让 agent 多一个真实交互通道。 本附录每节 1-2 页,只给最小 binding 与代码,看完知道“何时引入、怎么引入、引入后该读哪份全文翻译“。

1. Voice agents — 让 agent 长出耳朵和嘴

:@cloudflare/voice // 待验证(REAL_API_v2 §I.5;本地未 npm pack,以官方 docs 为准:developers.cloudflare.com/agents/api-reference/voice/)

一句话定位:voice 是 agent 的另一种输入,不是另一套架构 —— 同一个 Durable Object,WebSocket 进来的可能是 16kHz PCM 音频也可能是文字,共享同一份 SQLite 状态。

// wrangler.jsonc(增量,沿用主线的 AI binding)
{ "ai": { "binding": "AI" } }
// src/voice-agent.ts
import { Agent } from "agents";
import { withVoice, WorkersAIFluxSTT, WorkersAITTS } from "@cloudflare/voice";

const VoiceAgent = withVoice(Agent);

export class SupportVoiceAgent extends VoiceAgent<Env> {
  transcriber = new WorkersAIFluxSTT(this.env.AI);   // STT
  tts         = new WorkersAITTS(this.env.AI);       // TTS

  async onTurn(transcript: string) {
    // 这里就是普通 LLM 调用,跟文字 agent 一模一样
    return `你说的是:${transcript}`;
  }
}
// 客户端(React)
import { useVoiceAgent } from "@cloudflare/voice/react";
const { connect, disconnect, isListening } = useVoiceAgent({ agent: "SupportVoiceAgent", name: convId });

withVoiceInput(Agent) 是只要 STT 不要 TTS 的变体(语音搜索、口述);VoiceClient 是 framework-agnostic 版本。流式分句:onTurn 返流时 pipeline 按句子切,第一句话就开始合成,Time-to-First-Audio 接近 LLM 首 token。

何时用:客服、IVR、车载、可访问性场景。何时用:延迟极敏感的多人会议(走专门的 SFU)。

延伸阅读:Voice agents

2. Email Service — agent 收发邮件

binding:send_email(出站,public beta)+ Email Routing(入站,GA) docs:developers.cloudflare.com/agents/api-reference/email/

agent 长出“异步通道“:收到一封邮件,跑半小时 workflow,把结果回信。不是聊天机器人,是 agent

// wrangler.jsonc(增量)
{
  "send_email": [{ "name": "EMAIL", "remote": true }]
}
// src/email-agent.ts
import { Agent, routeAgentEmail } from "agents";
import { createAddressBasedEmailResolver, type AgentEmail } from "agents/email";
import PostalMime from "postal-mime";

export class SupportAgent extends Agent {
  async onEmail(email: AgentEmail) {
    const parsed = await PostalMime.parse(await email.getRaw());

    this.setState({
      ...this.state,
      ticket: { from: email.from, subject: parsed.subject, body: parsed.text },
    });

    // 启个 workflow 异步处理,这里可以同步先回个 ack
    await this.sendEmail({
      binding: this.env.EMAIL,
      from: "[email protected]",
      to: this.state.ticket.from,
      inReplyTo: parsed.messageId,
      subject: `Re: ${this.state.ticket.subject}`,
      text: "已收到,稍后回复。",
      secret: this.env.EMAIL_SECRET,    // HMAC 签 reply 头,防伪
    });
  }
}

export default {
  async email(message, env) {
    await routeAgentEmail(message, env, {
      resolver: createAddressBasedEmailResolver("SupportAgent"),
    });
  },
} satisfies ExportedHandler<Env>;

地址路由:[email protected]SupportAgent 实例 support[email protected]SalesAgent 实例 abc(sub-addressing)。SPF / DKIM / DMARC 加域名时自动配。secret 字段开启 secure reply routing,防止伪造 header 把回信路由到别的 agent 实例。

何时用:工单、对账、订阅通知、跨时区异步协作。

延伸阅读:Email Service for agents

3. Browser Run — Live View + CDP + HITL

binding:browser(沿用旧名,@cloudflare/puppeteer / Playwright / Stagehand 都接) 新功能:Live View(实时看 agent 在干啥)、Session Recordings、Chrome DevTools Protocol 直连、WebMCP(Chromium 146+)、并发从 30 升到 120

// wrangler.jsonc
{ "browser": { "binding": "BROWSER" } }
// src/browser-tool.ts
import puppeteer from "@cloudflare/puppeteer";

export async function snapshot(env: Env, url: string) {
  const browser = await puppeteer.launch(env.BROWSER);
  const page = await browser.newPage();
  await page.goto(url);
  const png = await page.screenshot();
  await browser.close();
  return png;
}

CDP 直连(框架无关、任意语言):

// 把任何已有的 puppeteer 脚本一行切到 Browser Run
const browser = await puppeteer.connect({
  browserWSEndpoint: `wss://api.cloudflare.com/client/v4/accounts/${ACCT}/browser-rendering/devtools/browser`,
  headers: { Authorization: `Bearer ${TOKEN}` },
});

Live View / HITL handoff:agent 跑到登录页或验证码,你拿到 session 的 devtoolsFrontendURL,在 Chrome 里打开直接接管点几下,然后还给 agent。这是 2026 真实生产里 prompt injection 之外最大的“agent 卡住“解药。

Quick Actions(REST,10 RPS):/screenshot/pdf/markdown/crawl(整站爬,签名 bot,认 robots.txt)。

何时用:抓内容、自动测试自家 web、长流程 RPA、给浏览器里的 agent 一个真浏览器(WebMCP 让网站直接暴露工具给 agent)。

延伸阅读:Browser Run for AI agents

4. Registrar API(beta)— 让 agent 自己买域名

入口:REST(无 binding),也通过 Cloudflare 自家 MCP server 透出 端点:

  • GET /accounts/{id}/registrar/domain-search
  • POST /accounts/{id}/registrar/domain-check
  • POST /accounts/{id}/registrar/registrations
// src/tools/buy-domain.ts(host 端的 fetch 包装)
export async function searchDomain(env: Env, query: string) {
  const r = await fetch(
    `https://api.cloudflare.com/client/v4/accounts/${env.ACCOUNT_ID}/registrar/domain-search`,
    {
      method: "POST",
      headers: { Authorization: `Bearer ${env.CF_API_TOKEN}`, "content-type": "application/json" },
      body: JSON.stringify({ query }),
    },
  );
  return r.json();
}

export async function registerDomain(env: Env, domain: string) {
  const r = await fetch(
    `https://api.cloudflare.com/client/v4/accounts/${env.ACCOUNT_ID}/registrar/registrations`,
    {
      method: "POST",
      headers: { Authorization: `Bearer ${env.CF_API_TOKEN}`, "content-type": "application/json" },
      body: JSON.stringify({ domain }),
    },
  );
  // 同步;>几秒会返 202 + workflow URL,需要 polling
  return r.json();
}

agent 工作流:用户说“给这个项目找个 .dev 域名注册了“,agent 先 search 拿候选 → check 拿真实价格 → register(用账号默认联系人 + 付款方式,WHOIS privacy 默认开启免费)。at-cost 定价,Cloudflare 不加价。

最佳实践:这一步永远 HITL —— “你要花 $9.99 注册 acmecorp.dev,确认?”,default deny。

何时用:产品脚手架 agent、域名运营 agent。

延伸阅读:Registrar API beta

5. Agent Lee — dashboard 内置 agent(用户视角)

这一节不是给 agent 用的,是给你用的

Agent Lee 是 Cloudflare 在 dashboard 里嵌的故障排查 + 操作 agent,日均 18 000 用户、每天跑 25 万次工具调用。它知道你账户里所有资源(Workers / DNS / R2 / SSL / Tunnel / Cache / API Shield…),你描述意图,它定位、可视化、动手改(写操作走 elicitation 必须人工 confirm)。

用户视角下你能做的:

  • Worker 在 02:00 UTC 开始 503?直接问 Lee:“我 agent-coder 这个 worker 最近一小时错误率怎么样,具体是哪条 route 在出?”
  • 想加一个 DNS 记录:“给 agents.example.com 加一个 CNAME 指向 worker”。
  • 看流量趋势:“过去 24 小时的请求曲线”—— Lee 直接渲染图表,而不是把你跳到 Analytics 页。

架构上:Lee 也用 Agents SDK + Workers AI + Durable Objects,用的是和你完全相同的 lego;它通过 Cloudflare 自家 MCP server(Code Mode 包过的 search + execute)读写你的资源。这意味着你完全能复刻:把你公司内部的 dashboard / 业务系统包一个 MCP server,套个 Think agent,就有了你公司自己的 Lee。

延伸阅读:Introducing Agent Lee


到这里,这本书真的讲完了。还有几个 Agents Week 2026 的话题没单独成节但值得知道:

  • Agent Memory(私测):托管的长期记忆,profile-级别隔离的 DO + Vectorize。等公测后第 5 章会补一节。
  • Sandbox Auth / outboundByHost:沙盒里发出的 HTTP 请求按 host 拦截,可注入 token、可强制走 Mesh。第 6 章已经标 // 待验证。
  • DO Facets:Think 的 sub-agent 内部就用它实现,你也能直接 this.ctx.facets.get(...) 自己用。
  • cf CLI(技术预览):未来会和 wrangler 合并;现在前言提一笔,主线还用 wrangler。

主线学到这里,这些都是可选项。挑感兴趣的接,就行。