SuperAPI AI 工具集

llm-council

智能体与模型

查看项目

更新于 10-16 06:06

技能介绍

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. 议会一致之处——1 到 3 点。若全部收敛就直说,不要制造分歧。
  2. 议会分歧之处——真正的差异。各方最强论点用 1 到 2 句概括。
  3. 哪个分歧最重要——针对该用户的具体决策,哪个差异应当驱动这次判断。
  4. 推荐——Claude 的结论。明确说出你在承重分歧上支持哪位成员及原因。

自我偏见检查(定稿前必做):Claude 既是成员(第一轮答案)又是主席(本次综合),这是结构性冲突——Claude 会系统性地高估自己的第一轮答案,因为(a)它拥有其他成员没有的会话上下文,(b)它“感觉”自己是对的。定稿前自问:我支持自己的第一轮答案,是因为它确实更好,还是因为是我写的?如果它胜出的唯一理由是“我有更多上下文”,那不算真正的理由——GPT 和 Gemini 可能捕捉到了 Claude 看不到的盲点。在综合输出中明确写出这一句偏见检查,让用户可以审计。

输出

  • 聊天:四段式综合。简洁,以明确推荐结尾。
  • 文件(仅当问题重大或用户要求时):在 CWD 写入 council-YYYYMMDD-HHMMSS.md,包含完整记录——问题、第一轮答案、第二轮批判、第三轮综合。时间戳使用 date +%Y%m%d-%H%M%S。

上下文传递

默认情况下 CLI 看不到本会话,但你可以控制放入提示的内容。上下文可传递,只是消耗 token,不要当作硬约束。三种机制按成本递增:

  1. 让 CLI 读取磁盘文件。codex exec 和 gemini -p 都在工作目录中运行,能自行读文件。最省。当相关上下文已在文件(CLAUDE.md、简报、代码文件)中时使用。
  2. 内联粘贴摘录。当上下文存在于会话中(已做的决定、已排除的方案、用户显露的偏好),把相关片段粘贴进提示。中等成本。
  3. 总结会话。对于长会话且逐字粘贴太贵时,写一段简报:已决定什么、已否决什么、用户真正在意什么。有损但可控。

为每位成员构建自包含提示,包含:

  • 问题本身
  • 相关上下文(粘贴、总结或文件指针)
  • 具体约束(预算、时间线、受众、现有技术)——明确写出,不要假设
  • 回复长度上限(第一轮 250 字,第二轮 200 字)

经验法则:问题出错的代价决定上下文预算。50 美元的决定不值得为三次 CLI 调用打包 5KB 上下文;5 万美元的决定值得。

真正难以传递的:会话累积的隐含推理、已探索的死胡同、用户的语气。在重要时明确总结这些,不要让它们保持隐含。

主席轮换(进阶)

默认由 Claude(当前会话)担任主席,因为它拥有最丰富的会话上下文,无传递成本。但 Claude 也是成员,存在结构性冲突,会在综合中系统性高估自己的第一轮答案。

若自我偏见检查反复发现真实的过度加权,就轮换主席:

  1. 把完整上下文(第一轮答案、第二轮批判、原始问题、相关简报)打包成单个提示
  2. 发送给 Codex 或 Gemini,指令:“你是主席。把议会的发现综合为四段式输出(一致 / 分歧 / 最重要 / 推荐)。直接。”
  3. 以轮换后的综合作为面向用户报告的基础;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

两者都应返回一句简短的话。