Swarm
OpenAI 蜂群 是一个用于管理多个可以协同工作的AI代理的Python框架。与依赖单个LLM实例执行所有任务不同,Swarm允许您构建专门的代理,这些代理可以相互通信和协作,就像一支拥有独特技能的专家团队。
入门指南
要开始使用Swarm,请按照以下步骤操作:
- 安装Swarm
pip install git+https://github.com/openai/swarm.git
- 设置您的OpenAI API密钥
export OPENAI_API_KEY="<YOUR_KEY>"
Swarm 如何工作
在Swarm中,代理代表具有特定角色和指令的团队成员。每个代理可以根据情况执行任务或将对话转交给另一个代理。
一个Agent实例简单地封装了一组指令和一组函数,并且有能力将执行权交给另一个Agent。
这些简单的构建块允许您使用简单的思维模型创建复杂的工作流程。
创建您的第一个代理
这是两个代理的基本示例:
- Agent A: 一个有用的助手。
- Agent B: 一位算术专家。
当请求时,代理A将对话转移给代理B。
from swarm import Swarm, Agent
client = Swarm()
# Define Agent B
agent_b = Agent(
name="Agent B",
instructions="Arithmetic solving expertise holder.",
)
def transfer_to_agent_b():
return agent_b
# Define Agent A
agent_a = Agent(
name="Agent A",
instructions="You are a helpful agent.",
functions=[transfer_to_agent_b],
)
# Run the interaction
response = client.run(
agent=agent_a,
messages=[{"role": "user", "content": "I want some help with numbers."}],
)
print(response)
在这个例子中,当认为必要时,代理A将对话传递给代理B。
代理的功能
1. 说明
代理指令定义了它们的行为。这些指令被转换为对话中的系统提示。在交互过程中,仅使用活动代理的指令。
2. 函数
代理可以执行Python函数,使它们能够执行诸如处理数据或查询数据库等任务。Swarm自动将函数转换为JSON Schema,并传递给Chat Completions工具。
示例:
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(
name="Greeter Agent",
functions=[greet],
)
client.run(
agent=agent,
messages=[{"role": "user", "content": "Greet me in Spanish."}],
context_variables={"user_name": "John"},
)
通过将错误响应附加到对话中,可以优雅地处理错误。
3. 交接
如果一个函数返回另一个代理,系统将控制权转移给该代理。
将Swarm与Qdrant集成
你可以连接你的Swarm代理来检索或将数据摄取到Qdrant集合中。从而构建你的知识库。以下是如何启用代理从Qdrant检索信息。
假设你有一个使用"text-embedding-3-small"模型创建的Qdrant 集合。有效载荷结构包括一个用于知识存储的text字段。
import qdrant_client
from openai import OpenAI
# Initialize clients
openai_client = OpenAI()
qdrant = qdrant_client.QdrantClient(host="localhost")
# Configuration
EMBEDDING_MODEL = "text-embedding-3-small"
COLLECTION_NAME = "help_center"
LIMIT = 5
SCORE_THRESHOLD = 0.7
# Function to query Qdrant
def query_qdrant(query):
"""Retrieve semantically relevant content from Qdrant."""
embedded_query = openai_client.embeddings.create(
input=query,
model=EMBEDDING_MODEL,
).data[0].embedding
results = qdrant.query_points(
collection_name=COLLECTION_NAME,
query=embedded_query,
limit=LIMIT,
score_threshold=SCORE_THRESHOLD,
).points
if results:
return {"response": "\n".join([point.payload["text"] for point in results])}
else:
return {"response": "No results found."}
# Define agents
qdrant_agent = Agent(
name="Qdrant Agent",
instructions="Retrieve relevant info from a knowledge base stored in Qdrant.",
functions=[query_qdrant],
)
def transfer_to_qdrant():
return qdrant_agent
main_agent = Agent(
name="Main Agent",
instructions="Handle user queries and delegate searches to Qdrant.",
functions=[transfer_to_qdrant],
)
我们的qdrant_agent现在可以在必要时查询Qdrant集合以回答用户查询。
进一步阅读
你可以在 swarm 仓库 中找到更多使用示例,这些示例进一步描述了其功能。
