备注:可以去官方查看使用教程。
为什么选择 Swarm
Swarm 探索轻量级、可扩展且高度可定制的模式。类似于 Swarm 的方法最适合处理大量难以编码为单个提示的独立功能和指令的情况。
对于寻求完全托管线程和内置内存管理和检索的开发人员来说,Assistants API 是一个不错的选择。但是,Swarm 是一种教育资源,适用于有兴趣了解多代理编排的开发人员。Swarm (几乎)完全在客户端上运行,并且与 Chat Completions API 非常相似,它不会在调用之间存储状态。
1.下载Swarm
/1/ :需要 Python 3.10+
pip install git+ssh://git@github.com/openai/swarm.git
或者
pip install git+https://github.com/openai/swarm.git
开始下载页面
下载成功
上面我们就下载成功了,接下来让我们使用这个工具:打开终端
代码如下(包括每个代码的说明):
from swarm import Swarm, Agent
#创建一个客户端Swarn实例
client = Swarm()
# 定义一个函数,用于将对话转移到 Agent B
def transfer_to_agent_b():
return agent_b
# 定义 Agent A,角色是一个乐于助人的代理
agent_a = Agent(
name="Agent A", #代理名字
instructions="You are a helpful agent.",#代理指令
functions=[transfer_to_agent_b], # 可调用的功能,包括转移到 Agent B 的函数
)
# 定义 Agent B,角色是一个只用俳句说话的代理
agent_b = Agent(
name="Agent B",#代理名字
instructions="Only speak in Haikus.", # 代理的指令
)
# 运行对话,使用 Agent A 处理用户消息
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?
代码逻辑:
- 定义两个代理:
Agent A
和Agent B
。 - 用户请求通过
Agent A
转移对话到Agent B
。 Agent A
调用transfer_to_agent_b
函数,将对话切换到只会使用俳句对话的Agent B
运行代码可能的error:
这是因为 OpenAI 的 API 配置问题。要使用 Swarm,需要先设置 OpenAI API key。(网上有面免费获取API的教程,但是我忘记了是哪个网站)。
新代码
import os
from swarm import Swarm, Agent
# 设置 OpenAI API key
os.environ["OPENAI_API_KEY"] = "your-api-key-here" # 替换为您的 API key
# 创建 Swarm 实例
client = Swarm()
def transfer_to_agent_b():
return agent_b
# 创建两个 Agent
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."}],
)
但是Swarm 是专门为 OpenAI API 设计的,不能直接使用 Ollama。不过,我们可以使用 Ollama 的 Python API 来创建一个类似的多智能体系统。
import ollama
class Agent:
def __init__(self, name, instructions, model="llama2"):
self.name = name
self.instructions = instructions
self.model = model
def respond(self, message):
system_prompt = f"You are {self.name}. {self.instructions}"
response = ollama.chat(model=self.model,
messages=[
{
'role': 'system',
'content': system_prompt
},
{
'role': 'user',
'content': message
}
])
return response['message']['content']
def main():
# 创建两个 agent
agent_a = Agent(
name="Agent A",
instructions="You are a helpful agent.",
model="llama2" # 或其他您已下载的模型
)
agent_b = Agent(
name="Agent B",
instructions="Only speak in Haikus.",
model="llama2"
)
# 测试对话
try:
response_a = agent_a.respond("Hello! How are you?")
print(f"Agent A: {response_a}\n")
response_b = agent_b.respond("Tell me about the weather")
print(f"Agent B: {response_b}")
except Exception as e:
print(f"Error: {e}")
if __name__ == "__main__":
main()
我们对比Swarm和ollama 发现Swarm的代码量少,逻辑更加直白。
下面我们聊一下怎么使用本地大模型使用Swarm
下载本地模型(下面都在终端命令行)
选择一个适合的模型下载到本地。例如:
- Hugging Face Transformers:支持 GPT-NeoX、LLaMA 等模型。
- ChatGLM:中文对话模型。
1.以 Hugging Face 为例,下载模型(ollama的下载参考上篇):下面的代码需要我们在终端python环境下
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "EleutherAI/gpt-neo-1.3B" # 替换为您想要的模型
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
步骤 2:编写 Python 脚本
接下来,创建一个 Python 脚本,您可以通过命令提示符运行它。在 CMD 中运行 Python 脚本的步骤非常简单
2.1 创建 Python 脚本 swarm_local_model.py
在您喜欢的文本编辑器(如 Notepad 或 Visual Studio Code)中创建一个 Python 脚本 swarm_local_model.py
,并编写以下代码:
from swarm import Swarm, Agent
from transformers import AutoModelForCausalLM, AutoTokenizer
# 加载本地模型
model_name = "EleutherAI/gpt-neo-1.3B" # 您可以更换为其他本地模型
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
# 本地模型推理函数
def local_model_inference(prompt):
inputs = tokenizer(prompt, return_tensors="pt")
outputs = model.generate(inputs["input_ids"], max_length=100)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
return response
# 创建 Swarm 客户端
client = Swarm()
# 定义代理
local_agent = Agent(
name="Local Model Agent",
instructions="You are a helpful agent using a local model.",
functions=[local_model_inference], # 使用本地模型推理函数
)
# 与本地模型交互
response = client.run(
agent=local_agent,
messages=[{"role": "user", "content": "What is AI?"}],
)
# 打印模型的响应
print(response.messages[-1]["content"])
这个脚本将会加载本地模型,并通过 Swarm 进行交互,回答用户的问题。
步骤 3:在 CMD 中运行 Python 脚本
-
打开命令提示符(CMD):
- 按下
Win + R
,输入cmd
,然后按下Enter
,即可打开 Windows 的命令提示符窗口。
- 按下
-
导航到脚本所在的目录: 使用
cd
命令进入包含swarm_local_model.py
脚本的文件夹。执行代码 :python swarm_local_model.py。
步骤 4:(可选)使用 GPU 加速
如果您的机器支持 GPU,可以将模型加载到 GPU 中以加速推理。只需要在加载模型时指定设备:
python
model = AutoModelForCausalLM.from_pretrained(model_name).to("cuda")
以上就是全部内容:包括Swarm与ollama的对比,以及使用本地大模型调用Swarm。