春风家教营销型网站建设,网站上怎么做全景看图,google服务框架,济宁广告公司网站建设来源 | 机器之心 毫无疑问#xff0c;多智能体肯定是 OpenAI 未来重要的研究方向之一#xff0c;前些天 OpenAI 著名研究科学家 Noam Brown还在 X 上为 OpenAI 正在组建的一个新的多智能体研究团队招募机器学习工程师。 就在几个小时前#xff0c;这个或许还没有组建完成的新…来源 | 机器之心 毫无疑问多智能体肯定是 OpenAI 未来重要的研究方向之一前些天 OpenAI 著名研究科学家 Noam Brown还在 X 上为 OpenAI 正在组建的一个新的多智能体研究团队招募机器学习工程师。 就在几个小时前这个或许还没有组建完成的新研究团队就已经开源发布了一项重量级研究成果Swarm。这是一个实验性质的多智能体编排框架主打特征是工效ergonomic与轻量lightweight。 项目地址 https://github.com/openai/swarm Swarm 开源后引起了热烈讨论有网友表示这能帮助简化许多潜在的多智能体用例的工作流程。 我们先来看一个例子。首先安装 Swarm很简单
pip install gitssh://gitgithub.com/openai/swarm.git
装好这个框架之后用起来也很方便。以下代码定义了 2 个智能体而用户的指令是与智能体 B 交谈
from swarm import Swarm, Agentclient Swarm()def transfer_to_agent_b():
return agent_bagent_a Agent(
nameAgent A,
instructionsYou are a helpful agent.,
functions[transfer_to_agent_b],
)agent_b Agent(
nameAgent B,
instructionsOnly speak in Haikus.,
)response client.run(
agentagent_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?
下面我们就来简单介绍一下这个开源项目。
首先需要再次强调Swarm 是一个实验性质的多智能体框架并不是为生产目的开发的因此团队表示不会提供任何官方支持。 Swarm 概况 Swarm 关注的重点是让智能体协作和执行变得轻量、高度可控且易于测试。
为此它使用了两种原语抽象智能体agent和交接handoff。其中智能体包含指令和工具并且在任何时间都可以选择将对话交接给另一个智能体。
该团队表示这些原语很强大「足以表达工具和智能体网络之间的丰富动态让你可以针对真实世界问题构建可扩展的解决方案同时避免陡峭的学习曲线。」
另外该团队指出请注意 Swarm 智能体与 Assistants API 中的 Assistants 无关。之所以名字相似只是为了方便。Swarm 完全由 Chat Completions API 提供支持因此在调用之间是无状态的。 为什么要使用 Swarm 在设计上Swarm 是轻量级、可扩展且高度可定制的。它最适合处理存在大量独立功能和指令的情况——这些功能和指令很难编码成单个提示词。
如果开发者想要寻求完全托管的线程以及内置的内存管理和检索那么 Assistants API 就已经是很好的选择了。但如果开发者想要完全的透明度并且能够细粒度地控制上下文、步骤和工具调用那么 Swarm 才是最佳选择。Swarm 几乎完全运行在客户端与 Chat Completions API 非常相似不会在调用之间存储状态。
该团队还展示了一个应用示例包括天气查询智能体、用于在航空公司环境中处理不同客户服务请求的多智能体设置、客服机器人、可以帮助销售和退款的个人智能体等。具体示例请访问 Swarm 代码库。 简单的天气查询智能体示例问题先经过筛选智能体处理再转交给天气智能体解答 Swarm 的核心组件
Swarm 的核心组件包括 client客户端、Agent智能体、Function函数。
运行 Swarm 就是从实例化一个 client 开始的其就是在内部实例化一个 OpenAI 客户端。
from swarm import Swarm
client Swarm() client.run() Swarm 的 run() 函数类似于 Chat Completions API 中的 chat.completions.create() 函数——接收消息并返回消息并且在调用之间不保存任何状态。但重点在于它还处理 Agent 函数执行、交接、上下文变量引用并且可以在返回给用户之前进行多轮执行。
究其核心Swarm 的 client.run() 是实现以下循环 先让当前智能体完成一个结果 执行工具调用并附加结果 如有必要切换智能体 如有必要更新上下文变量 如果没有新的函数调用则返回
参数
client.run() 的参数包括 client.run() 完成后可能进行过多次智能体和工具调用会返回一个响应其中包含所有相关的已更新状态。具体来说即包含新消息、最后调用的智能体、最新的上下文变量。你可以将这些值加上新的用户消息传递给 client.run() 的下一次执行以继续上次的交互——就像是 chat.completions.create()
响应字段 Agent
Agent智能体就是将一组指令与一组函数封装在一起再加上一些额外的设置并且其有能力将执行过程交接给另一个 Agent。
Agent 字段 指令instructions
Agent instructions 会直接转换成对话的系统提示词作为第一条消息。只有当前活动的 Agent 的指令会被使用当发生智能体交接时系统提示词会变化但聊天历史不会。
agent Agent(
instructionsYou are a helpful agent.
) instructions 可以是常规字符串也可以是返回字符串的函数。该函数可以选择性地接收 context_variables 参数该参数将由传入 client.run() 的 context_variables 填充。
def instructions(context_variables):
user_name context_variables[user_name]
return fHelp the user, {user_name}, do whatever they want.agent Agent(
instructionsinstructions
)
response client.run(
agentagent,
messages[{role:user, content: Hi!}],
context_variables{user_name:John}
)
print(response.messages[-1][content])
输出消息
Hi John, how can I assist you today?
Function Swarm Agent 可以直接调用 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 Doneagent Agent(
functions[print_hello]
)client.run(
agentagent,
messages[{role: user, content: Usa greet() por favor.}],
context_variables{user_name: John}
)
输出消息
Hola, John!
如果某个 Agent 函数调用出错缺少函数、参数错误等则会在聊天之中附加一条报错响应以便 Agent 恢复正常。
如果 Ageny 调用多个函数则按顺序执行它们。
交接和更新上下文变量
通过在返回的函数中包含一个 Agent可将执行过程交接给这个 Agent。
sales_agent Agent(nameSales Agent)def transfer_to_sales():
return sales_agentagent Agent(functions[transfer_to_sales])response client.run(agent, [{role:user, content:Transfer me to sales.}])
print(response.agent.name)
输出消息
Sales Agent
它还可以通过返回更完整的 Result 对象来更新 context_variables。如果你希望用单个函数返回一个值、更新智能体并更新上下文变量或三者中的任何组合它还可以包含一个 value 和一个 agent。
sales_agent Agent(nameSales Agent)def talk_to_sales():
print(Hello, World!)
return Result(
valueDone,
agentsales_agent,
context_variables{department: sales}
)agent Agent(functions[talk_to_sales])response client.run(
agentagent,
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 会自动将函数转换为 JSON 模式然后将其传递给聊天补全工具。 文档字符串会转换为函数 description。 没有默认值的参数会设置为 required。 类型提示会映射到参数的 type默认为 string。 不明确支持对每个参数进行描述但如果只是在文档字符串中添加应该能以相似的方式工作。
def greet(name, age: int, location: str New York):
Greets the user. Make sure to get their name and age before calling.Args:
name: Name of the user.
age: Age of the user.
location: Best place on earth.print(fHello {name}, glad you are {age} in {location}!)
{
type: function,
function: {
name: greet,
description: Greets the user. Make sure to get their name and age before calling.\n\nArgs:\n name: Name of the user.\n age: Age of the user.\n location: Best place on earth.,
parameters: {
type: object,
properties: {
name: {type: string},
age: {type: integer},
location: {type: string}
},
required: [name, age]
}
}
}
流式处理
Swarm 也支持流式处理。
stream client.run(agent, messages, streamTrue)
for chunk in stream:
print(chunk)
使用了与 Chat Completions API streaming 一样的事件但添加了两个事件类型 {delim:start} 和 {delim:start}用于在 Agent 每次处理单个消息响应或函数调用时发出信号。这有助于识别 Agent 之间的切换。 为方便起见{response: Response} 将在流的末尾返回带有已聚合的完整响应的 Response 对象。 核心贡献者
Swarm 的核心贡献者均就职于 OpenAI他们分别是右侧为对应的 GitHub 用户名 Ilan Bigio - ibigio James Hills - jhills20 Shyamal Anadkat - shyamal-anadkat Charu Jaiswal - charuj Colin Jarvis - colin-openai