广场
多代理圆桌讨论工具。发布一个问题,多个AI代理从不同的角度进行讨论,合成器会产生最终答案。
作为一个 CLI工具 作为一个 MCP服务器 用于Claude Code集成。
特性
- 多代理讨论 --具有不同角色和模型的可配置AI代理面板
- 多供应商 --Anthropic、OpenAI、谷歌双子座、DeepSeek、xAI/Grok、Ollama(本地)
- YAML预设 --使用定义自定义代理面板
{{topic}}模板插值 - 同期第一轮 --所有小组成员并行响应,快约50%
- 快速缓存 --人类学
cache_control缓存令牌的成本降低了约90% - 讨论历史 --SQLite持久化
bun:sqlite,可查询和可回放 - MCP服务器 --与Claude Code集成,用于按需AI圆桌会议
- 流输出 --实时流媒体彩色编码终端渲染
快速开始
先决条件
- 包子 运行时(v1.0+)
- 至少一个LLM API密钥
安装
git clone https://github.com/lagameon/agora.git
cd agora
bun install配置API密钥
创建一个 .env 项目根目录中的文件:
cp .env.example .env
# Edit .env with your API keys# At least one required
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
GOOGLE_API_KEY=AI...
# Optional
DEEPSEEK_API_KEY=sk-...
XAI_API_KEY=xai-...
OLLAMA_BASE_URL=http://localhost:11434/v1注: 默认预设使用gpt-4.1-mini--setOPENAI_API_KEY快速开始。这research预设使用Claude+GPT+Gemini,需要所有三个密钥。
跑
# Quick single-model query
bun run src/cli.ts ask "What is quantitative trading?"
# Roundtable discussion (default preset: 3 agents)
bun run src/cli.ts discuss "React vs Vue in 2026?"
# Use a specific preset
bun run src/cli.ts discuss "Should AI replace most programming jobs?" --preset debateCLI命令
agora ask [--model ] Quick single-model query
agora discuss [options] Run a roundtable discussion
agora presets List available presets
agora history [--id ] View discussion history
agora mcp Start MCP server (stdio)选项
| 标志 | 描述 | 默认值 |
|---|---|---|
--model | 型号 ask 命令 | gpt-4.1-mini |
--preset | 预设为 discuss 命令 | default |
--rounds | 最多讨论轮次 | 2 |
例子
# Ask with a specific model
bun run src/cli.ts ask "Explain transformers" --model claude-sonnet-4-5
# Research panel (Claude + GPT + Gemini)
bun run src/cli.ts discuss "Will the US dollar lose reserve currency status?" --preset research
# Adversarial debate with 3 rounds
bun run src/cli.ts discuss "Cryptocurrency is the future of money" --preset debate --rounds 3
# View discussion history
bun run src/cli.ts history
bun run src/cli.ts history --id 内置预设
| 预设 | 描述 | 代理 | 型号 |
|---|---|---|---|
| 默认 | 平衡三代理面板 | 分析师+评论家+合成器 | gpt-4.1-mini |
| 研究 | 深度研究小组 | 领域专家+方法论专家+反向器+合成器 | 克劳德十四行诗+GPT-4.1+双子座闪电侠 |
| 辩论 | 对抗性辩论 | 支持者+对手+裁判 | GPT-4.1+克劳德·索内特 |
自定义预设
预设从三个目录加载(最高优先级优先):
| 优先级 | 目录 | 范围 |
|---|---|---|
| 1 | ./.agora/presets/ | 项目本地(每个回购) |
| 2 | ~/.agora/presets/ | 用户全局(共享) |
| 3 | /presets/ | 内置 |
相同名称的预设被更高的优先级遮挡。这允许每个项目覆盖全局默认值。
在中创建YAML文件 ~/.agora/presets/ (全球)或 .agora/presets/ 在项目根目录(项目本地)中:
name: "My Team"
description: "Custom panel for technical decisions"
maxRounds: 2
agents:
- id: architect
name: "The Architect"
role: panelist
model: claude-sonnet-4-5
systemPrompt: |
You are a software architect evaluating: {{topic}}.
Focus on system design, scalability, and long-term maintainability.
temperature: 0.6
maxTokens: 1024
- id: pragmatist
name: "The Pragmatist"
role: panelist
model: gpt-4.1
systemPrompt: |
You are a pragmatic engineer evaluating: {{topic}}.
Focus on implementation complexity, developer experience, and time-to-ship.
temperature: 0.7
maxTokens: 1024
- id: synthesizer
name: "Decision Maker"
role: synthesizer
model: claude-sonnet-4-5
systemPrompt: |
Synthesize the discussion about: {{topic}}.
Weigh all perspectives and produce an actionable recommendation.
temperature: 0.3
maxTokens: 2048另存为 ~/.agora/presets/my-team.yaml那么:
bun run src/cli.ts discuss "Should we migrate to microservices?" --preset my-team预设架构
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
name | string | 否 | 显示名称 |
description | string | 否 | 描述 |
maxRounds | number | No | 最大讨论轮次(默认:2,最大:10) |
agents | array | 是 | 至少2个代理,其中一个必须是 synthesizer |
代理架构
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
id | string | 是 | 唯一标识符 |
name | string | 是 | 显示名称 |
role | string | 是 | panelist, moderator,或 synthesizer |
model | string | 是 | 型号标识符(请参阅支持的型号) |
systemPrompt | string | 是 | 系统提示,支持 {{topic}} |
temperature | number | 否 | 0-2(默认值:0.7) |
maxTokens | number | No | 最大响应令牌(默认值:1024) |
支持的型号
| 前缀 | 提供者 | 示例 |
|---|---|---|
claude-* | 人类学 | claude-sonnet-4-5, claude-haiku-4-5 |
gpt-* | OpenAI | gpt-4.1, gpt-4.1-mini |
o1-* / o3-* / o4-* | OpenAI | o3-mini, o4-mini |
gemini-* 谷歌 gemini-2.5-flash, gemini-2.5-pro | ||
deepseek-* | DeepSeek | deepseek-chat, deepseek-reasoner |
grok-* | xAI | grok-3 |
ollama:* | Ollama(当地) | ollama:llama3, ollama:mistral |
MCP服务器(克劳德代码集成)
Agora可以作为MCP服务器运行,允许Claude Code按需调用AI圆桌会议。
配置
添加到您的项目 .mcp.json (或 ~/.claude/mcp.json 全球访问):
{
"mcpServers": {
"agora": {
"command": "bun",
"args": ["run", "/path/to/agora/src/mcp.ts"]
}
}
}API密钥应在shell环境中设置,或通过 env 现场。MCP工具
| 工具 | 说明 |
|---|---|
agora_discuss(topic, preset?, maxRounds?) | 进行圆桌讨论 |
agora_ask(question, model?) | 快速单模型查询 |
MCP资源
| URI | 描述 |
|---|---|
agora://presets | 列出所有可用的预设 |
agora://history | 最近讨论列表 |
agora://discussions/{id} | 完整讨论记录 |
Claude代码中的用法
自然地问克劳德:
- *“使用agora讨论React与Vue”*
- *“举办一个关于量子计算未来的集市研究小组”*
- *“请问agora:什么是MCP协议?”*
建筑
Question ──→ Round 1 (concurrent): All panelists respond in parallel
│
▼
Round 2+ (sequential): Each agent sees all prior responses
│
▼
Synthesizer: Produces final answer from full discussion
│
▼
SQLite: Discussion saved automatically关键设计决策
- 无郎链 --直接SDK调用,实现对提示缓存和流媒体的完全控制
- 异步发电机发动机 --CLI、MCP服务器和历史存储都使用相同类型的事件流
- 提供商前缀路由 --模型名称前缀决定使用哪个SDK
- 拟人提示缓存 —
cache_control系统提示和累积上下文上的标题可降低约90%的成本 - 第一轮同时进行 —
Promise.allSettled并行解雇所有小组成员(无需事先了解背景),速度提高约50% - 面包:sqlite --零依赖持久性(内置于Bun中),两个表:
discussions和messages
项目结构
agora/
├── src/
│ ├── cli.ts # CLI entry point
│ ├── index.ts # Library public API
│ ├── mcp.ts # MCP server (stdio transport)
│ ├── config/
│ │ ├── schema.ts # Zod schemas for validation
│ │ ├── loader.ts # YAML preset loader
│ │ └── defaults.ts # Default settings
│ ├── providers/
│ │ ├── router.ts # Model prefix → provider factory
│ │ ├── types.ts # ChatProvider interface
│ │ └── retry.ts # Exponential backoff
│ ├── agents/
│ │ ├── types.ts # Agent types
│ │ └── presets.ts # Built-in default preset
│ ├── roundtable/
│ │ ├── engine.ts # Core discussion engine
│ │ ├── protocol.ts # Round logic & concurrency
│ │ ├── context.ts # Message building + prompt caching
│ │ └── types.ts # Event types
│ ├── history/
│ │ └── store.ts # bun:sqlite persistence
│ └── output/
│ └── terminal.ts # Color-coded terminal renderer
└── presets/
├── default.yaml # Balanced 3-agent panel
├── research.yaml # Deep research panel
└── debate.yaml # Adversarial debate程序化API
Agora可以用作图书馆:
import { runRoundtable, loadPreset, interpolateConfig } from 'agora';
const topic = "Should we use GraphQL or REST?";
const config = interpolateConfig(loadPreset('default'), topic);
for await (const event of runRoundtable(topic, config)) {
if (event.type === 'agent_done') {
console.log(`${event.agentName}: ${event.fullResponse}`);
}
if (event.type === 'synthesis_done') {
console.log(`Final answer: ${event.answer}`);
}
}数据存储
讨论历史记录存储在 ~/.agora/agora.db (SQLite)。此目录在首次运行时自动创建。
- 讨论可通过以下方式查询
agora history - 完整成绩单可通过
agora history --id - 数据库仅在本地,从不传输到任何地方
许可证
麻省理工学院
