|
|
hace 2 semanas | |
|---|---|---|
| .claude | hace 2 semanas | |
| .cursor | hace 2 semanas | |
| .github | hace 2 semanas | |
| docs | hace 2 semanas | |
| examples | hace 2 semanas | |
| run | hace 2 semanas | |
| src | hace 2 semanas | |
| tests | hace 2 semanas | |
| .gitignore | hace 2 semanas | |
| .pre-commit-config.yaml | hace 2 semanas | |
| .prettierignore | hace 2 semanas | |
| .prettierrc | hace 2 semanas | |
| AGENTS.md | hace 2 semanas | |
| CLAUDE.md | hace 2 semanas | |
| CONTRIBUTING.md | hace 2 semanas | |
| LICENSE | hace 2 semanas | |
| Makefile | hace 2 semanas | |
| README.md | hace 2 semanas | |
| hatch_build.py | hace 2 semanas | |
| package.json | hace 2 semanas | |
| pyproject.toml | hace 2 semanas | |
| tsconfig.json | hace 2 semanas | |
| uv.lock | hace 2 semanas |
基于OpenAI Agents SDK构建的可靠多Agent编排框架。提供专业化功能用于创建、编排和管理协作式AI Agent群体,已生产级就绪。
agency-swarm填补了"单Agent demo"到"生产级多Agent系统"之间的鸿沟,让团队能够用声明式方式定义Agent角色、工具和通信流。
核心优势:
# 安装
pip install -U agency-swarm
import os
os.environ["OPENAI_API_KEY"] = "your-api-key"
# 或使用LiteLLM路由
os.environ["LITELLM_MODEL"] = "claude-3-5-sonnet"
from agency_swarm import function_tool
from pydantic import Field
@function_tool
def send_email(to: str, subject: str, body: str = Field(...)) -> str:
"""发送邮件"""
# 实现邮件发送逻辑
return f"邮件已发送至 {to}"
from agency_swarm import Agent, Agency
ceo = Agent(
name="CEO",
instructions="你是公司CEO,负责协调各部门Agent完成战略任务。",
tools=[]
)
developer = Agent(
name="Developer",
instructions="你是资深开发工程师,负责代码审查和技术决策。",
tools=[send_email]
)
agency = Agency(
ceo=ceo,
agents=[developer],
shared_instructions="所有Agent共同目标是高效完成任务。"
)
# CEO向Developer委派任务
result = agency.run("帮我审查最近提交的代码")
本项目采用 MIT 开源许可证。
The Agency Swarm is a framework for building multi-agent applications. It leverages and extends the OpenAI Agents SDK, providing specialized features for creating, orchestrating, and managing collaborative swarms of AI agents.
This framework continues the original vision of Arsenii Shatokhin (aka VRSEN) to simplify the creation of AI agencies by thinking about automation in terms of real-world organizational structures, making it intuitive for both agents and users.
Migrating from v0.x? Please see our Migration Guide for details on adapting your project to this new SDK-based version.
FunctionTool format.send_message tool, with interactions governed by explicit, directional communication_flows defined on the Agency.load_threads_callback and save_threads_callback to the Agency, enabling persistence across sessions (e.g., DB/file storage).pip install -U agency-swarm
v1.x note: The framework targets the OpenAI Agents SDK + Responses API. Migrating from v0.x? See the Migration Guide.
If you hit environment issues, see the Installation guide.
Recommended: Start with the Agency Starter Template before you customize anything.
Set Your OpenAI Key:
Create a .env file with OPENAI_API_KEY=your_key (auto-loaded), or export it in your shell:
export OPENAI_API_KEY="YOUR_API_KEY"
Create Tools:
Define tools using the modern @function_tool decorator (recommended), or extend BaseTool (compatible):
from agency_swarm import function_tool
@function_tool
def my_custom_tool(example_field: str) -> str:
"""A brief description of what the custom tool does."""
return f"Result: {example_field}"
or with BaseTool:
from agency_swarm.tools import BaseTool
from pydantic import Field
class MyCustomTool(BaseTool):
"""
A brief description of what the custom tool does.
The docstring should clearly explain the tool's purpose and functionality.
It will be used by the agent to determine when to use this tool.
"""
# Define the fields with descriptions using Pydantic Field
example_field: str = Field(
..., description="Description of the example field, explaining its purpose and usage for the Agent."
)
def run(self):
"""
The implementation of the run method, where the tool's main functionality is executed.
"""
# Your custom tool logic goes here
# do_something(self.example_field)
# Return the result of the tool's operation
return "Result of MyCustomTool operation"
or convert from OpenAPI schemas:
from agency_swarm.tools import ToolFactory
# using local file
with open("schemas/your_schema.json") as f:
tools = ToolFactory.from_openapi_schema(
f.read(),
)
# using requests
import requests
tools = ToolFactory.from_openapi_schema(
requests.get("https://api.example.com/openapi.json").json(),
)
Define Agent Roles: Start by defining the roles of your agents. For example, a CEO agent for managing tasks and a developer agent for executing tasks.
from agency_swarm import Agent, ModelSettings
ceo = Agent(
name="CEO",
description="Responsible for client communication, task planning and management.",
instructions="You must converse with other agents to ensure complete task execution.", # can be a file like ./instructions.md
files_folder="./files", # files to be uploaded to OpenAI
schemas_folder="./schemas", # OpenAPI schemas to be converted into tools
tools=[my_custom_tool], # FunctionTool returned by @function_tool (or adapt BaseTool via ToolFactory)
model="gpt-5.4-mini",
model_settings=ModelSettings(
max_tokens=25000,
),
)
Working from examples:
./examples for runnable demos and patterns you can adapt..cursorrules file at the repo root with your AI coding agent (Cursor, Claude Code, etc.).Define Agency Communication Flows: Establish how your agents will communicate with each other.
from agency_swarm import Agency
# if importing from local files
from Developer import Developer
from VirtualAssistant import VirtualAssistant
dev = Developer()
va = VirtualAssistant()
agency = Agency(
ceo, # CEO will be the entry point for communication with the user
communication_flows=[
ceo > dev, # CEO can initiate communication with Developer
ceo > va, # CEO can initiate communication with Virtual Assistant
dev > va # Developer can initiate communication with Virtual Assistant
],
shared_instructions='agency_manifesto.md', # shared instructions for all agents
)
In Agency Swarm, communication flows are directional. The > operator defines allowed initiations (left can initiate a chat with right).
Run a Demo
Web UI:
agency.copilot_demo()
Terminal:
agency.tui()
On first run, Agency Swarm sets up the terminal app automatically, shows a short setup message, and reuses it on later runs.
See the terminal workflow guide: https://agency-swarm.ai/core-framework/agencies/agent-swarm-cli
Programmatic (async):
import asyncio
async def main():
resp = await agency.get_response("Create a project skeleton.")
print(resp.final_output)
asyncio.run(main())
Need sync? agency.get_response_sync(...) exists, but async is recommended.
Recommended agent folder structure:
/your-specified-path/
│
├── agency_manifesto.md or .txt # Agency's guiding principles (created if not present)
└── AgentName/ # Directory for the specific agent
├── files/ # Directory for files that will be uploaded to OpenAI
├── schemas/ # Directory for OpenAPI schemas to be converted into tools
├── tools/ # Directory for tools to be imported by default.
├── AgentName.py # The main agent class file
├── __init__.py # Initializes the agent folder as a Python package
├── instructions.md or .txt # Instruction document for the agent
└── tools.py # Custom tools specific to the agent's role.
This structure ensures that each agent has its dedicated space with all necessary files to start working on its specific tasks. The tools.py can be customized to include tools and functionalities specific to the agent's role.
For details on how to contribute to Agency Swarm, please refer to the Contributing Guide.
Agency Swarm is open-source and licensed under MIT.
If you need help creating custom agent swarms for your business, check out our Agents-as-a-Service subscription, or schedule a consultation with me at https://calendly.com/vrsen/ai-readiness-call