open-multi-agent/README_zh.md

10 KiB
Raw Blame History

Open Multi-Agent

构建能自动拆解目标的 AI 智能体团队。定义智能体的角色和工具,描述一个目标——框架自动规划任务图、调度依赖、并行执行。

3 个运行时依赖27 个源文件,一次 runTeam() 调用从目标到结果。

GitHub stars license TypeScript

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 兼容 ProviderDeepSeek、Groq、Qwen、MiniMax 等)通过 baseURL 接入。详见 #25。对于非 OpenAI 兼容的 Provider如 Gemini欢迎贡献新的 LLMAdapter 实现——接口只需两个方法:chat()stream()
  • 示例 — 真实场景的工作流和用例。
  • 文档 — 指南、教程和 API 文档。

Star 趋势

Star History Chart

许可证

MIT