📌 项目地址karpathy/llm-council | ⭐ 19,597 颗星 | 🔧 Python | 📜 未标注

一个周六的产物

Karpathy 在 README 里说得很直白:99% vibe coding,周六花几小时写的玩票,不打算维护。但就是这个承认“代码现在是临时的,库已经过时了”的项目,让我花了一上午搭起来、试了五个问题、看了七轮输出。它不完美,甚至可以说粗糙——但正是这种粗糙,把多模型协作的真实状态摊在台面上。

项目叫 LLM Council。你问一个问题,它让四五个模型各自回答,然后匿名化后再互相打分,最后指定一个“主席”模型汇总成最终答案。

十分钟搭起来

按 README 走就行。后端依赖用 uv 管理:

uv sync

前端:

cd frontend && npm install && cd ..

创建 .env 文件,写入 OPENROUTER_API_KEY=sk-or-v1-...。去 openrouter.ai 申请,需要预充 credits,没有免费额度。

启动有两种方式。用 ./start.sh 最省事,或者开两个终端:

终端1:uv run python -m backend.main
终端2:cd frontend && npm run dev

然后浏览器打开 http://localhost:5173。从零到看到界面,我花了大约 25 分钟,大部分时间在等 npm install。

默认配置用了四个模型:GPT-5.1、Gemini 3 Pro、Claude Sonnet 4.5、Grok 4。主席是 Gemini 3 Pro。这些在 backend/config.py 里都能改。

三阶段流程,每个阶段都有坑

Stage 1:首次作答。 你的问题同时发给所有模型,每个模型的回答在界面上以 tab 展示。这一步就是并行调用 OpenRouter 的 API,等最慢的模型返回。

Stage 2:匿名互评。 系统把每个模型的名字替换成“Model A”、“Model B”之类,然后把其他模型的回答打包发给它,要求按“准确性”和“洞察力”排序。注意:只替换了名字字符串,回答内容完全没动。我检查了互评阶段的输入——代码风格、措辞习惯、甚至某个模型特有的格式,都足以让一个足够聪明的 LLM 识别出是谁写的。匿名化基本是形式上的。

Stage 3:主席总结。 主席模型阅读所有回答和评分,生成最终答案。主席默认是 Gemini 3 Pro,可以在 config.py 里换。

我试了五个问题,发现了三件事

1. 匿名化几乎没用

我第一个问题是“用 Python 写一个 LRU 缓存”。Claude 的回答带了详细测试用例和异常处理,Gemini 先列设计思路再给代码,GPT 的注释偏函数式。互评阶段,Model A(实际是 Claude)写道:“Model B 的代码风格……”。我去查原始字符串,Model B 的代码格式和措辞与 Claude 的回答高度一致。模型确实都足够聪明——它们能通过风格特征判断作者。

第二个问题是“解释量子纠缠”。这次更抽象,三个模型的回答长度和用词差异不大,匿名化效果好一些。但 Grok 4 的回答里出现了一句“如我在之前的讨论中提到的”——这明显是自曝身份。

2. 模型有自我评价偏差

跑“美国大选和全球化的关系”时,Claude 直接拒绝回答某些敏感方向(政治话题的边界处理),Gemini 给出长篇分析。如果 Model B(Claude)拒绝回答,其他模型在评阅时自然会给它打低分,这不是偏袒,但会导致互评结果失真。

更明显的是:Grok 4 几乎每次都给自己排第一。匿名化后依然如此。Claude 4.5 评分分布最广,有明确的高分和低分,看起来判断力最强。GPT-5.1 倾向于给其他模型中等偏上分数,很少给极端低分。

这暴露了一个事实:所谓的“互评”本质上是模型根据自身能力标准来评判他人。如果你的问题是技术难题(写代码),擅长该领域的模型会给其他模型打低分——这是真实判断。如果是开放式文学分析,模型间的评分差异更偏向于个人偏好而不是客观质量。

3. 性能瓶颈和单点故障

每次完整请求 = 等所有模型首次回答(等最慢的)→ 等所有模型互评(等最慢的)→ 主席汇总。我测试时,Gemini 3 Pro 偶尔有 10 秒以上延迟,整轮请求拖到 36 秒。

最糟糕的是:如果某个模型因为 OpenRouter 速率限制或余额不足报错,整次请求直接中断。代码里没有超时控制,也没有单点失败处理。

费用

互评阶段每个模型要读取其他模型的完整回答作为输入,输入 token 消耗大。主席模型还要阅读所有回答和评阅结果。一次完整请求费用大约是单独调用每个模型的 3 到 5 倍。我提了五次问题,每次花费 0.10 到 0.22 美元。如果只是好奇,试几次问题不大;但想天天用,账单会涨得快。

这个项目真正有价值的地方

不是帮你省去手动复制粘贴,也不是给你一个“更强”的集成回答。它最大的价值是让你亲眼看到 LLM 如何评价同类的输出。你自己构造问题,然后观察互评阶段的原始数据——那才是本项目的精华。

我提取了七轮互评日志,归纳了几个模式:

  • 当问题高度专业化(比如代码重构、数学推导),模型之间的评分排序与人工判断基本一致。
  • 当问题主观(比如“写一首诗赞美春天”),评分排序几乎随机,甚至出现某个模型因为字数多被给高分。
  • 模型对“准确性”的理解各不相同:GPT-5.1 倾向于选最简洁的答案,Claude 4.5 选最全面的,Grok 4 选最像自己风格的。

如果你对“AI 的自我认知”感兴趣,这个项目就是绝佳的行为实验工具。Karpathy 说这是“周末玩票”,我倾向把它看作一个廉价的心理学实验室。

如果你想改进

Karpathy 已经明说不会维护,想用就得自己改。我建议三个方向:

  1. 增加超时控制和单点失败处理。 某个模型挂了不应该拖垮整个请求。可以跳过它,或者用缓存的结果代替。
  2. 用独立的风格分析器做匿名化。 不只是简单替换名字,而是改写成中立的表达风格(比如改写措辞、调整代码注释风格、移除个人烙印)。这目前是个开放问题,但至少比直接替换名字有意义。
  3. 让用户选择是否跳过互评阶段。 直接看所有模型的原始回答,能省掉至少三分之二的时间和费用。互评可以作为一个可选项。

如果你想玩一玩,按 README 搭起来,跑三五个问题,观察模型之间的互评模式,然后删掉。它的价值在于让你亲眼看到多模型协作的机制和局限,而不是作为日常问答工具。

这篇文章对你有帮助吗?

发表回复