10 KiB
10 KiB
Open Multi-Agent
构建能自动拆解目标的 AI 智能体团队。定义智能体的角色和工具,描述一个目标——框架自动规划任务图、调度依赖、并行执行。
3 个运行时依赖,27 个源文件,一次 runTeam() 调用从目标到结果。
English | 中文
为什么选择 Open Multi-Agent?
- 自动任务拆解 — 用自然语言描述目标,内置的协调者智能体自动将其拆解为带依赖关系和分配的任务图——无需手动编排。
- 多智能体团队 — 定义不同角色、工具甚至不同模型的智能体。它们通过消息总线和共享内存协作。
- 任务 DAG 调度 — 任务之间存在依赖关系。框架进行拓扑排序——有依赖的任务等待,无依赖的任务并行执行。
- 模型无关 — Claude、GPT、Gemma 4 和本地模型(Ollama、vLLM、LM Studio)可以在同一个团队中使用。通过
baseURL即可接入任何 OpenAI 兼容服务。 - 进程内执行 — 没有子进程开销。所有内容在一个 Node.js 进程中运行。可部署到 Serverless、Docker、CI/CD。
快速开始
需要 Node.js >= 18。
npm install @jackchen_me/open-multi-agent
在环境变量中设置 ANTHROPIC_API_KEY(以及可选的 OPENAI_API_KEY 或用于 Copilot 的 GITHUB_TOKEN)。通过 Ollama 使用本地模型无需 API key — 参见 example 06。
三个智能体,一个目标——框架处理剩下的一切:
import { OpenMultiAgent } from '@jackchen_me/open-multi-agent'
import type { AgentConfig } from '@jackchen_me/open-multi-agent'
const architect: AgentConfig = {
name: 'architect',
model: 'claude-sonnet-4-6',
systemPrompt: 'You design clean API contracts and file structures.',
tools: ['file_write'],
}
const developer: AgentConfig = {
name: 'developer',
model: 'claude-sonnet-4-6',
systemPrompt: 'You implement what the architect designs.',
tools: ['bash', 'file_read', 'file_write', 'file_edit'],
}
const reviewer: AgentConfig = {
name: 'reviewer',
model: 'claude-sonnet-4-6',
systemPrompt: 'You review code for correctness and clarity.',
tools: ['file_read', 'grep'],
}
const orchestrator = new OpenMultiAgent({
defaultModel: 'claude-sonnet-4-6',
onProgress: (event) => console.log(event.type, event.agent ?? event.task ?? ''),
})
const team = orchestrator.createTeam('api-team', {
name: 'api-team',
agents: [architect, developer, reviewer],
sharedMemory: true,
})
// 描述一个目标——框架将其拆解为任务并编排执行
const result = await orchestrator.runTeam(team, 'Create a REST API for a todo list in /tmp/todo-api/')
console.log(`成功: ${result.success}`)
console.log(`Token 用量: ${result.totalTokenUsage.output_tokens} output tokens`)
执行过程:
agent_start coordinator
task_start architect
task_complete architect
task_start developer
task_start developer // 无依赖的任务并行执行
task_complete developer
task_start reviewer // 实现完成后自动解锁
task_complete developer
task_complete reviewer
agent_complete coordinator // 综合所有结果
Success: true
Tokens: 12847 output tokens
作者
JackChen — 前 WPS 产品经理,现独立创业者。关注小红书「杰克西|硅基杠杆」,持续获取我的 AI Agent 观点和思考。
三种运行模式
| 模式 | 方法 | 适用场景 |
|---|---|---|
| 单智能体 | runAgent() |
一个智能体,一个提示词——最简入口 |
| 自动编排团队 | runTeam() |
给一个目标,框架自动规划和执行 |
| 显式任务管线 | runTasks() |
你自己定义任务图和分配 |
贡献者
示例
所有示例都是可运行脚本,位于 examples/ 目录。使用 npx tsx 运行:
npx tsx examples/01-single-agent.ts
| 示例 | 展示内容 |
|---|---|
| 01 — 单智能体 | runAgent() 单次调用、stream() 流式输出、prompt() 多轮对话 |
| 02 — 团队协作 | runTeam() 自动编排 + 协调者模式 |
| 03 — 任务流水线 | runTasks() 显式依赖图(设计 → 实现 → 测试 + 评审) |
| 04 — 多模型团队 | defineTool() 自定义工具、Anthropic + OpenAI 混合、AgentPool |
| 05 — Copilot | GitHub Copilot 作为 LLM 提供者 |
| 06 — 本地模型 | Ollama + Claude 混合流水线,通过 baseURL 接入(兼容 vLLM、LM Studio 等) |
| 07 — 扇出聚合 | runParallel() MapReduce — 3 个分析师并行,然后综合 |
| 08 — Gemma 4 本地 | 纯本地 Gemma 4 智能体团队 + tool-calling — 零 API 费用 |
| 09 — Gemma 4 自动编排 | runTeam() 用 Gemma 4 当 coordinator — 自动任务拆解,完全本地 |
架构
┌─────────────────────────────────────────────────────────────────┐
│ OpenMultiAgent (Orchestrator) │
│ │
│ createTeam() runTeam() runTasks() runAgent() getStatus() │
└──────────────────────┬──────────────────────────────────────────┘
│
┌──────────▼──────────┐
│ Team │
│ - AgentConfig[] │
│ - MessageBus │
│ - TaskQueue │
│ - SharedMemory │
└──────────┬──────────┘
│
┌─────────────┴─────────────┐
│ │
┌────────▼──────────┐ ┌───────────▼───────────┐
│ AgentPool │ │ TaskQueue │
│ - Semaphore │ │ - dependency graph │
│ - runParallel() │ │ - auto unblock │
└────────┬──────────┘ │ - cascade failure │
│ └───────────────────────┘
┌────────▼──────────┐
│ Agent │
│ - run() │ ┌──────────────────────┐
│ - prompt() │───►│ LLMAdapter │
│ - stream() │ │ - AnthropicAdapter │
└────────┬──────────┘ │ - OpenAIAdapter │
│ │ - CopilotAdapter │
│ └──────────────────────┘
┌────────▼──────────┐
│ AgentRunner │ ┌──────────────────────┐
│ - conversation │───►│ ToolRegistry │
│ loop │ │ - defineTool() │
│ - tool dispatch │ │ - 5 built-in tools │
└───────────────────┘ └──────────────────────┘
内置工具
| 工具 | 说明 |
|---|---|
bash |
执行 Shell 命令。返回 stdout + stderr。支持超时和工作目录设置。 |
file_read |
读取指定绝对路径的文件内容。支持偏移量和行数限制以处理大文件。 |
file_write |
写入或创建文件。自动创建父目录。 |
file_edit |
通过精确字符串匹配编辑文件。 |
grep |
使用正则表达式搜索文件内容。优先使用 ripgrep,回退到 Node.js 实现。 |
支持的 Provider
| Provider | 配置 | 环境变量 | 状态 |
|---|---|---|---|
| Anthropic (Claude) | provider: 'anthropic' |
ANTHROPIC_API_KEY |
已验证 |
| OpenAI (GPT) | provider: 'openai' |
OPENAI_API_KEY |
已验证 |
| GitHub Copilot | provider: 'copilot' |
GITHUB_TOKEN |
已验证 |
| Ollama / vLLM / LM Studio | provider: 'openai' + baseURL |
— | 已验证 |
已验证支持 tool-calling 的本地模型:Gemma 4(见示例 08)。
任何 OpenAI 兼容 API 均可通过 provider: 'openai' + baseURL 接入(DeepSeek、Groq、Mistral、Qwen、MiniMax 等)。这些 Provider 尚未完整验证——欢迎通过 #25 贡献验证。
参与贡献
欢迎提 Issue、功能需求和 PR。以下方向的贡献尤其有价值:
- Provider 集成 — 验证并文档化 OpenAI 兼容 Provider(DeepSeek、Groq、Qwen、MiniMax 等)通过
baseURL接入。详见 #25。对于非 OpenAI 兼容的 Provider(如 Gemini),欢迎贡献新的LLMAdapter实现——接口只需两个方法:chat()和stream()。 - 示例 — 真实场景的工作流和用例。
- 文档 — 指南、教程和 API 文档。
Star 趋势
许可证
MIT