网站建设类型分类,营业推广怎么写,电子商务网站建设 实验,高端网页开发文章目录 一、关于 Swarm#xff08;实验性、教育性#xff09;为什么选择蜂群文档 二、安装使用安装基本用法其它示例 三、Running Swarmclient.run()ArgumentsResponse字段 四、AgentFields Agent指令函数切换和更新上下文变量函数模式 流媒体评估工具 一、关于 Swarm… 文章目录 一、关于 Swarm实验性、教育性为什么选择蜂群文档 二、安装使用安装基本用法其它示例 三、Running Swarmclient.run()ArgumentsResponse字段 四、AgentFields Agent指令函数切换和更新上下文变量函数模式 流媒体评估工具 一、关于 Swarm实验性、教育性
github : https://github.com/openai/swarm Swarm 是探索人体工程学、轻量级 多代理编排的 教育框架。(An educational framework exploring ergonomic, lightweight multi-agent orchestration.)
Swarm 专注于使代理协调和 执行轻量级、高度可控且易于测试。
它通过两个基本抽象来实现这一点Agent和切换。Agent包含instructions和tools并且可以 随时选择将对话 交给另一个Agent。
这些原语功能强大足以表达工具和代理网络之间的丰富动态允许您构建可扩展的真实解决方案同时避免陡峭的学习曲线。
注群代理与助理应用编程接口中的助理无关。为了方便起见它们的命名类似但在其他方面完全不相关。群完全由聊天完成应用编程接口提供支持因此在调用之间是无状态的。 警告
Swarm目前是一个实验性的示例框架旨在探索多智能体系统的人体工程学界面。它不打算在生产中使用因此没有官方支持。这也意味着我们不会审查PR或问题
Swarm的主要目标是展示编排代理切换和例程食谱中探索的切换和例程模式。它不意味着是一个独立的库主要用于教育目的。 为什么选择蜂群
Swarm 通过设计探索轻量级、可扩展和高度可定制的模式。类似于Swarm的方法 最适合处理难以编码为单个提示的大量独立功能和指令的情况。
对于寻找完全托管线程和内置内存管理和检索的开发人员来说助理应用编程接口是一个很好的选择。然而对于想了解多代理编排的开发人员来说Swarm是一个教育资源。Swarm几乎完全在客户端上运行并且很像聊天完成应用编程接口不存储调用之间的状态。 文档 二、安装使用
安装
需要Python 3.10
pip install gitssh://gitgithub.com/openai/swarm.git或者
pip install githttps://github.com/openai/swarm.git基本用法
如果你想使用 Qwen 等 API 替代默认的 OpenAI可参考文章https://ezcode.blog.csdn.net/article/details/143300605
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?其它示例
看看/examples的灵感在自述文件中了解更多关于每一个的信息。
basic简单的基础示例如设置、函数调用、切换和上下文变量triage_agent设置基本分类步骤以交给正确代理的简单示例weather_agent函数调用的简单示例airline用于在航空公司上下文中处理不同客户服务请求的多代理设置。support_bot一个客户服务机器人包括一个用户交互界面代理和一个带有多个工具的帮助中心代理personal_shopper可以帮助进行销售和退款订单的个人购物代理 三、Running Swarm
首先实例化一个Swarm客户端它在内部只实例化一个OpenAI客户端。
from swarm import Swarmclient Swarm()client.run()
Swarm的run()函数类似于Chat Completions API中的chat.completions.create()函数 —— 它接受messages并返回messages并且在调用之间不保存任何状态。
然而重要的是它还处理代理 函数的执行、移交、上下文变量引用并且可以在返回给用户之前 进行多次轮换。
Swarm的client.run()的核心实现了以下循环
从当前代理处获得完成执行工具调用并附加结果必要时切换代理如有必要更新上下文变量如果没有新的函数调用返回 Arguments
参数类型描述默认agentAgent要调用的初始代理。必需messagesList消息对象列表与 Chat Completions messages必需context_variablesdict附加上下文变量的字典可用于函数和代理指令{}max_turnsint允许的最大会话轮流次数float(inf)model_overridestr一个可选字符串用于覆盖代理正在使用的模型Noneexecute_toolsbool如果False中断执行并立即返回tool_calls消息当代理尝试调用函数时Truestreambool如果True启用流响应Falsedebugbool如果True启用调试日志False 一旦client.run() 完成在可能多次调用代理和工具之后它将返回一个Response其中包含所有相关的更新状态。
具体来说新messages、最后一个要调用的Agent和最新的context_variables。
您可以将这些值加上新用户消息传递到client.run()的下一次执行中以继续它中断的交互——很像chat.completions.create()。
run_demo_loop函数在/swarm/repl/repl.py.中实现完整执行循环的示例 Response字段
字段类型描述messagesList对话期间生成的消息对象列表。非常类似于聊天完成messages但有一个sender字段指示消息来自哪个Agent。agentAgent处理消息的最后一个代理。context_variablesdict与输入变量相同加上任何更改。 四、Agent
一个Agent只是用一组functions封装了一组instructions加上下面的一些附加设置并且能够将执行交给另一个Agent。
虽然很容易将Agent拟人化为“做X的人”但它也可以用来表示由一组instructions和functions定义的非常具体的工作流或步骤例如一组步骤、复杂的检索、单步数据转换等。
这允许Agent被组成一个由“代理”、“工作流”和“任务”组成的网络所有这些都由同一个原语表示。 Fields Agent
字段类型描述默认namestr代理的名称。Agentmodelstr代理要使用的模型。gpt-4oinstructionsstr或func() - str代理的说明可以是字符串或返回字符串的可调用对象。You are a helpful agent.functionsList代理可以调用的函数列表。[]tool_choicestr代理的工具选择如果有。None 指令
Agent instructions直接转换为对话的system提示作为第一条消息任何给定时间只有活动Agent的instructions会出现例如如果有Agent切换system提示会改变但聊天记录不会。
agent Agent(instructionsYou are a helpful agent.
)这些instructions可以是常规str也可以是返回str的函数。
该函数可以选择接收一个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?函数
SwarmAgent可以直接调用python函数。函数通常应该返回一个str值将被尝试转换为str。如果函数返回一个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 Helloprint(f{greeting}, {user_name}!)return Doneagent Agent(functions[greet]
)client.run(agentagent,messages[{role: user, content: Usa greet() por favor.}],context_variables{user_name: John}
)Hola, John!如果Agent函数调用出现错误缺少函数、错误参数、错误则会将错误响应附加到聊天中以便Agent可以正常恢复。如果Agent调用多个函数它们将按该顺序执行。 切换和更新上下文变量
一个Agent可以通过在Agent中返回另一个function来传递。
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它还可以通过返回更完整的context_variables对象来更新Result。这也可以包含一个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模式并将其传递给聊天完成tools。
文档字符串被转换成函数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]}}
}流媒体
stream client.run(agent, messages, streamTrue)
for chunk in stream:print(chunk)使用与聊天完成API流相同的事件。请参见/swarm/repl/repl.py中的process_and_print_streaming_response作为示例。
添加了两种新的事件类型
{delim:start}和{delim:end}用于每次Agent处理单个消息响应或函数调用时发出信号。这有助于识别Agent之间的切换。{response: Response}将在流的末尾返回一个Response对象其中包含聚合的完整的响应以方便起见。 评估
评估对任何项目都是至关重要的我们鼓励开发人员带上他们自己的eval套件来测试他们的集群的性能。作为参考我们有一些关于如何在airline、weather_agent和triage_agent快速入门示例中使用eval swarm的示例。有关更多详细信息请参阅READMEs。 工具
使用该run_demo_loop测试您的集群这将在您的命令行上运行REPL。支持流式传输。
from swarm.repl import run_demo_loop
...
run_demo_loop(agent, streamTrue)2024-10-28(一)