2024-10-12 13:12 湖北
OpenAI也来卷Agent了,开源Swarm:用于构建、协调和部署多智能体(multi-agent)系统的框架
Swarm:用于构建、协调和部署多智能体(multi-agent)系统的框架,由OpenAI Solutions团队管理。Swarm是一个符合工效(ergonomic)、轻量级的多智能体协调框架。
Swarm专注于使Agent协调和执行变得轻量级、高度可控且易于测试,它通过两个原始抽象来实现这一点:智能体(agent)和交接(handoffs)。一个智能体包含了指令和工具,并且可以在任何时候选择将对话交接给另一个智能体。这些原始抽象足够强大,能够表达工具和智能体网络之间的丰富动态,允许你构建可扩展的、现实世界的解决方案,同时避免陡峭的学习曲线。
Swarm的multi-agent使用示例
from swarm import Swarm, Agent
client = Swarm()
def transfer_to_agent_b():
return agent_b
agent_a = Agent(
name="Agent A",
instructions="You are a helpful agent.",
functions=[transfer_to_agent_b],
)
agent_b = Agent(
name="Agent B",
instructions="Only speak in Haikus.",
)
response = client.run(
agent=agent_a,
messages=[{"role": "user", "content": "I want to talk to agent B."}],
)
print(response.messages[-1]["content"])
Swarm的multi-agent使用示例输出:
Hope glimmers brightly,
New paths converge gracefully,
What can I assist?
client.run()
Swarm 的 run() 函数类似于 Chat Completions API 中的 chat.completions.create() 函数——它接收消息并返回消息,但在调用之间不保存任何状态。然而,重要的是,它还处理Agent函数执行、交接、上下文变量引用,并且在返回给用户之前可以处理多个回合。
在核心层面,Swarm 的 client.run() 实现了以下循环:
从当前agent获取一个完成
执行工具调用并追加结果
如有必要,切换agent
如有必要,更新上下文变量
如果没有新的函数调用,返回
Agent
一个Agent简单地封装了一组指令和一组函数(加上下面的一些额外设置),并且有能力将执行交接给另一个Agent。
虽然将Agent拟人化很诱人,但它也可以用来表示由一组指令和函数定义的非常具体的工作流程或步骤(例如,一组步骤、复杂的检索、单个数据转换步骤等)。这允许Agent被组合成一个由“智能体”、“工作流程”和“任务”组成的网络,所有这些都由相同的原始元素表示。
agent = Agent(
instructions="You are a helpful agent."
)
###
def instructions(context_variables):
user_name = context_variables["user_name"]
return f"Help the user, {user_name}, do whatever they want."
agent = Agent(
instructions=instructions
)
response = client.run(
agent=agent,
messages=[{"role":"user", "content": "Hi!"}],
context_variables={"user_name":"John"}
)
print(response.messages[-1]["content"])
###
Hi John, how can I assist you today?
函数
Swarm智能体可以直接调用 Python 函数。函数通常应该返回一个字符串(值将尝试被转换为字符串)。如果一个函数返回一个Agent,执行将被转移到那个Agent。如果一个函数定义了一个 context_variables 参数,它将被 client.run() 传入的 context_variables 填充。
def greet(context_variables, language):
user_name = context_variables["user_name"]
greeting = "Hola" if language.lower() == "spanish" else "Hello"
print(f"{greeting}, {user_name}!")
return "Done"
agent = Agent(
functions=[print_hello]
)
client.run(
agent=agent,
messages=[{"role": "user", "content": "Usa greet() por favor."}],
context_variables={"user_name": "John"}
)
#####
Hola, John!
https://github.com/openai/swarm
推荐阅读
• 对齐LLM偏好的直接偏好优化方法:DPO、IPO、KTO
• RAG全景图:从RAG启蒙到高级RAG之36技,再到终章Agentic RAG!
• Agent到多模态Agent再到多模态Multi-Agents系统的发展与案例讲解(1.2万字,20+文献,27张图)
欢迎关注我的公众号“PaperAgent”,每天一篇大模型(LLM)文章来锻炼我们的思维,简单的例子,不简单的方法,提升自己。