Agent之Swarm:Swarm的简介、安装和使用方法、案例应用之详细攻略
Agent之Swarm:Swarm的简介、安装和使用方法、案例应用之详细攻略
目录
(1)、basic:关于设置、函数调用、交接和上下文变量的简单基础示例
(2)、triage_agent:设置一个基础的分诊步骤,交接给正确的智能体
(4)、airline:在航空公司背景下处理不同客户服务请求的多智能体设置
(5)、support_bot:一个客户服务机器人,包含用户界面智能体和帮助中心智能体,配有多个工具
(6)、personal_shopper:一个个人购物智能体,帮助完成销售和订单退款
Swarm的简介
2024年10月,OpenAI发布开源Swarm 。Swarm 是一个探索人体工程学、轻量级多智能体编排的教育框架,由 OpenAI 解决方案团队管理。Swarm 的主要目标是展示在《编排智能体:交接与常规》一书中探索的交接与常规模式。它并非一个独立的库,主要用于教育目的。
注意,Swarm 当前是一个实验性、教育性的示例框架,旨在探索多智能体系统的人体工学接口。它不打算用于生产环境,因此没有官方支持。(这也意味着我们不会审查 PR 或问题!)
1、特点
Swarm 专注于使智能体协调与执行变得轻量、可控且易于测试。通过两个基础抽象实现这一目标:智能体(Agents)和交接(handoffs)。智能体包含指令和工具,并可以在任何时候将对话交接给另一个智能体。这些原始抽象足够强大,能够表达工具和智能体网络之间的丰富动态,使你能够构建可扩展、符合实际需求的解决方案,同时避免陡峭的学习曲线。
注意,Swarm 智能体与 Assistants API 中的助手无关。它们的命名相似是为了方便,但它们本质上是完全独立的。Swarm 完全依赖于 Chat Completions API,因此在调用之间不存储状态。
2、为什么选择 Swarm
Swarm 探索的是轻量、可扩展且高度可定制的设计模式。类似 Swarm 的方法最适合处理大量独立能力和指令,这些内容难以编码为单一提示的场景。
Assistants API 是开发者寻找完全托管的线程和内建记忆管理与检索的一个好选择。然而,Swarm 是为那些好奇学习多智能体编排的开发者提供的教育资源。Swarm 几乎完全运行在客户端上,与 Chat Completions API 类似,不会在调用之间存储状态。
Swarm的安装和使用方法
1、安装
需要 Python 3.10 及以上版本。
pip install git+ssh://git@github.com/openai/swarm.git
或
pip install git+https://github.com/openai/swarm.git
2、使用方法
(1)、简单示例
该代码创建了一个Swarm环境,定义了两个智能体Agent A和Agent B,并通过Swarm客户端运行Agent A,使其在接收到用户消息后,通过函数调用将控制权交接给Agent B,最终由Agent B输出了一句话的Haiku诗歌作为响应。
pip install git+ssh://git@github.com/openai/swarm.git
或
pip install git+https://github.com/openai/swarm.git
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"])
输出示例:
Hope glimmers brightly,
New paths converge gracefully,
What can I assist?
3、运行 Swarm
首先实例化一个 Swarm 客户端(它内部实际上只实例化了一个 OpenAI 客户端)。
from swarm import Swarm
client = Swarm()
client.run()
Swarm 的run()功能类似于chat.completions.create()Chat Completions API 中的功能——它接收messages并返回messages,并且在调用之间不保存任何状态。但重要的是,它还处理 Agent 函数执行、交接、上下文变量引用,并且可以在返回给用户之前进行多次轮换。
Swarm 的核心client.run()实现了以下循环:
>> 从当前智能体获取一个完成信息
>> 执行工具调用并附加结果
>> 如果需要,切换智能体
>> 如果需要,更新上下文变量
>> 如果没有新的函数调用,返回
参数
参数 | 类型 | 描述 | 默认值 |
agent | Agent | 要调用的(初始)智能体。 | 必需 |
messages | List | 消息对象的列表,格式与 Chat Completions 的消息相同 | 必需 |
context_variables | dict | 附加上下文变量的字典,可供函数和智能体指令使用 | {} |
max_turns | int | 允许的最大对话轮数 | float("inf") |
model_override | str | 可选的模型字符串,用于覆盖智能体使用的模型 | None |
execute_tools | bool | 如果为 False,则在智能体尝试调用函数时中断执行,并立即返回 tool_calls 消息 | True |
stream | bool | 如果为 True,则启用流式响应 | False |
debug | bool | 如果为 True,则启用调试日志 | False |
client.run() 完成后(经过可能多次调用智能体和工具)将返回一个包含所有相关更新状态的响应。具体来说,它将返回新的消息、最后一次被调用的智能体,以及最新的上下文变量。你可以将这些值(加上新的用户消息)传入下一次 client.run() 执行,以继续之前的交互——这类似于 chat.completions.create()。
响应字段
字段 | 类型 | 描述 |
messages | List | 对话中生成的消息对象列表,类似于 Chat Completions 消息,但带有一个 sender 字段,指示消息来自哪个智能体 |
agent | Agent | 最后处理消息的智能体 |
context_variables | dict | 与输入变量相同,此外还有任何变化 |
智能体
智能体仅仅封装了一组instructions与一组functions(以及以下一些附加设置),并且有能力将执行交接给另一个智能体。
虽然很容易将智能体拟人化为“做 X 的人”,但它也可以用来表示由instructions与一组functions定义的非常具体的工作流或步骤(例如一组步骤、复杂的检索、数据转换的单步操作等)。这使得智能体可以组合成“智能体”、“工作流”和“任务”的网络,它们都由相同的原始抽象表示。
智能体字段
字段 | 类型 | 描述 | 默认值 |
name | str | 智能体的名称 | "Agent" |
model | str | 智能体使用的模型 | "gpt-4o" |
instructions | str 或 func() -> str | 智能体的指令,可以是字符串或返回字符串的可调用函数 | "You are a helpful agent." |
functions | List | 智能体可以调用的函数列表 | [] |
tool_choice | str | 智能体的工具选择(如果有) | None |
指令
智能体的指令会直接转化为对话的系统提示(作为第一条消息)。在任何给定时间,只有当前智能体的指令会出现在系统提示中(例如,如果有智能体交接,系统提示会发生变化,但聊天历史不会)。
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"])
函数
Swarm 智能体可以直接调用 Python 函数。
>> 函数通常应该返回一个str(返回的值将被尝试转换为str)。
>> 如果一个函数返回一个Agent,执行将被交接给该Agent。
>> 如果一个函数定义了 context_variables 参数,它将由传递给 client.run() 的上下文变量填充。
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"])
>> 如果Agent函数调用出现错误(缺少函数、错误参数、错误),错误响应将附加到聊天中,以便Agent可以正常恢复。
>> 如果调用了多个函数Agent,则它们将按顺序执行。
交接和更新上下文变量
一个人可以通过将其返回来Agent将其交给另一个人。Agentfunction
Sales Agent
它还可以context_variables通过返回更完整的Result对象来更新。如果您希望单个函数返回值、更新代理并更新上下文变量(或三者中的任何子集),这还可以包含value和。agent
sales_agent = Agent(name="Sales Agent")
def talk_to_sales():
print("Hello, World!")
return Result(
value="Done",
agent=sales_agent,
context_variables={"department": "sales"}
)
agent = Agent(functions=[talk_to_sales])
response = client.run(
agent=agent,
messages=[{"role": "user", "content": "Transfer me to sales"}],
context_variables={"user_name": "John"}
)
print(response.agent.name)
print(response.context_variables)
Sales Agent
{'department': 'sales', 'user_name': 'John'}
注意,如果Agent调用多个函数来交给Agent,则只会使用最后一个交接函数。
功能模式
Swarm 自动将函数转换为传递到 Chat Completions 的 JSON 模式tools。
>> 文档字符串被转换成函数description。
>> 没有默认值的参数设置为required。
>> 类型提示映射到参数type(默认为string
>> 每个参数的描述尚未明确支持,但如果只是添加到文档字符串中,其作用应该类似。(将来可能会添加文档字符串参数解析。)
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=[greet]
)
client.run(
agent=agent,
messages=[{"role": "user", "content": "Usa greet() por favor."}],
context_variables={"user_name": "John"}
)
流式处理
stream = client.run(agent, messages, stream=True)
for chunk in stream:
print(chunk)
使用与Chat Completions API 流相同的事件。请process_and_print_streaming_response参阅/swarm/repl/repl.py
添加了两种新事件类型:
{"delim":"start"}和{"delim":"end"},用于在每次Agent处理单个消息(响应或函数调用)时发出信号。这有助于识别Agent
{"response": Response}为了方便起见,将Response在流末尾返回带有聚合(完整)响应的对象。
4、评估
评估对任何项目都至关重要,我们鼓励开发人员自带评估套件来测试其集群的性能。作为参考,我们在 中提供了一些如何评估集群的示例airline,weather_agent以及triage_agent
5、使用工具
使用run_demo_loop来测试您的 swarm!这将在您的命令行上运行 REPL。支持流式传输。
sales_agent = Agent(name="Sales Agent")
def transfer_to_sales():
return sales_agent
agent = Agent(functions=[transfer_to_sales])
response = client.run(agent, [{"role":"user", "content":"Transfer me to sales."}])
print(response.agent.name)
from swarm.repl import run_demo_loop
...
run_demo_loop(agent, stream=True)
Swarm的案例应用
1、示例
查看 /examples 获取灵感!每个示例的更多内容可以在其 README 中找到。
(1)、basic:关于设置、函数调用、交接和上下文变量的简单基础示例
地址;swarm/examples/basic at main · openai/swarm · GitHub
此文件夹包含演示核心 Swarm 功能的基本示例。这些示例展示了 Swarm 的最简单实现,其中包含一条输入消息和一条相应的输出。它simple_loop_no_helpers有一个 while 循环来演示如何创建交互式 Swarm 会话。
(2)、triage_agent:设置一个基础的分诊步骤,交接给正确的智能体
地址:swarm/examples/triage_agent at main · openai/swarm · GitHub
(3)、weather_agent:关于函数调用的简单示例
地址:swarm/examples/weather_agent at main · openai/swarm · GitHub
(4)、airline:在航空公司背景下处理不同客户服务请求的多智能体设置
地址:swarm/examples/airline at main · openai/swarm · GitHub
(5)、support_bot:一个客户服务机器人,包含用户界面智能体和帮助中心智能体,配有多个工具
地址:swarm/examples/support_bot at main · openai/swarm · GitHub
(6)、personal_shopper:一个个人购物智能体,帮助完成销售和订单退款
地址:swarm/examples/personal_shopper at main · openai/swarm · GitHub
原文地址:https://blog.csdn.net/qq_41185868/article/details/143536852
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!