编程 Advisor Strategy 落地笔记:让执行模型自己决定何时去问 Opus

2026-08-30 15:25:51 views 5

Anthropic 的 Advisor Strategy(顾问策略)概念我们之前聊过一层:Opus 做大脑、Sonnet 做手脚的工程哲学。这篇不谈哲学,谈落地——advisor 工具在 Messages API 里怎么声明、成本怎么控、pause_turn 恢复和 result variants 这些坑、以及什么时候根本不该用。

它解决的是哪个具体问题

跑长流程 agent 时你通常有两个选择:全程用最强模型,稳但贵;用中档模型跑,便宜,但任务里总有那么一两个判断点需要更强推理,而等你发现时,executor 已经基于错误的判断继续走了很多步。

自己写 escalation 是常规做法:检测难 case → 打包上下文 → 调一个更大的模型 → 把回答拼回去。这套方案麻烦在上下文管理——你传给大模型的上下文跟 executor 手里的是不是一致、拼接后格式会不会坏,都要自己兜底。

Advisor tool 把这段流程做成了平台原生的 server-side tool:executor 自己决定什么时候求助,一次 /v1/messages 请求内完成全部模型交接,你这边不需要额外的 round-trip。

核心机制

advisor_20260301 加到 tools 数组,加 beta header anthropic-beta: advisor-tool-2026-03-01

{
  "model": "claude-sonnet-4-5",
  "max_tokens": 8000,
  "tools": [
    {"name": "advisor_20260301", "type": "server_tool", "max_uses": 3},
    {"name": "bash", "type": "bash_20250124"}
  ],
  "messages": []
}

流程是这样:

  1. executor 发出 server_tool_use 块,name: "advisor"input 为空——时机由它决定,上下文由服务端提供。
  2. 服务端在 advisor 模型上单独跑一次推理。advisor 读到的是完整会话转录:你的 system prompt、工具定义、之前所有轮次和工具结果、以及本轮 executor 已经生成的文本。
  3. advisor 的返回作为 advisor_tool_result 回到 executor。
  4. executor 带着建议继续生成。

关键约束:

  • advisor 不调用任何工具、不产出用户可见输出,只给 plan / correction / stop signal。
  • advisor 的 thinking block 在返回前被丢弃,只有建议文本到达 executor。
  • advisor 模型不能弱于 executor,非法配对在创建时就 400 报错,而不是运行时才炸。

成本:钱花在哪、怎么封顶

钱是分层的。executor 的 token 按 executor 模型费率算,advisor 的 token 按 advisor 模型费率算——而 advisor 通常只产出 400–700 个文本 token(一份短 plan),大头输出全部在便宜档完成。所以整体成本远低于用 advisor 模型全程跑。

官方给了个参考数据:BrowseComp 上 Haiku 单独跑 19.7%,配上 Opus advisor 到 41.2%;比单独 Sonnet 低 29% 的分,但每任务成本低 85%。注意这个收益会随 executor 能力逼近 advisor 而缩小——能力差距越大越划算。

成本控制上两个抓手:

  • max_uses:给 advisor 的调用次数设上限,防止它被过度求助。
  • usage 块里 advisor token 单独统计,方便按 tier 追踪开销。

我建议在代码里把 advisor 的调用次数和 token 单独记日志,压测时看「每次 advisor 调用平均省了多少 executor token」,这个比值才是这个模式对你值不值得的硬指标。

两个容易踩的坑

1. pause_turn 恢复

一次响应可能以 stop_reason: "pause_turn" 结尾,同时 advisor 调用还 pending——响应里带着 advisor 的 server_tool_use 块但没有对应的 advisor_tool_result。要恢复:把这段 assistant message 原样 append 到 messages(保留 server_tool_use 块),带着同样的 advisor 工具和 beta header 重新发请求,不用加 user message 或 tool_result。如果恢复请求里漏了 advisor 工具,会返回 400 invalid_request_error,因为 pending 的 server_tool_use 块没有工具可跑。

2. result variants

新一点的 advisor 模型返回的 advisor_tool_result.content 可能是加密的 advisor_redacted_result 变体,服务端在下一轮解密并渲染进 executor 的 prompt。这要求你原样回传 advisor_tool_result 块——别在中间做任何清洗或重写。

什么时候不该用

不是所有任务都值得。官方文档点名的弱适用场景:

  • 单轮问答:没有可 plan 的东西,advisor 帮不上忙。
  • 纯 pass-through 的模型选择器:用户已经自己选了成本/质量档位。
  • 每一轮都需要 advisor 全量能力的工作——这种情况直接把任务跑在 advisor 模型上更简单。

我自己加一条判断:如果 executor 90% 的轮次都靠自身能力就够,只有少数决策点需要更高推理,这个模式收益最大。 如果 executor 动不动就求助,说明模型配对选错了,先换更强的 executor,而不是加 advisor 调用预算。

配对的实践要点

  • 咨询策略(什么时候去问)是写在 system prompt 里的,工具本身不带参数。
  • 建议在写实质代码前、commit 前、构建下一步之前调用 advisor——先有 plan,再让 plan 流进你的 todo/planner 工具,而不是让 executor 闷头写完一大段再让 advisor 来纠偏。
  • Managed Agents 里也有等价的写法:在 multiagent.agents 里放 {"type": "advisor", "model": ...},占用保留名 anthropic.advisor,一个 roster 最多一个;advisor 咨询线程不占 25 线程的并发上限,咨询失败也不会让 agent 那一轮挂掉(只会收到一条通用失败通知继续跑)。

需要你自行验证的部分

模型具体型号名、advisor_20260301 和 beta header 的生效版本、以及费率,都在快速迭代,写代码前以官方文档为准。上面 BrowseComp 的数据来自官方博客,我在自己的负载里跑出来的收益曲线跟它不一定一致——你的任务形态决定一切,先跑一轮 eval 对比「Sonnet 单独 / Sonnet+Opus advisor / Opus 单独」再定方案。

复制全文 生成海报 Advisor Strategy Claude LLM Agent 成本优化 API

推荐文章

程序员茄子在线接单