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

发布时间:2026/9/17 17:45:20

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),仅供参考
延伸阅读

更多相关文章

2026/9/17 17:45:20

树、森林与二叉树转换详解:从孩子兄弟表示法到遍历规律

在计算机专业里,“树、森林与二叉树转换”这一小节往往只占教材几页纸,可真正用到的时候——写语法解析器、做文件目录索引、复习数据结构期末考、准备面试手撕算法——你会发现它是连接多叉树世界和二叉树世界的唯一桥梁。我第一次彻底弄懂这个转换&…

2026/9/17 17:45:20

PLC培训实操标准:真实硬件+故障注入+闭环调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/17 18:35:24

Byte Buddy动态编程:Java字节码操作实战指南

1. 项目概述:Byte Buddy动态编程的核心价值在Java生态中,运行时动态生成和修改类的能力一直是高级开发的标志性技能。Byte Buddy作为当前最活跃的字节码操作库,其API设计比ASM更友好,性能比CGLIB更优异。我在实际性能调优和中间件…

2026/9/17 18:35:24

Vue电商后台模板:提升开发效率40%的实战方案

1. 项目背景与核心价值电商行业近年来持续高速发展,前端作为用户交互的第一触点,其体验直接影响转化率。传统电商前端开发存在几个痛点:重复造轮子严重、UI风格不统一、响应式适配成本高、性能优化缺乏系统方案。这个Vue-Dashboard-Template正…

2026/9/17 18:35:24

AI Core还是AI CPU?CANN ops-math仓库AI CPU算子开发完全实践指南

AI Core还是AI CPU?CANN ops-math仓库AI CPU算子开发完全实践指南 【免费下载链接】ops-math 本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-math 你是否在为 CANN ops-math 仓库贡…

2026/9/17 18:35:24

C# SerialPort串口通信实战:参数、收发与排错

简介:这是一份面向.NET开发者与工控、嵌入式上位机方向学习者的串口通信入门资料,聚焦C#语言在.NET平台下与串口设备进行数据交互的完整实现思路,适合刚接触SerialPort类、需要打通PC与单片机或仪器通信链路的初中级开发者参考。资源包共1个文…

2026/9/16 12:52:37

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/17 0:03:13

WiFi密码安全测试:从原理到实战的字典暴力破解指南

1. 写在前面:我为什么要研究WiFi密码这件事先交代一下背景。我身边有不少朋友,家里的WiFi密码常年是"12345678"或者"88888888",问就是"好记"。直到有一次,隔壁邻居蹭网蹭到我家路由器后台都进不去&…

2026/9/17 0:03:13

redis-py服务控制与监控函数实战:从ping到slowlog的巡检指南

我用 redis-py 写了快五年的业务代码,坦白说,真正让我觉得这个客户端“像一个成熟工具箱”的,不是 get/set 那套基本操作,而是它那批专门做服务控制与状态监控的辅助函数。日常开发里,大家把redis.Redis(host..., deco…

2026/9/17 0:03:13

SpringBoot+Vue3实现中小企业设备管理系统开发实践

1. 项目概述与核心价值中小企业设备管理系统是制造业、服务业等领域的基础信息化工具。传统设备管理往往依赖Excel表格或纸质记录,存在数据孤岛、流程混乱、维护成本高等痛点。这套基于Java SpringBootVue3MyBatis的技术方案,通过前后端分离架构实现了设…

2026/9/16 22:55:57

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/16 22:56:09

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/16 22:56:16

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码