@cogitator-ai/swarms

中文文档
0.15.12发布于 2026/10/29MITTypeScriptES Module近 30 天下载 1.1万

多剂群协调

中文使用文档
文档目录25 节
  1. 安装
  2. 快速启动
  3. 特征
  4. 代理角色和元数据
  5. 战略
  6. 等级
  7. 圆-罗宾
  8. 协商一致
  9. 管道
  10. 辩论
  11. 拍卖
  12. 谈判
  13. 团队
  14. 正在运行 Swarars
  15. 暂停、恢复、中止、重置
  16. 处理错误和限制
  17. 代理通讯
  18. 消息总汇
  19. 黑板
  20. 内建的 Swarm 工具
  21. 自动模型选择系统
  22. 工作流程整合
  23. 沼泽事件
  24. 分配执行
  25. 许可证

@cogitator-ai/ swarms (英语)

多剂群相协调为相克. 由AI代理的管弦乐团队拥有8个协作策略,自动模型选择,共享通信原始,工作流程集成和Redis后置的分布式执行.

安装

pnpm add @cogitator-ai/swarms @cogitator-ai/core

网站文件 : 斯瓦尔斯, (中文(简体) ), 战略, (中文(简体) ), 构建器, (中文(简体) ), 通讯, (中文(简体) ), 评估, (中文(简体) ), 已分发。 。 。 .

快速启动

import { Cogitator, Agent } from '@cogitator-ai/core';
import { SwarmBuilder } from '@cogitator-ai/swarms';

const cogitator = new Cogitator({ llm: { defaultModel: 'ollama/llama3.2' } });
const model = 'ollama/llama3.2';

const swarm = new SwarmBuilder('dev-team')
  .strategy('hierarchical')
  .supervisor(new Agent({ name: 'lead', model, instructions: 'Coordinate the team' }))
  .workers([
    new Agent({ name: 'coder', model, instructions: 'Write code' }),
    new Agent({ name: 'tester', model, instructions: 'Test code' }),
  ])
  .build(cogitator);

const result = await swarm.run({ input: 'Build a REST API for user management' });
console.log(result.output);

战略为代理人提供他们所需要的工具:分级主管得到 delegate_task, (中文(简体) ), check_progress, (中文(简体) ), request_revision 财务报告和审定财务报表 list_workers,共识选民获得投票工具,谈判代理人获得谈判工具,牵头人和团队成员获得任务清单和邮箱工具. agentTools 将信件和黑板工具添加到每个代理中(参见 内建的 Swarm 工具) (中文(简体) ). 已定义的同名代理工具将保留 .

特征

  • 8 协调战略 - 等级、轮旋、共识、拍卖、管道、辩论、谈判、团队
  • 自动选择模型 —— 说 SwarmAssessor 匹配模型与代理角色
  • 代理通讯 - 带有读取跟踪,共享黑板的信息总线, message:* 编号 : blackboard:write 事件
  • 内建工具 信息、黑板、代表团、投票和谈判工具
  • 运行控制 ——每次运行超时,线状ID,生命周期回调,暂停/恢复/取消飞行中LLM呼叫
  • 复原力 ——用回转,故障链,跳转,部分结果,断路器重试
  • 资源限制 ——按运行的代号/费用/时间预算和按代理人计算的上限
  • 工作流程整合 ——以 DAG 工作流程节点运行群
  • 分配执行 - 重新支持州和工人节点 @cogitator-ai/worker

代理角色和元数据

特工将他们的群元数据(作用、专长、重量、模型锁)保存在 agentMetadata,按代理名称键。 槽默认自动应用 : supervisor → role: 'supervisor', (中文(简体) ), workers → role: 'worker', (中文(简体) ), moderator → role: 'moderator', (中文(简体) ), router → role: 'router'。 。 。 .

const swarm = new SwarmBuilder('debate-club')
  .strategy('debate')
  .agents([pro, con])
  .agentMetadata({
    pro: { role: 'advocate', expertise: ['economics'] },
    con: { role: 'critic', weight: 2 },
  })
  .debate({ rounds: 2 })
  .build(cogitator);

特工的名字必须是独特的 在群.


战略

等级

监督员通过工会向工人分配任务 delegate_task 工具.

const swarm = new SwarmBuilder('dev-team')
  .strategy('hierarchical')
  .supervisor(lead)
  .workers([frontend, backend, tester])
  .hierarchical({
    maxDelegationDepth: 2, // workers may re-delegate once
    workerCommunication: false, // workers can only message the supervisor
    routeThrough: 'supervisor',
    visibility: 'summary', // supervisor sees the first 500 chars of worker output
  })
  .build(cogitator);

在主管轮班期间运行的工人包括在 result.agentResults授权给自己或主管的人被拒绝.

圆-罗宾

const swarm = new SwarmBuilder('support-team')
  .strategy('round-robin')
  .agents([support1, support2, support3])
  .roundRobin({
    rotation: 'sequential',
    sticky: true,
    stickyKey: (input) => String(input).slice(0, 20),
  })
  .build(cogitator);

与 sticky: true 一个已知 stickyKey 保留在先处理它的代理; 新密钥继续旋转 。 无 stickyKey 每次跑步都旋转.

协商一致

代表投票 VOTE: <decision> 在答复中或与 cast_vote 工具,选民自动与 get_votes, (中文(简体) ), change_vote 财务报告和审定财务报表 get_consensus_status。当裁决占 所有符合条件的选民 达到临界值后,它不会被捆绑;弃权者将被计数.

const swarm = new SwarmBuilder('review-board')
  .strategy('consensus')
  .agents([security, performance, ux])
  .consensus({
    threshold: 0.66,
    maxRounds: 3,
    resolution: 'weighted', // 'majority' | 'unanimous' | 'weighted'
    weights: { security: 2 },
    onNoConsensus: 'escalate', // 'fail' | 'supervisor-decides' | 'escalate'
  })
  .build(cogitator);

const result = await swarm.run({ input: 'Approve the new caching layer?' });
console.log(result.votes);

管道

const swarm = new SwarmBuilder('content-pipeline')
  .strategy('pipeline')
  .pipeline({
    stages: [
      { name: 'research', agent: researcher },
      { name: 'draft', agent: writer, gate: true },
      { name: 'edit', agent: editor },
    ],
    gates: {
      draft: {
        condition: (output) => String(output).length > 200,
        onFail: 'retry-previous', // 'abort' | 'skip' | 'goto:<stage>'
        maxRetries: 2,
      },
    },
  })
  .build(cogitator);

const result = await swarm.run({ input: 'Write about vector databases' });
console.log(result.pipelineOutputs);

与 new Swarm(cogitator, config) 阶段也可以作为顶级 stages 字段; gates 财务报告和审定财务报表 stageInput 仍然来自 pipeline,两地的不同阶段都被拒绝.

辩论

const swarm = new SwarmBuilder('analysis-team')
  .strategy('debate')
  .agents([optimist, skeptic])
  .agentMetadata({ optimist: { role: 'advocate' }, skeptic: { role: 'critic' } })
  .moderator(moderator)
  .debate({ rounds: 3, format: 'structured', maxTokensPerTurn: 400 })
  .build(cogitator);

转弯贴有演讲者的姓名和角色标签([optimist (advocate)]: ...) (中文(简体) ). synthesisPrompt 替换主持人的默认任务,改为 {topic} 财务报告和审定财务报表 {transcript} 填报. maxTokensPerTurn 是一个回合的答案的长度:一个模型的输出限制没有道理,长度辩论者被要求保持. 一个推理模型用同一限度的推理,所以它所花去的转弯(切出或空出,几乎没有可见的文字)再次跑去,上面有空间讲道理: reasoningTokensPerTurn4096年,或比它推理的两倍 设定 reasoningTokensPerTurn 从第一次尝试开始就给这个空间;其中的指示,而不是提供者,让答案简短。 一个没有理由保持限制的模型,一个叫做工具的转弯就再也不会运行了.

拍卖

const swarm = new SwarmBuilder('contractor-pool')
  .strategy('auction')
  .agents([contractorA, contractorB])
  .auction({
    bidding: 'capability-match', // agents bid via LLM; or 'custom' with bidFunction
    selection: 'highest-bid', // or 'weighted-random'
    minBid: 0.3,
  })
  .build(cogitator);

谈判

代理人通过谈判工具与结构化报价进行谈判(make_offer, (中文(简体) ), counter_offer, (中文(简体) ), accept_offer, (中文(简体) ), reject_offer,联盟,利益. 发价一旦成为协议 每个收件人 已经接受.

const swarm = new SwarmBuilder('deal-makers')
  .strategy('negotiation')
  .agents([buyer, seller])
  .negotiation({
    maxRounds: 6,
    onDeadlock: 'arbitrate', // 'escalate' | 'supervisor-decides' | 'majority-rules' | 'arbitrate' | 'fail'
    maxOffersPerRound: 2,
    offerTimeout: 120_000,
    turnTimeout: 60_000,
    allowCoalitions: false,
    quorum: 1, // all parties must be part of the agreement
  })
  .build(cogitator);

const result = await swarm.run({ input: 'Agree on price and delivery date' });
console.log(result.negotiationResult?.agreement);

当发现停滞时,该战略提出一种折衷方案,作为来自 mediator; 代理接受时 accept_offer。 。 。 .

核准大门approvalGates将每项请求与 negotiation:approval-required 活动。 有个门 timeout 决议的执行情况 timeoutAction一个没有一个人的大门等着你的回答 一个跑步 timeout 或者说 swarm.abort() 别等了.

import type { NegotiationApprovalRequest } from '@cogitator-ai/types';

swarm.on('negotiation:approval-required', (event) => {
  const { request } = event.data as { request: NegotiationApprovalRequest };
  swarm.respondToApproval(request.id, {
    requestId: request.id,
    decision: 'approved',
    approved: true,
    continueNegotiation: false,
    respondedBy: 'legal-team',
    respondedAt: Date.now(),
  });
});

团队

代理团队 以克洛德·克洛德·克洛德的代理团队的精神:一个领导将工作规划成一个共同的任务列表,成员声称或被分配任务并通过他们工作,每个人都通过邮箱交谈,由领导从结果中写出最后的答案. 领先者是小群 supervisor (单位:千美元).lead() 在建设者,成员是它的 workers (单位:千美元).members()) (中文(简体) ).

const swarm = new SwarmBuilder('newsroom')
  .strategy('team')
  .lead(new Agent({ name: 'editor', model, instructions: 'Plan the article and assign the work' }))
  .members([
    new Agent({ name: 'researcher', model, description: 'Finds facts', instructions: 'Research' }),
    new Agent({ name: 'writer', model, description: 'Writes clearly', instructions: 'Write' }),
  ])
  .team({ maxTurnsPerMember: 6, maxConcurrentMembers: 2 })
  .build(cogitator);

const result = await swarm.run({ input: 'Write an article about tides' });
console.log(result.output);
console.log(result.teamResult?.tasks); // every task with its status, owner and result

如何运行去:

  • 领先者走第一弯 并创建任务 create_task (单位:千美元)dependsOn 使任务等待别人, assignee 给予成员)和 assign_task如果请求不需要团队,它立即回答,运行结束于那里(stopReason: 'no-tasks') (中文(简体) ).
  • 一个任务是 pending, (中文(简体) ), in_progress 或者说 completed状态 write_todos。无法要求完成一个未完成的依赖性任务,完成一个任务就可以解开等待它的任务,而一个成员每次执行一个任务.
  • 成员在有任务时转一圈:被指派的,或与 selfClaim 下一个未指定未被屏蔽的。 这个任务在转弯前被声称,在黑板上一个同步的步骤中,所以两个成员从来没有得到同样的任务. 未分配的任务在领先时等待,因为领先者仍可能指派它们.
  • 每个探员都有邮箱. send_message 向成员、领导人写信"lead")或对所有人("everyone"),并有一个消息唤醒它的收件人. 每条消息都由发送消息的代理标识,并随即发出通知,告知是来自另一个代理,而不是用户,因此队友的认可要求从不被视为用户的.
  • 当消息到达它时,当没有人能够继续剩下的任务(例如分配给一个使用其转会的成员的任务)时,主角会有一个转会. 一旦每一项任务完成,或者没有代理商有原因或左转,主角会从任务结果中写出最后的答案.
工具铅成员它会做什么
create_task对在列表中添加任务 dependsOn, (中文(简体) ), assignee 和可选 id
assign_task对赋予成员一个待决任务
list_tasks对对任务列表, 包含状态、 拥有者、 阻塞器和结果, 以及可采取的措施
claim_task对启动命名的任务, 或者成员可以接受的下一个任务
update_task对对完成一项任务并公布其成果(pending)或添加注释
send_message对对写信给一个成员, lead 或者说 everyone
read_inbox对对读取未读信件, 每封信都有发送者标记
选项默认说明
tasks[]领先者初轮前列表中的任务( :TeamTaskInput[](中文(简体) )
selfClaimtrue成员不承担未分配的任务,而只负责分配的任务
maxConcurrentMembersresources.maxConcurrency 或4个同时工作的成员
maxLeadTurns6在最后答案之前进行先行转弯,包括第一次转弯
maxTurnsPerMember8每个成员转身,一个成员转出转身,将其任务退回到名单中
maxTasks50任务列表控件
synthesizetrue主角写最后的答案,没有它,输出就是任务及其结果

每一个转弯都会花掉这些有限的预算之一 所以跑步总是结束的. result.teamResult 拥有任务,每个代理的状态(idle, (中文(简体) ), working, (中文(简体) ), stopped, (中文(简体) ), failed),转动和 stopReason数字 : completed, (中文(简体) ), no-tasks, (中文(简体) ), stalled (没有人可以继续)或 turn-limit. 轮到失败的成员失败,除非 errorHandling 请求 partialResults 或者说 onAgentFailure: 'skip':然后它被标记失败,它的任务会回到列表中去. 团队战略只在过程中运行,比如 hierarchical 财务报告和审定财务报表 negotiation。 。 。 .

任务列表位于黑板区 team 还有信息总线上的邮箱. TeamTaskBoard 财务报告和审定财务报表 TeamMailbox * 直接从事试验或定制战略方面的工作 team:* 事件(见 沼泽事件报告每个变化, 足以吸引团队现场 协作工作室 已经.


正在运行 Swarars

const result = await swarm.run({
  input: 'Plan the release',
  threadId: 'release-42', // each agent uses thread `release-42:<agent>`
  timeout: 120_000, // rejects with SwarmTimeoutError and cancels the run
  saveHistory: false,
  context: { project: 'cogitator' },
  onAgentStart: (agent) => console.log('start', agent),
  onAgentComplete: (agent, run) => console.log('done', agent, run.usage.totalTokens),
  onAgentError: (agent, error) => console.error(agent, error.message),
  onMessage: (message) => console.log(`${message.from} → ${message.to}`),
  onEvent: (event) => console.log(event.type),
});

A 类 Swarm 实例一次执行一个任务; 为并行运行创建单独的实例.

飞行中LLM的呼叫中断, 飞行中它的战略依然没有启动进一步的代理或复试, 即使在之后 run() 已经拒绝, 或开始下一跑 相同的群。 协调员将战略工作与 runInScope(scope, work) (单位:千美元)BaseSwarmCoordinator),所以每个代理运行都取去启动它的运行的线程,用户并中止信号.

暂停、恢复、中止、重置

const running = swarm.run({ input: 'Long task' });

swarm.pause(); // agents wait before their next turn
swarm.resume();
swarm.abort(); // rejects pending turns and cancels in-flight LLM calls

await running.catch(() => {});
await swarm.reset(); // clears abort state, budgets, messages and blackboard

处理错误和限制

const swarm = new SwarmBuilder('resilient-team')
  .strategy('round-robin')
  .agents([primary, backup])
  .errorHandling({
    onAgentFailure: 'failover', // 'retry' | 'failover' | 'skip' | 'abort'
    failover: { primary: 'backup' },
    retry: { maxRetries: 3, backoff: 'exponential', initialDelay: 500, maxDelay: 10_000 },
    circuitBreaker: { enabled: true, threshold: 5, resetTimeout: 30_000 },
    partialResults: true, // parallel phases return the agents that succeeded
  })
  .resources({
    maxConcurrency: 4,
    tokenBudget: 100_000, // per run
    costLimit: 5,
    timeout: 300_000,
    perAgent: { maxTokens: 2_000, maxIterations: 5, timeout: 60_000 },
  })
  .build(cogitator);

const usage = swarm.getResourceUsage();

CircuitBreaker 财务报告和审定财务报表 ResourceTracker 用于独立使用.

其代理暂停工具审批的转弯( T)requiresApproval失败 AgentRunPausedError 从 @cogitator-ai/core,带有等待呼叫和检查点,而不是通过前工具文本作为答案. 它从未被重试过,跳过或失败过,也没有绊倒断路器.


代理通讯

消息总汇

await swarm.messageBus.send({
  swarmId: swarm.id,
  from: 'operator',
  to: 'coder',
  type: 'notification',
  content: 'Use TypeScript strict mode',
});

未读信件被注入到收件人的下个转折中 message:received 活动). maxMessagesPerTurn 限制代理人每转弯发送多少信息.

黑板

const swarm = new SwarmBuilder('research-team')
  .strategy('hierarchical')
  .supervisor(lead)
  .workers([researcher])
  .messaging({ enabled: true, maxMessagesPerTurn: 5 })
  .blackboardConfig({ enabled: true, sections: { findings: [] }, trackHistory: true })
  .observability({ messageLogging: true, blackboardLogging: true })
  .build(cogitator);

swarm.blackboard.subscribe('findings', (data, writer) => console.log(writer, data));

内建的 Swarm 工具

启用 agentTools 以给每个代理服务器发送消息和黑板工具,并绑定在swarm自己的总线和黑板上(仅本地swarms;在分发时或当总线/黑板被禁时被拒绝) :

const swarm = new SwarmBuilder('research-team')
  .strategy('round-robin')
  .agents([researcher, writer])
  .agentTools({ messaging: true, blackboard: true })
  .build(cogitator);

共识选民自动获得投票工具。 对于海关战略和协调员,工厂建立任何成套工具:

import { createSwarmTools, createStrategyTools, type SwarmToolContext } from '@cogitator-ai/swarms';

const context: SwarmToolContext = {
  coordinator, // the swarm coordinator (SwarmCoordinatorInterface)
  blackboard: swarm.blackboard,
  messageBus: swarm.messageBus,
  events: swarm.events,
  agentName: 'coder',
  swarmId: swarm.id,
};

const allTools = createSwarmTools(context); // messaging, blackboard, delegation, voting, negotiation
const hierarchicalTools = createStrategyTools('hierarchical', context);
工厂工具
createMessagingToolssend_message (可选) waitForReply, (中文(简体) ), read_messages (已读出返回的标记信件), broadcast_message, (中文(简体) ), reply_to_message
createBlackboardToolsread_blackboard, (中文(简体) ), write_blackboard (单位:千美元)merge 扩展数组/ 合并对象), append_blackboard, (中文(简体) ), list_blackboard_sections, (中文(简体) ), get_blackboard_history
createDelegationToolsdelegate_task, (中文(简体) ), check_progress, (中文(简体) ), request_revision, (中文(简体) ), list_workers
createVotingToolscast_vote, (中文(简体) ), get_votes, (中文(简体) ), change_vote, (中文(简体) ), get_consensus_status
createNegotiationToolsmake_offer, (中文(简体) ), counter_offer, (中文(简体) ), accept_offer, (中文(简体) ), reject_offer, (中文(简体) ), get_negotiation_status, (中文(简体) ), get_current_offers, (中文(简体) ), propose_coalition, (中文(简体) ), join_coalition, (中文(简体) ), declare_interests
createTeamToolscreate_task, (中文(简体) ), assign_task, (中文(简体) ), list_tasks, (中文(简体) ), claim_task, (中文(简体) ), update_task, (中文(简体) ), send_message, (中文(简体) ), read_inbox (单位:千美元)teamToolsFor(tools, role) 选择主角或成员)

通过 createSwarmTools编号 :createStrategyTools 执行分级沟通政策createHierarchyMessageAuthorizer) (中文(简体) ).


自动模型选择系统

const swarm = new SwarmBuilder('smart-team')
  .strategy('hierarchical')
  .supervisor(lead)
  .workers([coder, analyst])
  .agentMetadata({ lead: { locked: true }, coder: { expertise: ['code'] } })
  .withAssessor({
    mode: 'rules',
    preferLocal: true,
    minCapabilityMatch: 0.3,
    maxCostPerRun: 0.5,
    enabledProviders: ['ollama', 'openai'],
  })
  .build(cogitator);

const preview = await swarm.dryRun({ input: 'Build a recommendation engine' });
for (const a of preview.assignments) {
  console.log(`${a.agentName}: ${a.assignedModel} (score ${a.score})`);
}

await swarm.run({ input: 'Build a recommendation engine' });
console.log(swarm.getLastAssessment()?.assignments);

指定型号具有提供者资格(例如:. ollama/llama3.2:3b) (中文(简体) ). 未锁定的代理被运行指定模型的克隆人所取代;被锁定的代理保留了他们的代理.

mode: 'rules' (默认)用关键词规则分析任务. 'ai' 让 assessorModel (默认:Cogitator的默认模型)分析; 'hybrid' 增加了每个硬要求 规则检测。 两者在模型无法运行时都会以警告回落到规则. 内部只提供云模型,其提供方可使用 Cogitator 路由(配置的 API 密钥) ; 独立, 将 Cogitator 传递到 createAssessor(config, cogitator) 对同样的行为.


工作流程整合

import { WorkflowBuilder, WorkflowExecutor } from '@cogitator-ai/workflows';
import { swarmNode, parallelSwarmsNode } from '@cogitator-ai/swarms';

const workflow = new WorkflowBuilder<{ document: string; analysis?: unknown }>('analysis-flow')
  .initialState({ document: '' })
  .addNode(
    'analyze',
    swarmNode(analysisSwarm, {
      inputMapper: (state) => state.document,
      stateMapper: (result) => ({ analysis: result.output }),
    })
  )
  .build();

const result = await new WorkflowExecutor(cogitator).execute(workflow, {
  document: 'Analyze this...',
});

conditionalSwarmNode(swarm, condition, options) 财务报告和审定财务报表 parallelSwarmsNode([{ swarm, key }], merge) 也可查阅。 传出 a SwarmConfig 而不是一个 Swarm 以每次执行时创建(并关闭)新的组群。 节点将工作流程运行的中止信号传递给swarm,因此节点超时,暂停或取消它及其代理转会. 外部工作流程, swarm.run({ input, signal }) 同样的信号.


沼泽事件

swarm.on('agent:complete', (event) => console.log(event.agentName));
swarm.once('swarm:complete', () => console.log('done'));
const unsubscribe = swarm.on('*', (event) => console.log(event.type));
unsubscribe();

订阅在协调员在模型评估后进行的重建中幸存下来.

活动说明
swarm:start 编号 : swarm:complete 编号 : swarm:error运行生命周期
swarm:paused 编号 : swarm:resumed 编号 : swarm:aborted 编号 : swarm:reset控制行动
agent:start 编号 : agent:complete 编号 : agent:error代理转弯
message:sent 编号 : message:received向代理发送/ 发送巴士信息
blackboard:write已写出或已删除的部分
assessor:complete模型评估完成
consensus:*, (中文(简体) ), debate:*, (中文(简体) ), auction:*, (中文(简体) ), pipeline:*, (中文(简体) ), round-robin:assigned, (中文(简体) ), negotiation:*战略进展
team:start 编号 : team:complete团队运行生命周期,有停止的理由
team:member-started 编号 : team:member-finished领导或成员转身,有其原因
team:task-created 编号 : team:task-assigned 编号 : team:task-claimed 编号 : team:task-updated 编号 : team:task-completed任务列表更改, 每个任务都按现在的样子
team:message-sent信件写入邮箱

每项数据 team:* 事件类型为 TeamEventMap 从 @cogitator-ai/types数字 :

import type { TeamEventMap } from '@cogitator-ai/types';

swarm.on('team:task-completed', (event) => {
  const { task, unblocked } = event.data as TeamEventMap['team:task-completed'];
  console.log(`${task.id} done by ${task.owner}, unblocks ${unblocked.join(', ')}`);
});

分配执行

与 distributed.enabled这群人把信息公交车、黑板 和雷迪斯的事件都保留下来 并且派每个特工都转身 工人节点从 @cogitator-ai/worker 执行转弯,并将结果交回.

const swarm = new SwarmBuilder('distributed-team')
  .strategy('pipeline')
  .pipeline({
    stages: [
      { name: 'draft', agent: writer },
      { name: 'review', agent: reviewer },
    ],
  })
  .distributed({
    enabled: true,
    queue: 'swarm-agent-jobs',
    timeout: 300_000,
    redis: { url: 'redis://localhost:6379', keyPrefix: 'swarm' },
    retry: { maxRetries: 2, backoff: 'exponential', initialDelay: 1000 },
    cleanupAfter: 3_600_000,
  })
  .build(cogitator);

const result = await swarm.run({ input: 'Write release notes' });
await swarm.close();

工人节点 :

import { Cogitator } from '@cogitator-ai/core';
import { DistributedSwarmWorker } from '@cogitator-ai/worker';

const worker = new DistributedSwarmWorker({
  redis: { url: 'redis://localhost:6379' }, // the same Redis as distributed.redis
  keyPrefix: 'swarm', // must match distributed.redis.keyPrefix
  queue: 'swarm-agent-jobs', // must match distributed.queue
  concurrency: 4,
  cogitator: new Cogitator({ llm: { defaultModel: 'ollama/llama3.2' } }),
  tools: [searchTool, calculatorTool], // implementations of tools the agents reference
});

await worker.start();
process.on('SIGTERM', () => void worker.stop());

retry 重新发送在工人或超时时失败的工作(默认:3回转,从1000毫秒到30000毫秒的指数回转,没有再发送),一个超时工作可能仍在运行,因此其转会可以运行两次. cleanupAfter 组合的 Redis 状态在 close() (默认一小时, 0 立即删除). workerConcurrency 已贬值 - 设置 concurrency 对工人。 war errorHandling (重试、故障),预算和断路工作与本地接线组相同:每个转弯都以代理电线格式承载整个代理 @cogitator-ai/core (答复格式、推理、停止序列、暂停和其余),并随费用、期限和旗帜而回(truncated, (中文(简体) ), blocked测量的工人. RedisMessageBus, (中文(简体) ), RedisBlackboard 财务报告和审定财务报表 RedisSwarmEventEmitter 用于直接使用.

distributed.redis 是一个 RedisConnectionConfig (单位:千美元)url, (中文(简体) ), host, (中文(简体) ), port, (中文(简体) ), username, (中文(简体) ), password, (中文(简体) ), db, (中文(简体) ), tls, (中文(简体) ), cluster.nodes+) 加上 (中文(简体) ) keyPrefix和工人的一样 这个 url 改为第一rediss:// 打开TLS),而清晰的球场战胜了它. 与 cluster 群及其工人连接到一个Redis集群,url和球场只提供证书和TLS.

键带有Redis Cluster散列标记,带有字面括号:队列是 <keyPrefix>:jobs:{<queue>} 而群的状态键是 <keyPrefix>:{<swarmId>}:...,所以在一组中,每组坐一个槽. 更早的版本使用没有牙套的密钥,因此提升了协调员和工人的级别.

队列是可靠的 。 工人每转一转 BLMOVE (Redis 6.2 或更新) 从队列到自己的列表 <queue key>:processing:<workerId> 转一转就脱了 它有心跳键 <queue key>:heartbeat:<workerId> (3个期满) heartbeatIntervals, 5000 ms(默认), 列在该套中 <queue key>:workers在开始和每次拍拍时,一个工人都会把心跳回排队头部的工人的转弯移动,因此坠机的工人不会失去转弯. 工人还检查自己每节节拍的列表:一个转动,工人不会连续跑出两次节拍,例如一次A BLMOVE 移动时,一个被丢弃的连接失去了它的答复,回到队列的头部,并用工人自己的身份报告。 工人默默地保持了3个间隔,这算不上是消失了,所以一个被停滞的工人可以跑两次.

工人把每个结果都放在工作之下 stateKeys.result (单位:千美元)<keyPrefix>:{<swarmId>}:result:<jobId>用于 resultTtl ms, 协调员对较大 timeout 财务报告和审定财务报表 cleanupAfter,然后出版。 当一个转折时,当它的任何一个连接重新连接并且每隔几秒钟,协调员会读取被存储的结果,所以在重新连接时公布的结果不会丢失. 工人无法控制的结果仍在公布。 工人跳过一个结果已经存在的工作,协调员在重新发送重试之前删除所存储的结果.

组件也被导出 : swarmJobQueueKey 财务报告和审定财务报表 swarmQueueKeys 给出队列键, deliverSwarmJobResult (与 DEFAULT_SWARM_RESULT_TTL将结果带回工人的方式 resolveRedisOptions, (中文(简体) ), clusterNodeOptions, (中文(简体) ), createSwarmRedis, (中文(简体) ), duplicateSwarmRedis, (中文(简体) ), scanSwarmKeys 财务报告和审定财务报表 closeSwarmRedis 转一圈 RedisConnectionConfig 进入iuredis客户端(SwarmRedis页:1 Redis 或者说 Cluster同他们合作.


许可证

麻省理工学院

版本与发布记录

@cogitator-ai/swarms 共发布 114 个版本,首次发布于 2025/12/31;过去 12 个月发布了 114 个版本。

版本发布日期距今
0.15.12latest2026/10/2912 天前
0.15.112026/10/2912 天前
0.15.102026/10/2912 天前
0.15.92026/10/2912 天前
0.15.82026/10/2912 天前
0.15.72026/10/2812 天前

关于 @cogitator-ai/swarms 的常见问题

@cogitator-ai/swarms 是什么?

多剂群协调

如何安装 @cogitator-ai/swarms?

在项目目录运行 npm install @cogitator-ai/swarms,或使用 pnpm add / yarn add / bun add。

@cogitator-ai/swarms 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@cogitator-ai/swarms 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@cogitator-ai/swarms 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22.12.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@cogitator-ai/swarms 可以商用吗?

@cogitator-ai/swarms 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@cogitator-ai/swarms 的下载量有多少?

根据 npm 官方下载统计,@cogitator-ai/swarms 在 2026/10/11 – 2026/11/09 这 30 天内被下载 11,347 次,日均约 378 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@cogitator-ai/swarms 还在维护吗?

最新版本 0.15.12 发布于 2026/10/29(12 天前);至今共发布 114 个版本,其中过去 12 个月发布了 114 个;首次发布于 2025/12/31。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。