ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

swarms 框架 OneToOne 指南:双智能体一对一对话模式详解

swarms 框架 OneToOne 指南:双智能体一对一对话模式详解 swarms 框架 OneToOne 指南双智能体一对一对话模式详解【免费下载链接】swarmsThe Enterprise-Grade Multi-Agent Orchestration Framework. Website: https://swarms.ai项目地址: https://gitcode.com/GitHub_Trending/swar/swarms本文围绕 swarms 多智能体编排框架中的OneToOne模式展开讲解如何在共享会话conversation上让两个智能体交替发言、反复交换观点直至完成任务。读完本文你将掌握类式可复用与函数式单次调用两种用法、max_loops轮次控制、output_type输出格式体系以及底层“角色化消息投递”的实现原理可直接照抄示例跑通自己的写手-编辑、分析师-质疑者等双角色协作场景。一、OneToOne 是什么共享会话上的两人对话OneToOne是 swarms 中最小粒度的多智能体协作模式。它把两个Agent放进同一条Conversation共享会话按固定顺序交替发言发送方sender先回答问题接收方receiver回应发送方整个交换按max_loops参数重复指定轮数。关键设计在于每个智能体都能把共享会话读取为“带角色的聊天轮次”自己的历史消息被标成assistant轮次对方的消息被标成带对方名字的user轮次如Editor: needs a stronger opening。这样模型既能分辨“哪些话是自己说的”也能看到对话的完整来龙去脉而不是把所有内容都混成一条无差别的user消息。源码位置swarms/structs/one_to_one.py其中one_to_one函数与OneToOne类共同实现该模式。二、两种用法类式OneToOne与函数式one_to_one仓库在 examples/multi_agent/one_to_one_examples/README.md 中给出了两种入口形式入口适用场景示例模型类式OneToOne可复用对象同一对智能体要反复执行多个任务OpenAIgpt-5.4函数式one_to_one()单次调用只需要执行一轮独立交换Anthropicclaude-sonnet-4-6最小示例from swarms import Agent, OneToOne, one_to_one pair OneToOne(senderwriter, receivereditor, output_typedict) history pair.run(Write a tagline., max_loops2) # 或者只交换一次 history one_to_one(writer, editor, Write a tagline.)两种形式最终都返回会话历史历史格式由output_type决定。类式本质上是函数式的“可复用外壳”OneToOne在构造时保存sender、receiver、output_type等配置run()内部直接委托给one_to_one()见 swarms/structs/one_to_one.py因此同一个pair可以对不同任务反复调用而无需重建。三、类式示例写手与编辑的反复打磨完整代码见 one_to_one_class_example.pyfrom swarms import Agent, OneToOne writer Agent( agent_nameWriter, system_promptYou write short product taglines. Reply with one tagline., model_namegpt-5.4, max_loops1, print_onFalse, ) editor Agent( agent_nameEditor, system_promptYou are a strict editor. Rewrite the tagline to be shorter and punchier., model_namegpt-5.4, max_loops1, print_onFalse, ) pair OneToOne( senderwriter, receivereditor, nameTagline-Pair, descriptionA writer drafts, an editor tightens., output_typedict, ) history pair.run( Write a tagline for a password manager., max_loops2 ) for message in history: print(f[{message[role]}] {message[content]}\n)要点拆解两个 Agent 的agent_name不同Writer/Editor。这个名称就是共享会话里的“角色标识”OneToOne依赖它来区分消息归属务必保持唯一。每个 Agent 的max_loops1这里的max_loops控制单个 Agent 内部自循环的次数而OneToOne.run()的max_loops2控制的是“发送方接收方”这一完整交换对重复的次数两者含义不同不要混淆。print_onFalse关闭 Agent 运行时的控制台打印便于自己接管输出。若希望实时看到每轮输出可改为print_onTrue。name与description为这个通信模式命名并说明用途方便在更复杂的编排中标识。由于output_typedicthistory是字典列表每个元素形如{role: Writer, content: ...}所以示例用message[role]和message[content]遍历打印。四、函数式示例分析师与质疑者的单轮交锋完整代码见 one_to_one_function_example.pyfrom swarms import Agent, one_to_one analyst Agent( agent_nameAnalyst, system_promptYou summarise a companys position in two sentences., model_nameclaude-sonnet-4-6, max_loops1, print_onFalse, ) skeptic Agent( agent_nameSkeptic, system_promptYou point out the single biggest risk in the analysts summary., model_nameclaude-sonnet-4-6, max_loops1, print_onFalse, ) result one_to_one( senderanalyst, receiverskeptic, taskAssess a mid-size airline expanding into long-haul routes., max_loops1, output_typestr, ) print(result)函数式的参数更扁平task直接作为首个任务传入max_loops1表示只做“分析师作答 → 质疑者反驳”这一轮output_typestr让返回结果直接是可打印的字符串。同样地发送方先基于task作答接收方回应的是发送方的回答而非原始任务本身。五、参数与返回格式详解5.1 函数式one_to_one()签名对应源码 swarms/structs/one_to_one.py参数类型默认值说明senderAgent必填先发言的智能体receiverAgent必填回应发送方的智能体taskstr必填要处理的任务文本max_loopsint1发送方/接收方的交换轮数output_typeOutputTypedict返回历史格式校验逻辑sender、receiver、task任一为空都会抛出ValueError(Sender, receiver, and task cannot be empty.)。测试 tests/structs/test_one_to_one.py 专门验证了空任务被拒绝。5.2 类式OneToOne构造参数对应源码 swarms/structs/one_to_one.py参数默认值说明sender必填发送方 Agentreceiver必填接收方 AgentnameOneToOne通信模式名称descriptionA one-to-one communication pattern between two agents用途描述output_typedict输出格式类实例通过run(task, max_loops1)执行任务方法签名与函数式完全对齐。5.3output_type支持的全部格式OneToOne与one_to_one的返回值由history_output_formatter统一处理见 swarms/utils/history_output_formatter.py类型声明位于 swarms/utils/output_types.py。支持以下取值取值返回内容list消息字典列表dict/dictionary整个会话转字典string/str/all会话拼接字符串final/last最后一条消息的内容json会话的 JSON 字符串yaml会话字典的 YAML 字符串xml以conversation为根标签的 XML 字符串dict-all-except-first除首条外全部消息转字典str-all-except-first除首条外全部消息转字符串dict-final最后一条消息转字典list-final最后一条消息转列表basemodel基础模型对象传入未知类型会抛出ValueError(fInvalid type: {type})。六、底层原理共享会话如何被“角色化”投递one_to_one()的执行主循环swarms/structs/one_to_one.py非常简洁conversation Conversation() conversation.add(roleUser, contenttask) for _ in range(max_loops): run_on_conversation(sender, conversation) run_on_conversation(receiver, conversation)任务先以User角色写入会话随后每个循环内发送方、接收方轮流执行一次。真正的消息投递逻辑在 swarms/structs/context_utils.py 的三个函数中messages_for(agent_name, conversation)swarms/structs/context_utils.py把共享会话从某个智能体的视角重写为聊天轮次——自己的消息变成assistant对方消息变成带名字前缀的user如Editor: ...系统级结构消息如团队名单被过滤掉。这就是 README 所说“每个智能体以带角色的轮次读取会话、能区分自己的历史消息”的实现基础。split_last_turn(messages, fallback)swarms/structs/context_utils.py把最新一轮消息拆出来作为本次task其余作为prior历史传给agent.run(task..., messagesprior)。这保证了“接收方回应的是发送方的最新消息而不是原始任务”。agent_answer(agent, fallback)swarms/structs/context_utils.py由于Agent.run()默认按output_type返回整个会话而非本轮回答agent_answer负责从中提取出本轮真正的答案文本再写回共享会话conversation.add(agent.agent_name, answer)供下一轮读取。这套“角色化”设计还有两个额外收益模型能稳定区分自己与对方的发言请求保持稳定的前缀结构有利于 prompt 缓存源码注释中明确提到 “keeps a stable prefix for caching”。七、行为验证测试如何锁定语义仓库用 tests/structs/test_one_to_one.py 通过一个记录调用历史的EchoAgent锁定了该模式的核心语义消息顺序test_one_to_one_records_user_sender_receiver一次交换后历史角色序列必须为[User, Sender, Receiver]且接收方收到的任务里包含发送方的回答。轮次交替test_one_to_one_loops_alternatemax_loops2时角色序列为[User, Sender, Receiver, Sender, Receiver]且第二轮发送方在回应接收方的回复。空任务校验test_one_to_one_rejects_empty_task空任务抛ValueError。类与函数等价test_one_to_one_class_matches_function类式结果与函数式一致。可复用性test_one_to_one_class_reusable_across_tasks同一个pair跑第二个任务时会话以新任务开头、长度不累积每个run()内部新建Conversation不会把上一任务的历史带进下一任务。另外tests/structs/test_swarm_architectures.py 也在架构测试中调用了one_to_one验证其可嵌入更大规模的编排。八、模型配置与运行环境示例中模型均以普通 LiteLLM 字符串指定如gpt-5.4、claude-sonnet-4-6这意味着你可以把model_name换成任何你持有 API Key 的提供商模型使用 OpenRouter 模型时需要设置环境变量OPENROUTER_API_KEY运行前请确认对应提供商的 API Key 已通过环境变量正确配置swarms 启动时会读取环境配置参见 swarms/env.py。需要git clone仓库后自行运行示例时克隆地址为https://gitcode.com/GitHub_Trending/swar/swarms随后参照 pyproject.toml 与 requirements.txt 安装依赖即可直接执行one_to_one_class_example.py与one_to_one_function_example.py复现文中的写手-编辑、分析师-质疑者两类双智能体协作流程。【免费下载链接】swarmsThe Enterprise-Grade Multi-Agent Orchestration Framework. Website: https://swarms.ai项目地址: https://gitcode.com/GitHub_Trending/swar/swarms创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表