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 仓库 中找到更多使用示例,这些示例进一步描述了其功能。

这个页面有用吗?

感谢您的反馈!🙏

我们很抱歉听到这个消息。😔 你可以在GitHub上编辑这个页面,或者创建一个GitHub问题。