附录 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 实例。
何时用:工单、对账、订阅通知、跨时区异步协作。
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-searchPOST /accounts/{id}/registrar/domain-checkPOST /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。
到这里,这本书真的讲完了。还有几个 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。
主线学到这里,这些都是可选项。挑感兴趣的接,就行。