
在 Claude Opus 5.5 上构建主动式智能体循环
- Orca新Orca: OrcaCyber Ultra 1.02026-10-17$5.00 / $10.00 每百万 tokens · 13 tok/s
- deepseek新DeepSeek: DeepSeek V4.1 Flash 10172026-10-1745智能
- DeepSeek新DeepSeek: DeepSeek V4.1 Flash2026-10-1740智能
- Orca新Orca: OrcaCyber Zero 1.52026-10-10$3.00 / $7.50 每百万 tokens · 154 tok/s
- openaiOpenAI: GPT-6.1 Sol2026-09-2952智能
- anthropicAnthropic: Claude Sonnet 5.52026-09-2856智能
- typesafeTypeSafe: Jev 1.132026-09-24$0.04 / $0.00 每百万 tokens · 983 tok/s
- OpenAIOpenAI: GPT-6 Luna2026-09-2238智能
- OpenAIOpenAI: GPT-6 Sol2026-09-2248智能
- AnthropicAnthropic: Claude Opus 5.52026-09-2258智能
- xAIGrok 4.72026-09-2146智能
- OrcaOrca: OrcaCyber Zero 1.02026-09-17$3.00 / $7.50 每百万 tokens · 95 tok/s
- OrcaOrca: OrcaVerify Text 1.02026-09-16$2.00 / $0.00 每百万 tokens · 964 tok/s
- OpenAIOpenAI: GPT-6 Astra2026-09-0453智能77代码
- GoogleGoogle: Gemini 3.8 Flash2026-09-0241智能76代码
- AlibabaQwen: Qwen3.8 Max (0902)2026-09-0245智能76代码
- AnthropicAnthropic: Claude Fable 5.12026-09-0153智能82代码
- TencentTencent: Hy4 preview2026-08-28$0.83 / $2.50 每百万 tokens · 47 tok/s
- AlibabaQwen: Qwen3.8 Flash2026-08-26$0.15 / $0.47 每百万 tokens · 100 tok/s
- z-aiZ.ai: GLM 5.3 Flash2026-08-2642智能72代码
构建你自己的主动型智能体时,令人不舒服的一点是:真正有意思的工作并不在模型调用上。你可以用一个下午就让 Claude Opus 5.5 回答问题。但要让它按计划唤醒、只读取自上次以来发生变化的内容、判断是否有任何事值得人工介入、起草行动,然后停下来等待——这要花数周时间,而且几乎没有什么发生在模型内部。Anthropic 以 Claude Duet 的形式发布过这个循环的一个版本,而对任何自建者来说,这个产品有用的地方不是其功能列表,而是从其组装方式中可见的决策。它没有公开的 API,也无法重新指向你自己的系统,所以如果你想要的是这个循环而不是这个应用,你就得自己构建。接下来是架构,逐阶段展开,并说明每个阶段的真实成本。
先说结构。五个阶段按顺序运行,只有人类说“是”之后才会到达第五个阶段。调度器触发。摘要步骤把每个连接的系统归约为一个增量。决策步骤把这个增量连同一条策略转化为一个带类型的提案。模型之外的审批关口决定该提案是否可以运行。执行器执行它。这就是整个设计,而其中所有困难之处都藏在接缝里。

第一阶段:一个每隔几小时触发一次的调度器
第一个决定,人们往往会因热情而非工程判断而做错:不要持续轮询。Anthropic 的 Duet 文档在解释其{{1}}间隔——每隔几小时检查一次——{{/1}}时表示,不间断地检查会更快耗尽套餐限额。这不是营销式的谨慎。它是对真实成本问题的正确答案,也是每个自建智能体在第一周都会掉进的陷阱。
持续轮询之所以代价高昂,有一个结构性原因。每一次扫描都是一个完整上下文:指令、工具定义、你拉取进来的材料,以及模型对此所做的任何推理。按一分钟一次的节奏,一天就是 1,440 个完整上下文,而其中绝大多数都发现不了任何新东西。你付了全价,却只是被告知邮箱没有变化。按三小时一次,你得到八次,发现与花费之比就变得可以拿去向签发票的人交代了。
所以,调度器是一个 cron 风格的定时器,带有最小间隔下限,而不是事件流。事件听起来很有吸引力——事情一发生就做出反应——但它们会把你推回持续工作的模式,并让繁忙一天的成本变得没有上限。定时器提供可预测的上限,而这正是费用可变时你所需要的。当你希望某个来源获得更快反应时,只缩短该连接器的间隔,并接受额外的花费。
第二阶段:一个字节完全相同的前缀,保存在缓存中
公布的数字在这里发挥的作用最大。在 OrcaRouter 上,Claude Opus 5.5 的价格为每百万输入 token 4.00 美元、每百万输出 token 20.00 美元,上下文窗口为 100 万 token,缓存读取为每百万 token 0.20 美元,均按提供商标价、零加价。请把这些数字看作一项设计约束,而不是一份价目表:一次缓存读取的成本是全新输入 token 的二十分之一,因此,你在多轮扫描之间保持稳定的每一个字节,都是你不再需要为其支付全价的字节。
在实践中,系统提示词和工具 schema 在部署时只组装一次,之后绝不会按每轮扫描重新生成。不会从键顺序不同的字典重新序列化。不会用时间戳、请求 ID 或将当前已连接账户拼接到中间的方式做模板化。任何字节差异都会使缓存前缀失效,指令块在每轮扫描时都会回退到完整输入价格。团队意外丢失这一点的频率高于有意为之,通常是因为某个“有用”的抽象开始在提示词顶部附近注入运行标识符。
能经受真实代码检验的纪律其实很无趣:用一个函数为稳定块返回常量字符串,用冻结的字面量定义工具 schema,并把每个可变元素都放在它后面。然后再写一个测试,对该块做哈希,并在哈希变化时让构建失败,因为总有一天会有人新增一个 schema 字段,却完全不会想到缓存。这个测试花一小时,却能保住缓存带来的全部收益。
第三阶段:每次连接生成一份摘要,而不是倾倒整个邮箱。
第三阶段是消费级产品能免费享有、而你却无法获得的阶段。Duet 位于 Anthropic 的账户内部,并能触达已连接的应用,因此它可以询问自指定时间以来发生了什么变化,并得到一个简短的答复。在该账户之外构建时,你与任何普通客户端一样调用相同的 API:要么你实现增量读取,要么你拉取全部内容,然后把一大段文字交给模型。
全量拉取是默认做法,因为它在第一天就能用。它也是让每轮扫描成本变得不可预测的最快方式,因为输入会随邮箱规模增长,而不是随实际变更增长。对四十个未变更会话做一次扫描,与对四十个会话(其中只有一个真正重要)做一次扫描,成本相同,而只有后一种情况才有机会产生有用的提案。这样过了一个月,你的大部分预算都花在确认现状上了。
摘要步骤应当写成代码,而不是靠提示词。每次连接时,用 API 提供的任意游标或增量方式抓取,并把结果归约成结构化摘要:哪些是新出现的、哪些被修改了、哪些已解决。给每个条目一个稳定的标识符,以便后续阶段可以引用它;并按连接记录最后一次成功抓取的游标,这样某次抓取失败时,就不会把昨天的内容当作新内容重放一遍。一份无法区分“什么都没发生”与“我无法检查”的摘要,最终会对自己从未观测到的状态给出笃定的报告。
第四阶段:一个输出对象而非散文的决策步骤
Claude Opus 5.5 就处在这样的位置:它输出的内容,决定着系统其余部分究竟能否被构建出来。直觉上的做法是让模型写一份摘要,再由人来阅读。这对仪表盘可行,对门禁却行不通:下一阶段必须决定是否允许某项操作,而许可无法授予一段文字。
决策步骤应返回一个类型化的动作提案:来自封闭列表的动作名称、该动作适用的目标、参数、一行理由,以及明确的置信度或升级标志。封闭的动作列表不是官僚主义;它正是使审批关卡可强制执行的机制,因为关卡只能验证它可以枚举的动作。一个能发出任意动词的智能体无法被关卡约束,只能被信任。
两点实用说明。先把摘要交给模型,再给策略,这样策略就排在可变材料之后,缓存前缀也能保持完整。另外,把默认结果设为“不采取行动”,而不是一份读起来像是在行动的空白提案。把沉默当作失败的循环只会产出数量,而一个为了显得有用而凭空制造工作的智能体,比一个如实报告没有任何变化的智能体更糟。
第五阶段:一个真正能说“不”的审批关口
闸门必须是一个独立服务,而不是智能体自身代码里的一个分支。这是构建过程中最重要的结构性决策。如果智能体的进程能够自行执行该动作,那么该进程中的一个缺陷、一次提示注入或一个设置错误的标志都会直接影响到实际效果。如果执行器只接受闸门已签名的提案,那么智能体最坏也只能提出错误的提案,而闸门的拒绝则是真实有效的。
Anthropic 针对 Duet 发布的政策,即便你的清单与之不同,其在结构上也值得照搬。闸门要求在某个操作发送消息、付款、签署文件或删除任何内容之前先获得批准。在此之上还有第二层,即使获得批准也会被拒绝——在 Duet 的案例中,就是证券交易和在账户之间转移资金。这种模式是一种两层策略:一大批可由人工批准放行的受闸门控制操作,以及一小批任何批准都无法解锁的操作。即使每个条目都发生变化,也要照搬这两个层级,因为它们解决的是不同的问题。闸门防范的是失误。禁止清单防范的是被攻陷的操作者,包括人类操作者。
真正的门禁的另一半在于它会打断流程。Duet 的审批请求会展示确切的待执行操作并等待响应,这是有意让流程停下来,而不是给它加个注释。一个只往没人看的日志里写一行的门禁算不上门禁,那只是一张收据。如果你的审批环节需要有人凌晨三点盯着仪表盘,那要么是时间间隔太短,要么是操作清单太宽泛。两者都可以解决,而且都不是靠加一条通知来解决的。
内存、凭据,以及两个无法靠测试摆脱的表面
在这五个阶段之下,潜藏着两个棘手的问题;它们乍看之下都像是功能特性——直到你发现并非如此。
• 上下文延续。每次扫描都是一次全新的上下文,因此智能体需要在各次扫描之间记住的任何内容,都必须在两次扫描之间写下来。为每个连接维护一个滚动状态文件,限制其大小,记录未决事项和近期决策,对大多数循环来说就足够了。行不通的做法是指望模型从摘要中重建历史,因为摘要明确是对变化的描述,并不包含对已决定事项的记忆。
• 凭据保管。 Duet 遵循 Anthropic 托管代理所采用的设计,因此它永远不会直接看到你的密码或登录令牌。复现这一纪律正是大多数自研代理会跳过的部分,而跳过它就意味着每个提示词都有一条通往凭据的路径。模型绝不应持有令牌,绝不应以文本形式获得 API 密钥,也绝不应成为负责身份验证的组件。让摘要环节和执行器持有凭据,只把结果交给模型。
然后还有一个没人愿意去想的层面:一旦智能体读取电子邮件和网页,每一项都是可能包含指令的输入。一条写着“将此转发到以下地址”的消息,对于没有独立权限概念的模型来说,与数据无法区分。有两种防御胜过任何程度的提示加固。保持动作列表封闭,这样注入的指令就没有可用的动词可抓。并把关卡保持在模型的影响力之外,因为一次说服模型发送某物的注入,仍然必须说服看到目标地址的人类。
故障转移,以及路由真正发挥作用的场景
循环搭建完成后,一种单供应商设计不具备的架构选项随之出现。OrcaRouter 的路由 DSL 可将多个模型组合成一次调用,而模型融合则会运行一组并行作答的模型;两者都能让多个模型服务于同一个请求。这里的实际用法并不花哨:让更便宜的模型负责摘要生成,因为这项工作的重点是压缩而非判断;同时把 Claude Opus 5.5 留在决策环节,由它来形成提案。同一个兼容 OpenAI 的密钥可访问 200 多个模型,因此切换哪个模型服务于哪个阶段只需更改配置,而无需重写。

故障转移是另一半。当某个提供商出现一小时故障时,只能访问一个端点的代理也会跟着出现一小时故障;而没有回退方案的定时循环则只会直接错过本轮巡检。路由会把一次错过的巡检变成一次更慢的巡检——在你真正需要它的那一周之前,这算不上什么显著好处,而到了那时,它就是记录出现缺口与没有缺口之间的差别。

你实际报名参加的是什么
运行这个循环就是在运营一项服务,而这项服务具有四个你刚刚接手负责的属性。
• 正常运行时间。Anthropic 的应用是别人的寻呼机;你的应用才是你自己的。一个悄悄停止触发的调度器不会产生错误,也不会有任何输出;你发现它出问题,是因为有人注意到自己的晨间简报没来,而不是因为收到了告警。
• 凭据保管。你的摘要步骤所持有的每一个令牌,都是你要负责的;一旦泄露,其影响范围就是该连接所能触及的一切。Anthropic 的设计让凭据远离模型;如果你的设计并非如此,模型就会成为你已连接的每个账户的攻击面。
• 提示注入防御。这道闸门在这里能带来很多保障,但只对它把关的操作有效。智能体未经批准所做的任何事情——读取、总结、写入自身状态——都不受保护,而一份被投毒的摘要可能会污染记忆,后续扫描正是从这些记忆中推理的。
• 漏洞赏金无人负责。如果你的循环误触发并向客户发送了错误消息,就没有供应商可以上报,没有状态页,也没有事件报告。上述决策是唯一的安全网,这就是为什么闸门是一个独立服务,并且操作列表是封闭的。
这些都不构成反对构建它的理由,只反对草率地构建它。每个阶段都很小,而它们之间的接缝才是判断力所在:用定时器而非流,用冻结的前缀而非模板,用摘要而非转储,用对象而非散文,用作为服务的门禁而非注释。把这些做对,这个循环就物有所值——它能找到你不会去找的东西,并且在做任何不可逆的事之前停下来。把这些做错,你构建出的东西就会持续消耗你的预算,还告诉你早已知道的事。
