运行时依赖
无特殊依赖
安装命令
点击复制官方npx clawhub@latest install skylv-agent-team-coordinator
镜像加速npx clawhub@latest install skylv-agent-team-coordinator --registry https://cn.longxiaskill.com✓ 镜像可用
技能文档
Multi-Agent Orchestrator 功能说明 设计和管理多Agent协作系统。 架构模式 ┌─────────────┐ │ Orchestrator │ ← 任务分解、协调 └──────┬──────┘ │ ┌───┼───┐ ▼ ▼ ▼ ┌───┐┌───┐┌───┐ │ A ││ B ││ C │ ← 专业Agent └───┘└───┘└───┘ 核心实现
- Agent基类
Bearer ${process.env.OPENAI_API_KEY} },
body: JSON.stringify({ model: this.config.llm.model, messages, tools: this.config.tools.map(t => t.definition) })
});
return res.json();
}
}
- 编排器
将以下任务分解为可执行的子任务,返回JSON数组: 目标: ${goal} 要求: - 每个子任务只由一个Agent负责 - 明确任务依赖关系 - 返回格式: [{"id":"t1","description":"...","agent":"researcher","depends":[]},...], system: '你是任务分解专家。' });
return JSON.parse(response.content);
}
private async schedule(): Promise> {
const results = new Map();
const pending = new Set(this.taskGraph.nodes);
const running: Promise[] = [];
const maxConcurrent = 3;
while (pending.size > 0 || running.length > 0) {
// 启动可并行的任务
while (running.length < maxConcurrent) {
const next = this.findNextRunnable(pending, results);
if (!next) break;
pending.delete(next.id);
const p = this.runTask(next, results).catch(console.error);
running.push(p);
}
// 等待一个完成
await Promise.race(running);
running.splice(running.findIndex(p => false), 1);
}
return results;
}
private async runTask(task: Task, results: Map) {
results.set(task.id, { agentId: task.agent, status: 'running', dependencies: task.depends || [], startTime: Date.now() });
try {
// 等待依赖完成
for (const depId of task.depends || []) {
const dep = results.get(depId);
if (dep?.status !== 'done') {
await this.waitFor(depId, results);
}
}
const agent = this.agents.get(task.agent);
const context = this.buildContext(task, results);
const response = await agent.think({ id: task.id, description: task.description, context });
results.set(task.id, { ...results.get(task.id)!, status: 'done', output: response.content, endTime: Date.now() });
} catch (error) {
results.set(task.id, { ...results.get(task.id)!, status: 'failed', output: String(error), endTime: Date.now() });
}
}
private buildContext(task: Task, results: Map): string {
return (task.depends || []).map(depId => {
const dep = results.get(depId);
return dep?.output || '';
}).join('\n\n');
}
}
- 消息总线