LLM Council 是一个用于高价值决策的多模型协作技能,把三个前沿模型组织成一个“议会”,对同一问题进行独立作答、交叉批判和综合研判。
用途与适用场景
该技能适合以下决策:
- 具有长期后果的架构/设计决策
- 战略抉择(定价、定位、招聘),尤其是 Claude 的“顺从性”可能带来真实风险的场合
- “我这样想对吗?”——挑战问题的框架本身,而非挑战计划
- 用户明确标记为高风险的任何决定
不适合的场景:
- 事实查询
- 存在唯一正确答案的代码问题
- 事前验尸式问题(“可能出什么错”)——应转交 premortem 技能
- 速度优先于深度的场景
议会成员
| 成员 | 调用方式 | 预期偏差 |
|---|---|---|
| Claude(当前会话) | 直接推理 | 务实、亲和、代码导向 |
| GPT-5.5 | codex exec | 怀疑、偏保守、对边界情况敏感 |
| Gemini | gemini -p | 结构化、分类化、偏重归类 |
使用方式
CLI 调用
Codex(GPT-5.5):
TMPF=$(mktemp)
codex exec --skip-git-repo-check -o "$TMPF" "<prompt>"
ANSWER=$(cat "$TMPF") && rm "$TMPF"
- 在受信任目录之外必须使用 --skip-git-repo-check
- -o <file> 只写入最终消息,避免 stdout 中出现冗长前言
Gemini:
gemini -p "<prompt>"
- 直接把答案输出到 stdout
- 可用 -m <model> 固定模型
两条调用应在单条消息中通过两个并行的 Bash 工具调用同时发起,不要串行执行。
三轮流程
第一轮——独立作答
将问题并行发送给三名成员,彼此看不到对方答案。每个成员收到相同提示:用户问题 + 相关上下文 + 指令:
“用不超过 250 字回答。直接。陈述你最强的立场,不要含糊。最后写出你在自己答案中看到的最大风险。”
“自己答案中的最大风险”这一句是承重的——它促使模型主动标记自身弱点,使第二轮更有产出。
第二轮——匿名交叉批判
把另外两份答案发给每个成员,同伴身份匿名为“Model A”和“Model B”。每个模型获得不同的随机 A/B 映射,无法推断身份,也永远不知道哪个答案来自哪个模型家族。
匿名化的原因:防止品牌偏见——讨好已知强的模型、攻击已知弱的模型,或拒绝反对本家族。没有匿名,第二轮的批判会滑向“政治”而非实质。此做法致敬 Karpathy 的 llm-council。
提示:
“另外两个模型回答了同一个问题,身份已匿名。
Model A:…… Model B:……
他们哪里错了?他们哪里对了、而你原本的答案是错的?具体。不要客气。不超过 200 字。”
记录匿名映射,以便在综合步骤中还原身份。面向用户的报告使用真实姓名,只有交叉批判本身是盲评。
这一轮产生真正价值,没有它该技能就只是表演。
第三轮——综合(Claude,当前会话)
阅读全部 6 份输出(3 个答案 + 3 份批判),产出:
- 议会一致之处——1 到 3 点。若全部收敛就直说,不要制造分歧。
- 议会分歧之处——真正的差异。各方最强论点用 1 到 2 句概括。
- 哪个分歧最重要——针对该用户的具体决策,哪个差异应当驱动这次判断。
- 推荐——Claude 的结论。明确说出你在承重分歧上支持哪位成员及原因。
自我偏见检查(定稿前必做):Claude 既是成员(第一轮答案)又是主席(本次综合),这是结构性冲突——Claude 会系统性地高估自己的第一轮答案,因为(a)它拥有其他成员没有的会话上下文,(b)它“感觉”自己是对的。定稿前自问:我支持自己的第一轮答案,是因为它确实更好,还是因为是我写的?如果它胜出的唯一理由是“我有更多上下文”,那不算真正的理由——GPT 和 Gemini 可能捕捉到了 Claude 看不到的盲点。在综合输出中明确写出这一句偏见检查,让用户可以审计。
输出
- 聊天:四段式综合。简洁,以明确推荐结尾。
- 文件(仅当问题重大或用户要求时):在 CWD 写入 council-YYYYMMDD-HHMMSS.md,包含完整记录——问题、第一轮答案、第二轮批判、第三轮综合。时间戳使用 date +%Y%m%d-%H%M%S。
上下文传递
默认情况下 CLI 看不到本会话,但你可以控制放入提示的内容。上下文可传递,只是消耗 token,不要当作硬约束。三种机制按成本递增:
- 让 CLI 读取磁盘文件。codex exec 和 gemini -p 都在工作目录中运行,能自行读文件。最省。当相关上下文已在文件(CLAUDE.md、简报、代码文件)中时使用。
- 内联粘贴摘录。当上下文存在于会话中(已做的决定、已排除的方案、用户显露的偏好),把相关片段粘贴进提示。中等成本。
- 总结会话。对于长会话且逐字粘贴太贵时,写一段简报:已决定什么、已否决什么、用户真正在意什么。有损但可控。
为每位成员构建自包含提示,包含:
- 问题本身
- 相关上下文(粘贴、总结或文件指针)
- 具体约束(预算、时间线、受众、现有技术)——明确写出,不要假设
- 回复长度上限(第一轮 250 字,第二轮 200 字)
经验法则:问题出错的代价决定上下文预算。50 美元的决定不值得为三次 CLI 调用打包 5KB 上下文;5 万美元的决定值得。
真正难以传递的:会话累积的隐含推理、已探索的死胡同、用户的语气。在重要时明确总结这些,不要让它们保持隐含。
主席轮换(进阶)
默认由 Claude(当前会话)担任主席,因为它拥有最丰富的会话上下文,无传递成本。但 Claude 也是成员,存在结构性冲突,会在综合中系统性高估自己的第一轮答案。
若自我偏见检查反复发现真实的过度加权,就轮换主席:
- 把完整上下文(第一轮答案、第二轮批判、原始问题、相关简报)打包成单个提示
- 发送给 Codex 或 Gemini,指令:“你是主席。把议会的发现综合为四段式输出(一致 / 分歧 / 最重要 / 推荐)。直接。”
- 以轮换后的综合作为面向用户报告的基础;Claude 仍添加最终评论
轮换主席消耗更多 token(完整上下文发往冷启动的 CLI),但能在你曾捕捉到 Claude 偏见的高风险决策中消除“成员兼主席”的冲突。
失败处理
- 一个 CLI 失败:用两个成员继续。在综合中说明缺失的声音,重试不要超过一次。
- 三方完全收敛:直说。“议会一致认为 X。推荐:做 X。”制造戏剧性比一致更糟。
- 议会完全不同意用户的框架:明确标出。有时正确的输出是“三个模型都认为你在解决错误的问题”。
- 超时:每次调用包一层 90 秒超时。成员相互独立,一个慢调用不应阻塞综合。
反模式
- 只展示第一/第二轮原始输出而不综合——综合才是产品
- 每个话题都平等对待三个模型,却不给其他模型打包上下文——若没给它们 Claude 拥有的东西,答案会冷且泛。要么打包上下文,要么相应加权
- 把推荐埋在含糊措辞里——以明确结论结尾
- 在简单问题上启动议会——对该技能做硬性门控
- 为省 token 跳过第二轮——第二轮才是价值;没有它就只是问 Claude
与 premortem 组合
如果议会的推荐是带步骤的具体计划(而非单纯的 yes/no 或框架),在结尾加一行:“要不要我对这个计划跑一次事前验尸,在你投入前暴露失败模式?”若推荐可逆/成本低,或用户已表示收尾,则跳过。
冒烟测试
在用于真实决策前,先验证两个 CLI 可用:
gemini -p "say hi in 5 words"
codex exec --skip-git-repo-check -o /tmp/codex-test "say hi in 5 words" && cat /tmp/codex-test
两者都应返回一句简短的话。