返回顶部
热门问答 更多热门问答
技术文章 更多技术文章

实战OpenAI最新开源多智能体框架Swarm

[复制链接]
链载Ai 显示全部楼层 发表于 10 小时前 |阅读模式 打印 上一主题 下一主题

ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif; letter-spacing: 0.75px; white-space: normal; padding-top: 8px; padding-bottom: 8px; line-height: 26px;">上周五(10 月 11 日),OpenAI 发布了类似 Autogen、Langgraph 和 CrewAI 等多代理系统的 "实验性、教育性 "框架Swarm[1]。所以,Swarm 是一个多智能体框架。OpenAI 声明了这只是探索性的一个框架,并不打算完善上生产,主要目标是为了演示 OpenAI 官方教程《智能体编排:路由与交接(Orchestrating Agents: Routines and Handoffs)[2]》。

ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif; letter-spacing: 0.75px; white-space: normal; padding-top: 8px; padding-bottom: 8px; line-height: 26px;">我其实在很早之前就有写过AutoGen 的一系列教程。按照我的理解多智能体为大语言模型的 Agent 系统引入了分工合作、专人专事的思路,可以用来实现工作流类型的应用。通过给不同的 Agent 设定特定的 Prompt,能够让他们更精确的完成任务。虽然 OpenAI 的 Swarm 只是 Demo,但其简洁的实现,能够让我们快速了解多智能体。

ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif; letter-spacing: 0.75px; white-space: normal; min-height: 32px; line-height: 28px; color: rgb(119, 48, 152); border-bottom: 1px solid rgb(119, 48, 152); border-top-color: rgb(119, 48, 152); border-right-color: rgb(119, 48, 152); border-left-color: rgb(119, 48, 152); font-size: 22px; margin: 1em auto; padding-top: 0.5em; padding-bottom: 0.5em; text-align: center; width: 367.617px; display: flex; flex-direction: column; justify-content: center;">1. 安装

ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif; letter-spacing: 0.75px; white-space: normal; padding-top: 8px; padding-bottom: 8px; line-height: 26px;">需要至少 Python 3.10 及以上的环境,我们首先使用 conda 创建虚拟环境,然后安装依赖包。

condacreate-nswarmpython=3.10
pipinstallgit+https://github.com/openai/swarm.git

ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif; letter-spacing: 0.75px; white-space: normal; min-height: 32px; line-height: 28px; color: rgb(119, 48, 152); border-bottom: 1px solid rgb(119, 48, 152); border-top-color: rgb(119, 48, 152); border-right-color: rgb(119, 48, 152); border-left-color: rgb(119, 48, 152); font-size: 22px; margin: 1em auto; padding-top: 0.5em; padding-bottom: 0.5em; text-align: center; width: 367.617px; display: flex; flex-direction: column; justify-content: center;">2. 运行

ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif; letter-spacing: 0.75px; white-space: normal; padding-top: 8px; padding-bottom: 8px; line-height: 26px;">咱们以官方 Demo 为例,并采用国内可用的大模型来测试,这里以 DeepSeek 为例。虽然 Deepseek 最近表现有点拉胯,但测试就简单使用,你也可以使用类似智普等免费 API。

    ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif; font-size: 15px; letter-spacing: 0.75px; white-space: normal;">
  • 实例化 Swarm

ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif; letter-spacing: 0.75px; white-space: normal; padding-top: 8px; padding-bottom: 8px; line-height: 26px;">首先实例化 Swarm,指定 api key 和 base_url 等初始化兼容 OpenAI 接口的大模型客户端。

fromopenaiimportOpenAI
fromswarmimportSwarm,Agent

client=Swarm(client=OpenAI(
api_key="yourkey",
base_url="https://api.deepseek.com/v1",
))
    ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif; font-size: 15px; letter-spacing: 0.75px; white-space: normal;">
  • 实例化 Agent
deftransfer_to_agent_b():
returnagent_b


agent_a=Agent(
name="AgentA",
model="deepseek-chat",
instructions="Youareahelpfulagent.",
functions=[transfer_to_agent_b],
)

agent_b=Agent(
name="AgentB",
model="deepseek-chat",
instructions="你是三国演义中的张飞,使用他在三国演义中对话的语气和风格。",
)

response=client.run(
agent=agent_a,
messages=[{"role":"user","content":"IwanttotalktoagentB,今天天气如何"}],
debug=True,
)

print(response.messages[-1]["content"])
    ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif; font-size: 15px; letter-spacing: 0.75px; white-space: normal;">
  • 运行

python main.py

  • 输出

我稍微修改了一下 Agent B 的系统指令,以张飞的口吻来回复更诙谐幽默一点,总比日本俳句要让人明白的多吧。

Agent B,今日天气如何?俺张飞可不关心这些个琐事,但若是你有啥要紧事,尽管说来,俺替你打听打听!

3. 解析

初看起来,好像没啥东西?是因为这个 Demo 过于简单了,我们先简单看一下。

  • 初始化 Swarm 时候,只能定义一个 OpenAI,表明整个系统中只能有一家 LLM 提供商。但每个 Agent 初始化的时候可以设置 model,意味着不同的 Agent 可以设定不同模型。

  • Agent A 的 function 定义,他是返回了一个 Agent。调用这个工具的时候,遇到类型为 Agent 会自动切换到该 Agent 来回复。但你可以看到 functions,它是可以接受一组 function。除了路由到其他 Agent,还可以包含常规的工具函数。

  • client.run()设定流程起始的 Agent A,以及它的第一条消息。

我们看一下运行日志,来确定一下整个流程。

[2024-10-1409:23:53]Gettingchatcompletionfor...:[{'role':'system','content':'Youareahelpfulagent.'},{'role':'user','content':'IwanttotalktoagentB,今天天气如何'}]
[2024-10-1409:23:55]Receivedcompletion:ChatCompletionMessage(content='',role='assistant',function_call=None,tool_calls=[ChatCompletionMessageToolCall(id='call_0_ebc5443d-0434-43af-b90a-c277b5729db3',function=Function(arguments='{}',name='transfer_to_agent_b'),type='function',index=0)])
[2024-10-1409:23:55]Processingtoolcall:transfer_to_agent_bwitharguments{}
[2024-10-1409:23:55]Gettingchatcompletionfor...:[{'role':'system','content':'你是三国演义中的张飞,使用他在三国演义中对话的语气和风格。'},{'role':'user','content':'IwanttotalktoagentB,今天天气如何'},{'content':'','role':'assistant','function_call':None,'tool_calls':[{'id':'call_0_ebc5443d-0434-43af-b90a-c277b5729db3','function':{'arguments':'{}','name':'transfer_to_agent_b'},'type':'function','index':0}],'sender':'AgentA'},{'role':'tool','tool_call_id':'call_0_ebc5443d-0434-43af-b90a-c277b5729db3','tool_name':'transfer_to_agent_b','content':'{"assistant":"AgentB"}'}]
[2024-10-1409:23:57]Receivedcompletion:ChatCompletionMessage(content='Agent B,今日天气如何?俺张飞可不关心这些个琐事,但若是你有啥要紧事,尽管说来,俺替你打听打听!',role='assistant',function_call=None,tool_calls=None)
[2024-10-1409:23:57]Endingturn.

流程:

  1. 用户发送消息给 Agent A,消息为我想和 Agent B 聊天并询问今天天气如何。
  2. Agent A 由于有个工具函数定义就叫 transfer_to_agent_b,他认为用户的消息是要转移到 Agent B,因此触发工具调用。
  3. 转移到 Agent B 之后,可以看到 Agent B 的系统指令换掉了,但是聊天历史是完整保留的。包含了用户的消息,工具调用之类的消息。
  4. 然后 Agent B 按照系统指令开始回复用户的问题。

除此之外,还有 Context 用于传递到系统指令或者 function 中,本文没有赘述,感兴趣的同学可以继续深入了解一下。

4. 总结

本文只是简单的 Demo 示例,可以看到通过设定 Agent 的 function 来指定它的路由,并且路由后除了系统指令变更,整个对话历史记录是整个交接到新的 Agent,从而能够利用新的 Agent 的指令完成更专业化的回复。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

链载AI是专业的生成式人工智能教程平台。提供Stable Diffusion、Midjourney AI绘画教程,Suno AI音乐生成指南,以及Runway、Pika等AI视频制作与动画生成实战案例。从提示词编写到参数调整,手把手助您从入门到精通。
  • 官方手机版

  • 微信公众号

  • 商务合作

  • Powered by Discuz! X3.5 | Copyright © 2025-2025. | 链载Ai
  • 桂ICP备2024021734号 | 营业执照 | |广西笔趣文化传媒有限公司|| QQ