增长案例库 Maxed 归档 AI自动化综合

Claude 不是你最好的模型,而是你最好的经理

Claude isn't your best model, It's your best manager.

中文译文 · 13k 字

一句话摘要

重新认识 Claude 的管理者角色

Claude 不是你最强的模型,而是你最好的管理者。2026 年 7 月 1 日 · 10 分钟阅读 · 查看原文 ↗ Claude AI 营销 所有人都在争哪个 LLM 最聪明,这是场错误的争夺。在一个严肃的系统里,最重要的模型并不是一个"员工"——而是那个决定员工该做什么、并判断他们做得怎么样的模型。 把这个角色称作"元控制器"(meta-controller)。下面是从第一性原理出发的论证:为什么 Claude 更适合这个位置,而不是员工的座位——以及构建一个这样的系统的完整代码:它负责规划、委派给 Grok / GPT / Llama、批判结果,然后重写它自己的策略。 大家问的那个问题本身就是错的 "哪个模型最好?"这个问法默认了由单一模型包办一切。真实的系统并不是这样运作的。它们有劳动分工:便宜的模型做批量工作,快的模型处理延迟敏感的任务,专门的模型应对狭窄领域,前沿模型负责艰难推理。 一旦你有了很多个模型,就会出现一个新的职位——一个在你只有一个模型时不存在的职位。必须有人决定什么任务分给谁、检查返回的结果、并在计划失败时修正计划。这不是一个员工。这是一个管理者。 别再问"哪个模型最好"。要问"哪个模型适合哪个角色"。稀缺的、高杠杆的角色并不是最聪明的员工——而是那个负责路由、判断和修订的控制器。 第一性原理:控制器才是瓶颈 这是一道从没有人放上幻灯片计算题。错误在多步骤系统中会复合。如果每一步有 90% 的可靠性,而你把其中五步串起来、中间不做任何纠错: 一条由优秀模型组成的流水线仍然会产生平庸的结果,因为小的失败会不断相乘。唯一能打破这种复合的,是一个能捕捉并纠正错误的步骤——一个检查每个结果、并对失败的环节重新执行的控制器。 在一条链里,质量的上限由"验证"决定,而不是由最强的那个环节决定。一支由优秀员工组成、却配了虚弱控制器的队伍,会输给一支由普通员工组成、却配了强力控制器的队伍。 所以控制器的工作在本质上与员工不同。员工需要知识和技能。控制器需要推理能力、对整体任务的记忆、可靠性,以及诚实的判断力。这些才是选择的标准——而不是那些琐碎的基准测试。 控制器这个角色真正要求什么 从这份工作推导出需求,然后再挑选模型。控制器必须做到: 分解与规划——把一个模糊的目标转化为一张经过路由的子任务图。纯粹的推理。 在上下文中承载整个系统——每一个子结果、每一次失败、正在运行的计划。长上下文是不可妥协的。 严格遵循协议——每一次都输出有效的路由决策。一个在自己的输出格式上"发挥创意"的控制器,会让整个系统崩溃。 诚实地判断——对刚被它编排出来的工作说出"这失败了"。是经过校准的自我批判,而不是加油鼓劲。 在压力下保持可控——不漂移、不失控、不在漫长的运行中悄悄改变目标。 为什么 Claude 适合管理者的座位 把那些需求映射到 Claude 被构建出来的用途上,这种契合并非偶然: 可控性与可靠性。宪法式 AI(Constitutional AI)训练模型去始终如一地遵循一组明确的准则。对一个控制器来说,"一遍又一遍地严格按协议执行"比多几分原始能力更有价值。一个才华横溢、却有 5% 概率无视你输出格式的控制器,是一个坏掉的控制器。 推理深度。分解、路由和批判都是推理任务。这正是你最想要最强大思考者的地方,也是唯一一个值得付前沿模型价格的座位,因为控制器只有一个,而员工有很多个。 长上下文。控制器必须看到整个运行过程——计划、每一个员工输出、每一个判定——才能做出下一个决策。它是整个系统里最渴求上下文的座位。 敢于说不的意愿。一个好的批判者会让该失败的工作失败。一个只会吹捧自己计划的模型,作为裁判毫无用处。(关于自我评判的陷阱,详见下文。) 这是一个关于角色的论证,而不是品牌忠诚。其他模型往往能成为更好的员工——更便宜、更快、或在某个细分领域更强。Grok 适合新鲜的网络信息,一个小的本地模型适合批量分类,一个代码专精模型适合生成。这里的结论是收窄的:Claude 很适合控制器的座位。在信任任何人的说法之前,先对你的路由做基准测试。 架构 一个大脑,多双手。Claude 戴四顶帽子——规划者、路由器、批判者、综合者。其余的一切都是可替换的员工。 代码——一个接口封装多个模型 从那个让一切变得干净的无聊部分开始:把每个服务提供商藏在一个统一的调用后面。(这里的模型 ID 只是示例——请查看每个提供商的当前文档。) 代码——Claude 做规划与路由 控制器把目标转化成一个经过路由的子任务列表。强制输出 JSON,让结果可被机器使用,并剥掉代码围栏(这是每个人都会踩到的一个坑): "只返回 JSON"能生效,但仍可能漂移。对于任何真正重要的东西,用工具调用(tool use)来强制格式——把计划定义为一个工具,让 Claude 去填参数。这样结构就不会被破坏,你也就完全删掉了 strip_fences。 代码——并行地把任务分发给员工 代码——Claude 批判结果 这是承重的一步。控制器读取每一个输出,并为每个子任务返回一个判定:保留、重试、或交给另一个模型。 让 Claude 去批判一份 Claude 自己写的计划,会共享同样的盲区——这正是我们在任何自我审查中都会遇到的弱点。所以在存在真值(ground truth)的地方,用它来代替意见:跑测试、执行代码、拿数字去对照来源。把模型批判留给真正主观的判断(清晰度、综合质量)——而不是作为唯一的门槛。 代码——内层循环(修正输出) 递归的一步——Claude 重写它自己的策略 内层循环修正糟糕的输出。但有时候输出是没问题的,错的是计划本身——糟糕的分解、用错了模型、缺了一个步骤。员工循环修不了这个。只有回看整个尝试过程的控制器才能做到。 让这一切变成递归的那个区分 内层循环:"这个答案失败了——重做它。"外层循环:"这个方法失败了——重新设计它。"第二个,才是控制器在改进它自己的架构,而不只是它的输出。那就是元控制器。 把整个流程读一遍,整个想法就通了: 会咬你一口的那个部分 元控制器不是免费的。控制器能看到一切,所以它的上下文和它的账单——会随着运行而增长。每一次批判、每一次重新规划,都是在员工之上额外加的一次前沿模型调用。 护栏,而不是感觉 给它一个硬上限:整个运行的 token/美元预算、内层轮次和外层尝试的最大值,以及一条规则——当它触到任何一个上限时,就转交给人类。留意两种失效模式:控制器把一个简单任务过度分解成十次调用;以及两个员工在没有任何真值来裁决的情况下互相矛盾。记录下整个追踪日志,这样你就能看出到底是哪一种。 什么时候不该构建这个东西 跳过控制器 一次性任务。任何单个强力模型一次调用就能搞定的事。在这种情况下,元控制器只会增加延迟、成本,以及新的失败方式。 构建控制器 多步骤工作、混合任务类型、真实的成本压力(把便宜的工作路由给便宜的模型),或者那些你不能在未经验证的情况下就交付的输出。这才是路由 + 批判能收回成本的地方。 要记住的心智模型 不要雇一个最聪明的天才、然后让他包办一切。雇一个优秀的管理者,给他一支专家团队,让管理者去规划工作、检查工作,并在失败时重新思考计划。 员工是可替换的。下个月就用下一个热门模型换掉 Grok。控制器才是你值得投入的部分——因为只有这个座位,其推理、记忆、可靠性和诚实判断决定了整个系统能否运转。 一句话 为员工座位挑选你的模型。为管理者座位打造你的控制器。它们不是同一份工作,而把它们搞混,正是大多数多模型系统表现还不如单一好模型的原因。 你构建你自己的生活——所以请选择正确的道路。如果这对你有用——关注。 提示词 class Budget: def __init__(self, usd): self.left = usd def charge(self, model, tok_in, tok_out): self.left -= cost(model, tok_in, tok_out) if self.left <= 0: raise RuntimeError("budget exhausted — handing off to human") def execute(objective, prior=None, max_rounds=3): subtasks = plan(objective, prior)["subtasks"] results = dispatch(subtasks) for _ in range(max_rounds): verdicts = critique(results) failing = [v for v in verdicts if v["verdict"] != "PASS"] if not failing: break for v in failing: # retry or reroute only what failed t = next(r for r in results if r["id"] == v["id"]) t["worker"] = v["reroute_to"] or t["worker"] t["output"] = call_model(t["worker"], WORKER_SYSTEM, t["goal"]) return synthesize(objective, results), results def synthesize(objective, results): prompt = f"Objective: {objective}\n\nParts:\n" + json.dumps(results, ensure_ascii=False) return call_model("claude", "Merge the parts into one coherent answer.", prompt) import json, re def strip_fences(s): # models love wrapping JSON in json return re.sub(r"^(json)?|$", "", s.strip(), flags=re.M).strip() PLANNER_SYSTEM = """You are the controller of a multi-model system. Decompose the objective into the FEWEST subtasks that solve it. For each, pick the best worker and justify the choice by capability, not habit. Respond with JSON only — no prose, no fences.""" WORKERS = """grok — real-time web, current events (medium cost) gpt — general reasoning, broad knowledge (high cost) llama — bulk text, classification, drafts (near-zero cost)""" def plan(objective, prior=None): prompt = f"""OBJECTIVE: {objective} WORKERS: {WORKERS} """ if prior: # outer loop feeds last critique back in prompt += f"\nLAST ATTEMPT FAILED BECAUSE:\n{prior}\nFix the STRATEGY.\n" prompt += """ Return: {"subtasks":[ {"id":"t1","goal":"...","worker":"grok","reason":"..."}]}""" return json.loads(strip_fences(call_model("claude", PLANNER_SYSTEM, prompt))) ARCHITECT_SYSTEM = """You are reviewing your own orchestration strategy. Look past individual outputs. Did the DECOMPOSITION or ROUTING itself fail? Return JSON: {"good_enough":bool, "diagnosis":"...", "fix":"..."}""" def meta_loop(objective, max_attempts=2): lesson = None for attempt in range(max_attempts): answer, trace = execute(objective, prior=lesson) # plan is informed by last lesson review = json.loads(strip_fences(call_model( "claude", ARCHITECT_SYSTEM, f"Objective: {objective}\nWhat we tried:\n{json.dumps(trace, ensure_ascii=False)}"))) if review["good_enough"]: break lesson = review["diagnosis"] + " → " + review["fix"] # feeds back into plan() return answer from concurrent.futures import ThreadPoolExecutor WORKER_SYSTEM = "Do exactly the task. Be concise. State assumptions." def dispatch(subtasks): def run(t): out = call_model(t["worker"], WORKER_SYSTEM, t["goal"]) return {**t, "output": out} with ThreadPoolExecutor(max_workers=4) as pool: # independent subtasks run at once return list(pool.map(run, subtasks)) meta_loop └─ plan Claude 设计架构 └─ dispatch 员工(Grok / GPT / Llama)并行执行 └─ critique Claude 判断每个结果 ← 内层循环 ↺ └─ review Claude 判断"策略"本身 ← 外层循环 ↺ └─ 带着经验教训重新规划,或停止 0.90 ^ 5 = 0.59 # 五个好模型,端到端只剩 59% 0.95 ^ 5 = 0.77 # 即使是极好的模型,串联后也会衰减 ┌─────────────────────────┐ │ CLAUDE(控制器) │ │ 规划 · 路由 · 判断 │ └───────────┬─────────────┘ ┌─────────────────┼─────────────────┐ ▼ ▼ ▼ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ Grok │ │ GPT │ │ Llama │ │ 网页/当下 │ │ 通用 │ │ 便宜 │ └────┬─────┘ └────┬─────┘ └────┬─────┘ └─────────────────┼─────────────────┘ ▼ ┌─────────────────────────┐ │ CLAUDE 批判 ↺ │ │ 通过 / 重试 / 改路由 │ └─────────────────────────┘ CRITIC_SYSTEM = """You are the critic. You did NOT produce these outputs. Judge each against its goal. Be strict: a false PASS is the worst outcome. For each subtask return verdict = PASS | RETRY | REROUTE. If REROUTE, name a better worker. JSON only.""" def critique(results): prompt = ("Judge each result:\n\n" + json.dumps(results, ensure_ascii=False, indent=2) + """\n\nReturn: {"verdicts":[ {"id":"t1","verdict":"PASS","reason":"...","reroute_to":null}]}""") return json.loads(strip_fences(call_model("claude", CRITIC_SYSTEM, prompt)))["verdicts"] from anthropic import Anthropic from openai import OpenAI # OpenAI, xAI, and local vLLM/Ollama all speak this shape anthropic = Anthropic() clients = { "openai": OpenAI(), "xai": OpenAI(base_url="https://api.x.ai/v1"), "local": OpenAI(base_url="http://localhost:11434/v1"), } MODELS = { "claude": {"provider":"anthropic", "id":"claude-opus-4-8"}, # the controller "gpt": {"provider":"openai", "id":"gpt-5.1"}, "grok": {"provider":"xai", "id":"grok-4"}, "llama": {"provider":"local", "id":"llama-4-70b"}, } def call_model(name, system, prompt, max_tokens=2000): m = MODELS[name] if m["provider"] == "anthropic": r = anthropic.messages.create( model=m["id"], max_tokens=max_tokens, system=system, messages=[{"role":"user", "content":prompt}], ) return r.content[0].text r = clients[m["provider"]].chat.completions.create( model=m["id"], messages=[{"role":"system","content":system}, {"role":"user","content":prompt}], ) return r.choices[0].message.content 标签:# X # Claude # AI # 营销 # Chatgpt # Grok 相关文章 如何打造一家 AI 原生的公司:招聘、标准与节奏 *我们花了一年时间办黑客松、AI 培训、答疑时段。但直到我们把 AI 能力变成一项硬性要求,一切才真正开始改变。* AI Loops Claude 营销

原文参考:https://maxed.wiki/posts/claude-isn-t-your-best-model-it-s-your-best-manager/ (Maxed.wiki,本页为站内中文整理)