Skip to content

timgunnar/multiarena

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

89 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

multiarena

终端原生多模型 AI 协作工具。一键提问,多个大模型同时回答;多模型接力审议,产出经过多重打磨的文档。

模式系统

multiarena 有两个顶层模式,各自包含总览和模型私聊两种视图:

广播模式 (Broadcast)               团队模式 (Team)
  ├── 总览:多模型并排面板             ├── 总览:审议入口 / 审议结果
  └── 定向:单个模型全宽详情           └── 定向:与单个模型私聊

输入栏前缀

前缀告诉你当前处于哪个模式和视图:

前缀 所处位置
[all] 广播总览 — 消息发给所有模型
[模型名] 广播定向 — 只跟该模型对话
[team] 团队总览 — 输入任务启动审议
[team:模型名] 团队定向 — 审议后与该模型私聊

模式切换规则

          Shift+Tab (仅在总览时)          Shift+Tab (仅在总览时)
广播总览 ←────────────────────→ 团队总览
   ↑  ↓ Tab                        ↑  ↓ Tab
广播定向                         团队定向
   ↑                              ↑
   └── Esc ───────────────────────┘── Esc

Tab — 在当前模式内循环切换目标。从总览进入第一个模型,再按切到下一个,循环回总览。Tab 永远不会切换模式(不会在广播 ↔ 团队之间跳)。

Shift+Tab — 在广播和团队之间切换。只在总览时生效,且切换后总是落在目标模式的总览。如果你在私聊中,需要先按 Esc 回总览,再按 Shift+Tab。

Esc — 返回当前模式的总览。无论你在私聊、对比视图、还是审议进行中,Esc 都会带你回到当前模式的总览。Esc 永远不会切换模式。

d — 对比模式。输入栏为空时,按 d 将当前模型与另一个模型的回答并排展示,再按 d 退出。在总览中按 d 会将第一个模型作为主视图、第二个作为对比。


广播模式(启动默认)

消息同时发给所有非静音模型,分栏并排查看回答。

广播总览

┌─ claude ──────────────────────┐ ┌─ gpt ─────────────────────────┐
│                               │ │                               │
│  可以使用 ls 列出当前目录文件: │ │  你可以用 ls 或 dir 命令查看目 │
│  $ ls -la                     │ │  录内容:                      │
│  total 48                     │ │  $ ls                          │
│  drwxr-xr-x  12 user  staff   │ │  src/  test/  package.json     │
│                               │ │                               │
│  3 lines · 1K/200K · done     │ │  3 lines · 1K/128K · done     │
└───────────────────────────────┘ └───────────────────────────────┘
────────────────────────────────────────────────────────────────────
 claude ●  gpt ●   — Tab:model d:compare m:mute r:reset q:quit ↑↓:scroll
[all] > ▊

提交消息后,所有非静音模型同时接收并回答。每个面板底部显示行数、token 用量和状态。

广播定向(Tab 进入)

Tab 进入某个模型的私聊视图。消息只发给该模型,输出区变为全宽详情。

┌─ claude ──────────────────────────────────────────────────────────┐
│                                                                    │
│  我来详细分析这个方案的优缺点:                                       │
│                                                                    │
│  **优点:**                                                         │
│  1. 四层架构清晰,每层职责单一,易于测试和维护                          │
│  2. Provider 接口设计简洁,新增模型只需实现 chat() 方法                │
│                                                                    │
│  2K/200K · 15 lines · done                                         │
└────────────────────────────────────────────────────────────────────┘
────────────────────────────────────────────────────────────────────
 claude ●  gpt    — Tab:model d:compare m:mute r:reset q:quit ↑↓:scroll
[claude] > ▊

再按 Tab 切换到下一个模型(跳过静音模型),循环回到总览。按 Esc 返回总览。

对比模式(按 d

输入栏为空时按 d,将当前模型与下一个模型的回答并排对比。

┌─ claude ──────────────────────┐ ┌─ gpt ─────────────────────────┐
│                               │ │                               │
│  推荐使用策略模式,将每种算法封 │ │  建议用工厂模式配合依赖注入来解 │
│  装为独立的策略类。            │ │  耦。                          │
│                               │ │                               │
│  2K/200K · 12 lines · done    │ │  1K/128K · 14 lines · done   │
└───────────────────────────────┘ └───────────────────────────────┘
────────────────────────────────────────────────────────────────────
 claude ●  gpt ●   — Tab:model d:exit-compare m:mute r:reset q:quit
[claude] > ▊

再按 d 退出对比,按 Esc 也能退出并回到总览。


团队模式(Shift+Tab 进入)

多个模型接力协作(镜像模式 ABCBA),起草 → 修订 → 润色 → 终审,产出一份经过多视角打磨的文档。

审议机制

镜像接力: 模型按 A→B→C→B→A 顺序接力。正向:起草 → 修订 → 润色 → 终审;反向:中间模型再次修订,第一个模型最终审查。确保文档经受多方向审视。

私有思考: 每轮提交前,模型先进行私有分析——审视当前文档的优劣、识别事实错误或幻觉、规划修改方案。思考内容不进入共享上下文(其他模型不可见),防止锚定偏差。

共享上下文: 团队模式使用统一的 teamMessages 消息线程。审议引擎直接从共享历史读取上下文,每轮产出自动写回。用户可追加新要求启动新一轮审议——模型自然看到上一轮所有产出 + 新指令。

启动审议

在广播总览按 Shift+Tab 进入团队总览,输入任务描述后回车:

────────────────────────────────────────────────────────────────────
团队模式

输入任务描述即可启动多模型接力审议。
Tab 可切换到特定模型私聊。Shift+Tab 返回广播模式。
────────────────────────────────────────────────────────────────────
 minimax  deepseek ●  — Tab:model d:compare m:mute r:reset q:quit
[team] > 写一篇关于兰州拉面的美食日记▊

审议进行中

每轮先私有思考,再公开提交。思考阶段显示"💭 思考中",分析结束后进入正式生成。

┌─ 团队审议 ─────────────────────────────────────────────────────────┐
│                                                                    │
│ 第 2/5 轮:deepseek (修订)                                          │
│                                                                    │
│ ✓ 起草     ● 修订     ○ 润色     ○ 修订     ○ 终审                   │
│ minimax    deepseek   minimax   deepseek   minimax                  │
│                                                                    │
│ 💭 思考中 — deepseek — 分析当前状态…                                 │
│                                                                    │
│ ── 私有分析 ──                                                      │
│ 文档在场景描写方面做得不错,但缺少对拉面本身的细节…                      │
│                                                                    │
└────────────────────────────────────────────────────────────────────┘
────────────────────────────────────────────────────────────────────
 minimax  deepseek ●  — Tab:model d:compare m:mute r:reset q:quit Esc:cancel
[team] > ▊

思考完成后,模型在分析基础上正式提交修改。审议进行中按 Esc 中止。

审议完成

审议结束后,显示审议过程和最终文档。每轮显示模型名称、角色、修改处数,以及代表性修改内容:

┌─ 团队审议 ─────────────────────────────────────────────────────────┐
│                                                                    │
│ 审议完成 · 3 轮 · 4 处修改                                          │
│                                                                    │
│ ✓ 起草    ✓ 修订     ✓ 终审                                         │
│ minimax  deepseek  minimax                                         │
│                                                                    │
│ ── 审议过程 ──                                                      │
│                                                                    │
│ 1. minimax(起草)                                                   │
│ 2. deepseek(修订) — 4 处修改                                       │
│      明天还想去! → 我决定下次再来。                                   │
│      這個味道吧。 → 这个味道吧。                                      │
│      明天还想再来一碗。 → 计划下次再品尝一次。                          │
│ 3. minimax(终审) — 无修改                                          │
│                                                                    │
│ ── 最终文档 ──                                                      │
│                                                                    │
│ # 今天吃了兰州拉面,我很开心                                          │
│ 今天中午去楼下那家兰州拉面馆…                                         │
│                                                                    │
└────────────────────────────────────────────────────────────────────┘
────────────────────────────────────────────────────────────────────
 minimax ●  deepseek ●  — Tab:model d:compare m:mute r:reset q:quit
[team] > ▊

审议后私聊与继续修改

审议完成后,按 Tab 切换到任一模型私聊。团队模式使用共享消息线程,所有模型看到相同的对话历史(包括审议全过程)。你可以在审议产出的基础上继续讨论或追加要求。

按 Tab → [team:minimax] > 你觉得终审时deepseek的修改方向对吗?

在团队总览输入新要求,启动新一轮审议。共享上下文中已有上一轮的完整产出,模型自然看到全部上文:

[team] > 把语气改得更文艺一些,增加更多感官细节

合并已有回答(/merge

在任意模式下输入 /merge,选一个模型将所有非静音模型的最新回答合并为综合文档,标注共识([共识])、独有贡献([来源: 模型名])和分歧([分歧])。适合汇总各模型对同一问题的不同角度回答。


安装

npm install -g multiarena

快速开始

# 创建配置文件
cat > .multiarenarc << 'EOF'
[models.claude]
provider = "anthropic"
model = "claude-sonnet-4-6"
api_key = "${ANTHROPIC_API_KEY}"

[models.gpt]
provider = "openai"
model = "gpt-4o"
api_key = "${OPENAI_API_KEY}"

[defaults]
active = ["claude", "gpt"]
EOF

# 启动
multiarena

配置

配置文件 .multiarenarc(TOML 格式),放在当前目录或 ~/.multiarenarc

[models.<名称>]
provider = "anthropic"       # anthropic | openai | google | deepseek | minimax | ollama
model = "claude-sonnet-4-6"  # API 模型名
api_key = "${ENV_VAR}"       # API key,支持环境变量
endpoint = "..."             # 自定义端点(可选)
context_limit = 200000       # 上下文窗口大小(可选)

[defaults]
active = ["claude", "gpt"]   # 启动时加载的模型

[deliberation]
constraint_file = "rules.md" # 审议约束文件(可选)

# 手动指定审议轮次(可选,默认自动镜像分配)
[[deliberation.rounds]]
model = "claude"
role = "draft"

[[deliberation.rounds]]
model = "gpt"
role = "revise"

[[deliberation.rounds]]
model = "claude"
role = "review"

会话保存至 ~/.multiarena/sessions/。使用 multiarena --resume <id> 恢复历史会话。

支持的 Provider

Provider 厂商 说明
anthropic Anthropic Claude 系列(Sonnet / Opus / Haiku)
openai OpenAI GPT-4o、GPT-4.1 等
google Google Gemini 系列
deepseek DeepSeek DeepSeek-V3、DeepSeek-R1 等
minimax MiniMax MiniMax-M2 系列
ollama Ollama 任意本地模型

具体模型名在配置文件的 model 字段中指定,使用各厂商的 API 模型名称。

快捷键速查

按键 功能 约束
Tab 当前模式内循环切换目标(总览 → 模型1 → 模型2 → 总览) 不切换模式,跳过静音模型
Shift+Tab 广播 ↔ 团队模式切换 仅在总览时生效,切换后落在目标模式总览
Esc 返回当前模式总览 / 退出对比 / 中止审议 不切换模式
d 对比两个模型的回答(输入栏为空时) 需要至少 2 个非静音模型
m 静音/取消静音当前模型 定向模式下生效
r 重置当前模型对话历史 定向模式下生效
↑ ↓ 输入为空:浏览历史输入;输入非空:滚动输出 团队总览下审议内容也可滚动
/team 等同于 Shift+Tab
/merge 合并各模型最近的回答 需要至少 2 个模型有回复
q 退出(自动保存会话)

License

MIT

About

multiarena 是一个 终端原生多模型 AI 助手。一键提问,多个大模型同时回答,并帮你选出最佳方案,彻底告别单一模型可能出现的幻觉问题。适用于 数据分析、创意写作 等需要高质量输出的场景。

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors