摘要

1) 一句话总结 LLM Council 是一个实验性的本地 Web 应用,它通过 OpenRouter 汇聚多个大语言模型进行独立回答与匿名交叉审查,最终由指定的“主席”模型汇总生成综合回答。

2) 关键要点

  • 核心机制:打破向单一模型提问的常规,将多个 LLM 组合成“委员会”共同处理用户查询。
  • 三阶段处理流程
    • 阶段一(初步收集):所有模型独立回复,结果以标签页形式并排展示。
    • 阶段二(匿名审查):各模型在匿名状态下相互阅读回复,并根据准确性和见解进行排名。
    • 阶段三(最终生成):由指定的“主席(Chairman)”模型汇总所有意见,输出单一的最终答案。
  • 轻量级技术栈:后端采用 FastAPI (Python 3.10+)、async httpx 和 OpenRouter API;前端使用 React + Vite 和 react-markdown;对话数据以 JSON 格式保存在本地。
  • 配置与自定义:需通过 .env 文件配置 OpenRouter API 密钥,用户可编辑 backend/config.py 自定义委员会的模型成员。
  • 开发理念:该项目是作者周末“凭感觉编写(Vibe coded)”的产物,鼓励用户直接让自己的 LLM 按需修改项目代码。

3) 风险与不足

  • 无官方支持与维护:项目按“原样(as is)”提供,作者明确表示不提供任何形式的支持,也不打算对其进行改进。
  • API 费用消耗:使用该应用强依赖 OpenRouter API,用户必须确保账户内有足够的额度(Credits)或已开启自动充值。

功能与定位

LLM Council 是一个简单的本地 Web 应用程序,界面类似 ChatGPT。它的核心理念是打破向单一的大语言模型(LLM)提问的常规,而是将多个模型组合成一个“LLM 委员会”。该应用通过 OpenRouter 将用户的查询同时发送给多个 LLM,让它们相互审查和评分,最后由一个指定的“主席(Chairman)”模型生成最终的综合回答。

典型使用场景

  • 在与 LLM 共同阅读书籍等过程中,并排探索和评估多个不同 LLM 的输出表现。
  • 查看不同模型对同一问题的交叉意见和相互评价。

核心功能

应用在处理用户查询时分为三个主要阶段:

  • 初步意见收集(Stage 1):将用户的提问分别发送给委员会中的所有 LLM。收集到的独立回复会以“标签页(tab view)”的形式展示,方便用户逐一查看。
  • 匿名交叉审查(Stage 2):每个 LLM 都会收到其他 LLM 的回复内容。在此过程中,模型的身份会被匿名化处理以防止偏袒。系统会要求 LLM 根据准确性和见解对这些回复进行排名。
  • 生成最终回答(Stage 3):由指定的“主席”模型接管,它会汇总所有模型的回复和意见,编译并输出一个单一的最终答案呈现给用户。

特色与差异点

  • 实验性与极简理念:该项目是作者在周末出于兴趣“Vibe coded(凭感觉编写)”的产物。作者认为在当前环境下“代码是短暂的,库已经过时”,鼓励用户直接让自己的 LLM 按需修改该项目的代码。
  • 轻量级技术栈
    • 后端:FastAPI (Python 3.10+)、async httpx、OpenRouter API。
    • 前端:React + Vite、react-markdown(用于渲染)。
    • 存储:对话数据以 JSON 文件形式保存在本地 data/conversations/ 目录中。

使用方式概览

  1. 安装依赖:使用 uv 进行 Python 后端包管理,使用 npm 管理前端 JavaScript 依赖。
  2. 配置 API 密钥:在项目根目录创建 .env 文件,填入从 OpenRouter 获取的 API 密钥。
  3. 配置模型(可选):可通过编辑 backend/config.py 文件来自定义委员会的模型成员。
  4. 运行应用:可通过启动脚本或手动分别启动后端和前端终端,随后在浏览器中访问本地地址即可使用。

限制与注意事项

  • 无官方支持与维护:项目按“原样(as is)”提供,仅供他人获取灵感。作者明确表示不会提供任何形式的支持,也不打算对其进行改进。
  • API 费用:使用该项目需要 OpenRouter 账户,并确保已购买足够的额度(Credits)或开启了自动充值。

链接

关联主题