企业级生产就绪的多智能体协作框架
🐦 Twitter • 📢 Discord • Swarms平台 • 📙 文档
Swarms是一个企业级、生产就绪的多智能体协作框架,使您能够协调多个智能体大规模协作,以自动化实际活动。
要求
python3.10
或更高版本!- 包含来自您的提供商的API密钥的
.env
文件,如OPENAI_API_KEY
、ANTHROPIC_API_KEY
$ pip install -U swarms
别忘了安装swarms!
安装 💻
$ pip3 install -U swarms
使用示例 🤖
Agents
一个完全即插即用的自主代理,由 LLM 驱动,扩展了长期记忆数据库,并配备了用于工具使用的函数调用功能!通过传入 LLM,您可以创建一个具有极高定制性和可靠性的完全自主代理,为现实世界的任务自动化做好准备!
特点:
✅ 兼容任何 LLM / 任何框架
✅ 极高的定制性,包括最大循环次数、自动保存、导入文档(PDF、TXT、CSV 等)、工具使用等等
✅ 具有 RAG(ChromaDB、Pinecone、Qdrant)的长期记忆数据库
import os
from swarms import Agent, OpenAIChat
from swarms.prompts.finance_agent_sys_prompt import (
FINANCIAL_AGENT_SYS_PROMPT,
)
# 从环境变量获取 OpenAI API 密钥
api_key = os.getenv("OPENAI_API_KEY")
# 创建 OpenAIChat 类的实例
model = OpenAIChat(
api_key=api_key, model_name="gpt-4o-mini", temperature=0.1
)
# 初始化代理
agent = Agent(
agent_name="Financial-Analysis-Agent",
system_prompt=FINANCIAL_AGENT_SYS_PROMPT,
llm=model,
max_loops=2,
autosave=True,
# dynamic_temperature_enabled=True,
dashboard=False,
verbose=True,
streaming_on=True,
# interactive=True, # 设置为 False 以禁用交互模式
dynamic_temperature_enabled=True,
saved_state_path="finance_agent.json",
# tools=[#在此添加您的函数# ],
# stopping_token="Stop!",
# interactive=True,
# docs_folder="docs", # 输入您的文件夹名称
# pdf_path="docs/finance_agent.pdf",
# sop="Calculate the profit for a company.",
# sop_list=["Calculate the profit for a company."],
user_name="swarms_corp",
# # docs=
# # docs_folder="docs",
retry_attempts=3,
# context_length=1000,
# tool_schema = dict
context_length=200000,
# tool_schema=
# tools
# agent_ops_on=True,
)
agent.run(
"What are the components of a startups stock incentive equity plan"
)
具有 RAG 的代理
配备准无限长期记忆的Agent
。非常适合长文档理解、分析和检索。
import os
from swarms_memory import ChromaDB
from swarms import Agent, Anthropic
from swarms.prompts.finance_agent_sys_prompt import (
FINANCIAL_AGENT_SYS_PROMPT,
)
# 初始化 chromadb 客户端
chromadb = ChromaDB(
metric="cosine",
output_dir="fiance_agent_rag",
# docs_folder="artifacts", # 您的文档文件夹
)
# 初始化代理
agent = Agent(
agent_name="Financial-Analysis-Agent",
system_prompt=FINANCIAL_AGENT_SYS_PROMPT,
agent_description="Agent creates ",
llm=Anthropic(anthropic_api_key=os.getenv("ANTHROPIC_API_KEY")),
max_loops="auto",
autosave=True,
# dynamic_temperature_enabled=True,
dashboard=False,
verbose=True,
streaming_on=True,
# interactive=True, # 设置为 False 以禁用交互模式
dynamic_temperature_enabled=True,
saved_state_path="finance_agent.json",
# tools=[在此添加您的函数# ],
# stopping_token="Stop!",
# interactive=True,
# docs_folder="docs", # 输入您的文件夹名称
# pdf_path="docs/finance_agent.pdf",
# sop="Calculate the profit for a company.",
# sop_list=["Calculate the profit for a company."],
user_name="swarms_corp",
# # docs=
# # docs_folder="docs",
retry_attempts=3,
# context_length=1000,
# tool_schema = dict
context_length=200000,
# agent_ops_on=True,
# long_term_memory=ChromaDB(docs_folder="artifacts"),
)
agent.run(
"What are the components of a startups stock incentive equity plan"
)
Agent
++ 长期记忆 ++ 工具!
一个配备长期记忆和工具的 LLM,是一个全栈代理,能够在给定良好提示的情况下自动化所有和任何数字任务。
import logging
from dotenv import load_dotenv
from swarms import Agent, OpenAIChat
from swarms_memory import ChromaDB
import subprocess
# 创建 ChromaDB 类的实例
memory = ChromaDB(
metric="cosine",
n_results=3,
output_dir="results",
docs_folder="docs",
)
# swarms 中的工具是简单的 Python 函数和文档字符串
def terminal(
code: str,
):
"""
在终端中运行代码。
参数:
code (str): 要在终端中运行的代码。
返回:
str: 代码的输出。
"""
out = subprocess.run(
code, shell=True, capture_output=True, text=True
).stdout
return str(out)
def browser(query: str):
"""
使用 `browser` 工具在浏览器中搜索查询。
参数:
query (str): 要在浏览器中搜索的查询。
返回:
str: 搜索结果。
"""
import webbrowser
url = f"https://www.google.com/search?q={query}"
webbrowser.open(url)
return f"在浏览器中搜索 {query}。"
def create_file(file_path: str, content: str):
"""
使用文件编辑器工具创建文件。
参数:
file_path (str): 文件路径。
content (str): 要写入文件的内容。
返回:
str: 文件创建操作的结果。
"""
with open(file_path, "w") as file:
file.write(content)
return f"文件 {file_path} 创建成功。"
def file_editor(file_path: str, mode: str, content: str):
"""
使用文件编辑器工具编辑文件。
参数:
file_path (str): 文件路径。
mode (str): 打开文件的模式。
content (str): 要写入文件的内容。
返回:
str: 文件编辑操作的结果。
"""
with open(file_path, mode) as file:
file.write(content)
return f"文件 {file_path} 编辑成功。"
# Agent
agent = Agent(
agent_name="Devin",
system_prompt=(
"自主代理,可以与人类和其他代理交互。要有帮助和友善。"
"使用提供的工具来协助用户。以markdown格式返回所有代码。"
),
llm=llm,
max_loops="auto",
autosave=True,
dashboard=False,
streaming_on=True,
verbose=True,
stopping_token="<DONE>",
interactive=True,
tools=[terminal, browser, file_editor, create_file],
streaming=True,
long_term_memory=memory,
)
# 运行代理
out = agent("创建一个新文件,用于制定统治世界的计划。")
print(out)
Devin
在不到90行代码内实现Devin,包含多个工具: 终端、浏览器和编辑文件。
from swarms import Agent, Anthropic
import subprocess
# 模型
llm = Anthropic(
temperature=0.1,
)
# 工具
def terminal(
code: str,
):
"""
在终端中运行代码。
参数:
code (str): 要在终端中运行的代码。
返回:
str: 代码的输出。
"""
out = subprocess.run(
code, shell=True, capture_output=True, text=True
).stdout
return str(out)
def browser(query: str):
"""
使用`browser`工具在浏览器中搜索查询。
参数:
query (str): 要在浏览器中搜索的查询。
返回:
str: 搜索结果。
"""
import webbrowser
url = f"https://www.google.com/search?q={query}"
webbrowser.open(url)
return f"在浏览器中搜索 {query}。"
def create_file(file_path: str, content: str):
"""
使用文件编辑器工具创建文件。
参数:
file_path (str): 文件路径。
content (str): 要写入文件的内容。
返回:
str: 文件创建操作的结果。
"""
with open(file_path, "w") as file:
file.write(content)
return f"文件 {file_path} 创建成功。"
def file_editor(file_path: str, mode: str, content: str):
"""
使用文件编辑器工具编辑文件。
参数:
file_path (str): 文件路径。
mode (str): 打开文件的模式。
content (str): 要写入文件的内容。
返回:
str: 文件编辑操作的结果。
"""
with open(file_path, mode) as file:
file.write(content)
return f"文件 {file_path} 编辑成功。"
# Agent
agent = Agent(
agent_name="Devin",
system_prompt=(
"自主代理,可以与人类和其他代理交互。要有帮助和友善。"
"使用提供的工具来协助用户。以markdown格式返回所有代码。"
),
llm=llm,
max_loops="auto",
autosave=True,
dashboard=False,
streaming_on=True,
verbose=True,
stopping_token="<DONE>",
interactive=True,
tools=[terminal, browser, file_editor, create_file],
streaming=True,
)
# 运行代理
out = agent("创建一个新文件,用于制定统治世界的计划。")
print(out)
使用Pydantic BaseModel作为输出类型的Agent
以下是一个同时接收和输出pydantic basemodel的agent示例:
from pydantic import BaseModel, Field
from swarms import Anthropic, Agent
# 初始化个人信息的架构
class Schema(BaseModel):
name: str = Field(..., title="人名")
agent: int = Field(..., title="年龄")
is_student: bool = Field(..., title="是否为学生")
courses: list[str] = Field(
..., title="正在学习的课程列表"
)
# 将架构转换为JSON字符串
tool_schema = Schema(
name="工具名称",
agent=1,
is_student=True,
courses=["课程1", "课程2"],
)
# 定义生成个人信息的任务
task = "根据以下架构生成一个人的信息:"
# 初始化agent
agent = Agent(
agent_name="个人信息生成器",
system_prompt=(
"根据以下架构生成一个人的信息:"
),
# 将工具架构设置为JSON字符串 -- 这是关键区别
tool_schema=tool_schema,
llm=Anthropic(),
max_loops=3,
autosave=True,
dashboard=False,
streaming_on=True,
verbose=True,
interactive=True,
# 将输出类型设置为工具架构,即BaseModel
output_type=tool_schema, # 或dict,或str
metadata_output_type="json",
# agent可以处理的架构列表
list_base_models=[tool_schema],
function_calling_format_type="OpenAI",
function_calling_type="json", # 或即将支持的yaml
)
# 运行agent以生成个人信息
generated_data = agent.run(task)
# 打印生成的数据
print(f"生成的数据: {generated_data}")
多模态自主代理
运行具有多种模态的代理,可用于制造、物流和健康等各种现实世界任务。
import os
from dotenv import load_dotenv
from swarms import GPT4VisionAPI, Agent
# 加载环境变量
load_dotenv()
# 初始化语言模型
llm = GPT4VisionAPI(
openai_api_key=os.environ.get("OPENAI_API_KEY"),
max_tokens=500,
)
# 初始化任务
task = (
"分析这张装配线图像,识别任何问题,如零件不对齐、缺陷或偏离标准装配流程。"
"如果图像中有任何不安全的地方,解释为什么不安全以及如何改进。"
)
img = "assembly_line.jpg"
## 初始化工作流程
agent = Agent(
agent_name = "多模态代理",
llm=llm,
max_loops="auto",
autosave=True,
dashboard=True,
multi_modal=True
)
# 在任务上运行工作流程
agent.run(task, img)
ToolAgent
ToolAgent是一个可以通过JSON函数调用使用工具的代理。它可以接收来自huggingface的任何开源模型,非常模块化且即插即用。我们需要帮助尽快添加对所有模型的通用支持。
from pydantic import BaseModel, Field
from transformers import AutoModelForCausalLM, AutoTokenizer
from swarms import ToolAgent
from swarms.utils.json_utils import base_model_to_json
# 加载预训练模型和分词器
model = AutoModelForCausalLM.from_pretrained(
"databricks/dolly-v2-12b",
load_in_4bit=True,
device_map="auto",
)
tokenizer = AutoTokenizer.from_pretrained("databricks/dolly-v2-12b")
# 初始化人员信息的模式
class Schema(BaseModel):
name: str = Field(..., title="人员姓名")
agent: int = Field(..., title="人员年龄")
is_student: bool = Field(
..., title="是否为学生"
)
courses: list[str] = Field(
..., title="正在学习的课程列表"
)
# 将模式转换为JSON字符串
tool_schema = base_model_to_json(Schema)
# 定义生成人员信息的任务
task = (
"根据以下模式生成一个人的信息:"
)
# 创建ToolAgent类的实例
agent = ToolAgent(
name="dolly-function-agent",
description="创建子数据的代理",
model=model,
tokenizer=tokenizer,
json_schema=tool_schema,
)
# 运行代理以生成人员信息
generated_data = agent.run(task)
# 打印生成的数据
print(f"生成的数据: {generated_data}")
Task
为了更深入地控制你的代理堆栈,Task
是一个用于与Agent
执行任务的简单结构。想象一下类似于Zapier的基于LLM的工作流自动化。
✅ Task是一个用于与Agent执行任务的结构。
✅ Task可以包含描述、调度、触发器、操作、条件、依赖关系、优先级和历史记录。
✅ Task结构允许使用基于LLM的代理进行高效的工作流自动化。
import os
from dotenv import load_dotenv
from swarms import Agent, OpenAIChat, Task
# 加载环境变量
load_dotenv()
# 定义一个用作操作的函数
def my_action():
print("执行了操作")
# 定义一个用作条件的函数
def my_condition():
print("检查了条件")
return True
# 创建一个代理
agent = Agent(
llm=OpenAIChat(openai_api_key=os.environ["OPENAI_API_KEY"]),
max_loops=1,
dashboard=False,
)
# 创建一个任务
task = Task(
description=(
"生成一份关于小型企业三大最主要开支以及"
"企业如何节省20%的报告"
),
agent=agent,
)
# 设置操作和条件
task.set_action(my_action)
task.set_condition(my_condition)
# 执行任务
print("正在执行任务...")
task.run()
# 检查任务是否完成
if task.is_completed():
print("任务已完成")
else:
print("任务未完成")
# 输出任务结果
print(f"任务结果: {task.result}")
多代理编排:
Swarms 的设计旨在促进来自各种其他框架(如 langchain、autogen、crew 等)的多个不同专门代理之间的通信。
在传统的群体理论中,通常有许多类型的群体用于非常专门的用例和问题集。例如,层级式和顺序式非常适合会计和销售,因为通常有一个主管协调代理将工作负载分配给其他专门的代理。
名称 | 描述 | 代码链接 | 使用案例 |
---|---|---|---|
层级式群体 | 一个代理按层级组织的系统,高级代理协调低级代理以完成复杂任务。 | 代码链接 | 制造过程优化、多级销售管理、医疗资源协调 |
代理重排 | 一种根据任务要求和环境条件动态重新排列代理的设置。 | 代码链接 | 自适应制造线、动态销售区域重新划分、灵活的医疗人员安排 |
并发工作流 | 代理同时执行不同任务,协调完成更大的目标。 | 代码链接 | 并发生产线、并行销售操作、同步患者护理流程 |
顺序协调 | 代理按特定顺序执行任务,一个任务的完成触发下一个任务的开始。 | 代码链接 | 逐步装配线、顺序销售流程、分步患者治疗工作流 |
并行处理 | 代理同时处理任务的不同部分以加快整个过程。 | 代码链接 | 制造中的并行数据处理、同步销售分析、并发医疗测试 |
SequentialWorkflow
顺序工作流使您能够按顺序执行带有 Agent
的任务,然后将输出传递给下一个代理,如此继续直到达到指定的最大循环次数。
from swarms import Agent, SequentialWorkflow, Anthropic
# 初始化语言模型代理(例如 GPT-3)
llm = Anthropic()
# 初始化单个任务的代理
agent1 = Agent(
agent_name="博客生成器",
system_prompt="像斯蒂芬·金那样生成一篇博客文章",
llm=llm,
max_loops=1,
dashboard=False,
tools=[],
)
agent2 = Agent(
agent_name="摘要生成器",
system_prompt="总结博客文章",
llm=llm,
max_loops=1,
dashboard=False,
tools=[],
)
# 创建顺序工作流
workflow = SequentialWorkflow(
agents=[agent1, agent2], max_loops=1, verbose=False
)
# 运行工作流
workflow.run(
"生成一篇关于代理群体如何帮助企业成长的博客文章。"
)
AgentRearrange
受 Einops 和 einsum 的启发,这种编排技术使您能够映射各种代理之间的关系。例如,您可以指定线性和顺序关系,如 a -> a1 -> a2 -> a3
,或并发关系,其中第一个代理将同时向 3 个代理发送消息:a -> a1, a2, a3
。您可以自定义工作流以混合顺序和并发关系。可用文档:
from swarms import Agent, AgentRearrange, Anthropic
# 初始化指导代理
director = Agent(
agent_name="指导者",
system_prompt="为工作者指导任务",
llm=Anthropic(),
max_loops=1,
dashboard=False,
streaming_on=True,
verbose=True,
stopping_token="<DONE>",
state_save_file_type="json",
saved_state_path="director.json",
)
# 初始化工作者 1
worker1 = Agent(
agent_name="工作者1",
system_prompt="为一个关于群体是什么的 YouTube 视频生成文字稿",
llm=Anthropic(),
max_loops=1,
dashboard=False,
streaming_on=True,
verbose=True,
stopping_token="<DONE>",
state_save_file_type="json",
saved_state_path="worker1.json",
)
# 初始化工作者 2
worker2 = Agent(
agent_name="工作者2",
system_prompt="总结工作者1生成的文字稿",
llm=Anthropic(),
max_loops=1,
dashboard=False,
streaming_on=True,
verbose=True,
stopping_token="<DONE>",
state_save_file_type="json",
saved_state_path="worker2.json",
)
# 创建代理列表
agents = [director, worker1, worker2]
# 定义流程模式
flow = "Director -> Worker1 -> Worker2"
# 使用AgentRearrange类
agent_system = AgentRearrange(agents=agents, flow=flow)
output = agent_system.run(
"创建一种格式来以结构化方式表达和交流YouTube上的LLM群体"
)
print(output)
HierarhicalSwarm
即将推出...
GraphSwarm
import os
from dotenv import load_dotenv
from swarms import Agent, Edge, GraphWorkflow, Node, NodeType, OpenAIChat
load_dotenv()
api_key = os.environ.get("OPENAI_API_KEY")
llm = OpenAIChat(
temperature=0.5, openai_api_key=api_key, max_tokens=4000
)
agent1 = Agent(llm=llm, max_loops=1, autosave=True, dashboard=True)
agent2 = Agent(llm=llm, max_loops=1, autosave=True, dashboard=True)
def sample_task():
print("正在运行示例任务")
return "任务完成"
wf_graph = GraphWorkflow()
wf_graph.add_node(Node(id="agent1", type=NodeType.AGENT, agent=agent1))
wf_graph.add_node(Node(id="agent2", type=NodeType.AGENT, agent=agent2))
wf_graph.add_node(
Node(id="task1", type=NodeType.TASK, callable=sample_task)
)
wf_graph.add_edge(Edge(source="agent1", target="task1"))
wf_graph.add_edge(Edge(source="agent2", target="task1"))
wf_graph.set_entry_points(["agent1", "agent2"])
wf_graph.set_end_points(["task1"])
print(wf_graph.visualize())
# 运行工作流
results = wf_graph.run()
print("执行结果:", results)
MixtureOfAgents
这是来自together.ai的论文"Mixture-of-Agents Enhances Large Language Model Capabilities"的实现,它在AlpacaEval 2.0、MT-Bench和FLASK上达到了最先进的水平,超越了GPT-4 Omni。非常适合需要并行化然后依次输入另一个循环的任务
from swarms import Agent, OpenAIChat, MixtureOfAgents
# 初始化指导代理
director = Agent(
agent_name="指导者",
system_prompt="为会计分配任务",
llm=OpenAIChat(),
max_loops=1,
dashboard=False,
streaming_on=True,
verbose=True,
stopping_token="<DONE>",
state_save_file_type="json",
saved_state_path="director.json",
)
# 初始化会计1
accountant1 = Agent(
agent_name="会计1",
system_prompt="准备财务报表",
llm=OpenAIChat(),
max_loops=1,
dashboard=False,
streaming_on=True,
verbose=True,
stopping_token="<DONE>",
state_save_file_type="json",
saved_state_path="accountant1.json",
)
# 初始化会计2
accountant2 = Agent(
agent_name="会计2",
system_prompt="审计财务记录",
llm=OpenAIChat(),
max_loops=1,
dashboard=False,
streaming_on=True,
verbose=True,
stopping_token="<DONE>",
state_save_file_type="json",
saved_state_path="accountant2.json",
)
# 创建代理列表
agents = [director, accountant1, accountant2]
# 群体
swarm = MixtureOfAgents(
name="会计群体",
agents=agents,
layers=3,
final_agent=director,
)
# 运行群体
out = swarm.run("准备财务报表并审计财务记录")
print(out)
入门会话
现在就与Swarms的创建者和主要维护者Kye Gomez一起参加入门会议,他将向您展示如何开始安装、使用示例以及开始构建您的自定义用例!点击此处
文档
文档位于:docs.swarms.world
Docker说明
文件夹结构
swarms包经过精心设计,以实现极致的可用性和理解性,swarms包被分为各种模块,如包含预构建代理的swarms.agents
,包含大量结构如Agent
和多代理结构的swarms.structs
。最重要的三个是structs
、models
和agents
。
├── __init__.py
├── agents
├── artifacts
├── memory
├── schemas
├── models
├── prompts
├── structs
├── telemetry
├── tools
├── utils
└── workers
🫶 贡献:
最简单的贡献方式是选择任何带有good first issue
标签的问题 💪。在这里阅读贡献指南。错误报告?在此处提交 | 功能请求?在此处提交
Swarms是一个开源项目,非常欢迎贡献。如果您想贡献,可以创建新功能、修复错误或改进基础设施。请参考CONTRIBUTING.md和我们的贡献板参与路线图讨论!
Swarm 新闻简报 🤖 🤖 🤖 📧
订阅Swarm新闻简报,接收最新的自主代理研究论文更新、创建多代理应用的分步指南,以及更多Swarmie的精彩内容 😊
探索会议
预约探索会议,了解Swarms如何通过闪电般速度的自主代理群体将您的运营成本降低40%。点击此处选择适合您的时间!
加速待办事项
通过在此处支持我们来加速错误修复、功能实现和演示:
社区
加入我们遍布全球的不断壮大的社区,获得实时支持、交流想法,讨论Swarms 😊
- 查看我们的官方博客
- 在Discord上与我们实时聊天
- 在Twitter上关注我们
- 在LinkedIn上与我们建立联系
- 访问我们的YouTube频道
- 加入Discord上的Swarms社区!
- 每周四纽约时间下午1点参加我们的Swarms社区聚会,释放自主代理在自动化日常任务中的潜力 点此报名
许可证
Apache 许可证
引用
如果Swarms对您的论文或项目有任何帮助,请在其中引用Swarms!非常感谢您。
@misc{swarms,
author = {Gomez, Kye},
title = {{Swarms: 多代理协作框架}},
howpublished = {\url{https://github.com/kyegomez/swarms}},
year = {2023},
note = {访问日期:日期}
}
@misc{wang2024mixtureofagents,
title={混合代理增强大型语言模型能力},
author={Junlin Wang and Jue Wang and Ben Athiwaratkun and Ce Zhang and James Zou},
year={2024},
eprint={2406.04692},
archivePrefix={arXiv},
primaryClass={cs.CL}
}