Skip to main content

An open source agent orchestration framework built on top of the latest OpenAI Assistants API.

Project description

🐝 Agency Swarm

Framework

Overview

Agency Swarm is an open-source agent orchestration framework designed to automate and streamline AI development processes. Leveraging the power of the OpenAI Assistants API, it enables the creation of a collaborative swarm of agents (Agencies), each with distinct roles and capabilities. This framework aims to replace traditional AI development methodologies with a more dynamic, flexible, and efficient agent-based system.

Open in Colab Subscribe on YouTube Follow on Twitter Join our Discord!

Key Features

  • Customizable Agent Roles: Define roles like CEO, virtual assistant, developer, etc., and customize their functionalities with Assistants API.
  • Full Control Over Prompts: Avoid conflicts and restrictions of pre-defined prompts, allowing full customization.
  • Tool Creation: Tools within Agency Swarm are created using Instructor, which provides a convenient interface and automatic type validation.
  • Efficient Communication: Agents communicate through a specially designed "send message" tool based on their own descriptions.
  • State Management: Agency Swarm efficiently manages the state of your assistants on OpenAI, maintaining it in a special settings.json file.

Installation

pip install agency-swarm

Getting Started

  1. Set Your OpenAI Key:
from agency_swarm import set_openai_key
set_openai_key("YOUR_API_KEY")
  1. Create Tools: Define your custom tools with Instructor:
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.
    """

    # Define the fields with descriptions using Pydantic Field
    example_field: str = Field(
        ..., description="Description of the example field, explaining its purpose and usage."
    )

    # Additional fields as required
    # ...

    def run(self):
        """
        The implementation of the run method, where the tool's main functionality is executed.
        This method should utilize the fields defined above to perform its task.
        Doc string description is not required for this method.
        """

        # Your custom tool logic goes here
        do_something(self.example_field)

        # Return the result of the tool's operation
        return "Result of MyCustomTool operation"

Import in 1 line of code from Langchain:

from langchain.tools import YouTubeSearchTool
from agency_swarm.tools import ToolFactory

LangchainTool = ToolFactory.from_langchain_tool(YouTubeSearchTool)

or

from langchain.agents import load_tools

tools = load_tools(
    ["arxiv", "human"],
)

tools = ToolFactory.from_langchain_tools(tools)

NEW: Convert from OpenAPI schemas:

# using local file
with open("schemas/your_schema.json") as f:
    ToolFactory.from_openapi_schema(
        f.read(),
    )

# using requests
ToolFactory.from_openapi_schema(
    requests.get("https://api.example.com/openapi.json").json(),
)
  1. 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

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=[MyCustomTool, LangchainTool])

Import from existing agents:

from agency_swarm.agents.browsing import BrowsingAgent

browsing_agent = BrowsingAgent()

browsing_agent.instructions += "\n\nYou can add additional instructions here."
  1. Define Agency Communication Flows: Establish how your agents will communicate with each other.
from agency_swarm import Agency

agency = Agency([
    ceo,  # CEO will be the entry point for communication with the user
    [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, meaning they are established from left to right in the agency_chart definition. For instance, in the example above, the CEO can initiate a chat with the developer (dev), and the developer can respond in this chat. However, the developer cannot initiate a chat with the CEO. The developer can initiate a chat with the virtual assistant (va) and assign new tasks.

  1. Run Demo: Run the demo to see your agents in action!
agency.demo_gradio(height=900)

Terminal version:

agency.run_demo()
  1. Get Completion: Get completion from the agency:
completion_output = agency.get_completion("Please create a new website for our client.", yield_messages=False)

CLI

Genesis Agency

The genesis command starts the genesis agency in your terminal to help you create new agencies and agents.

Command Syntax:

agency-swarm genesis [--openai_key "YOUR_API_KEY"]

Creating Agent Templates Locally

This CLI command simplifies the process of creating a structured environment for each agent.

Command Syntax:

agency-swarm create-agent-template --name "AgentName" --description "Agent Description" [--path "/path/to/directory"] [--use_txt]

Folder Structure

When you run the create-agent-template command, it creates the following folder structure for your agent:

/your-specified-path/
│
├── agency_manifesto.md or .txt # Agency's guiding principles (created if not exists)
└── 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
    

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.

Future Enhancements

  1. Creation of agencies that can autonomously create other agencies.
  2. Asynchronous communication and task handling.
  3. Inter-agency communication for a self-expanding system.

Contributing

For details on how to contribute you agents and tools to Agency Swarm, please refer to the Contributing Guide.

License

Agency Swarm is open-source and licensed under MIT.

Need Help?

If you require assistance in creating custom agent swarms or have any specific queries related to Agency Swarm, feel free to reach out through my website: vrsen.ai or schedule a consultation at https://calendly.com/vrsen/ai-project-consultation

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

agency-swarm-0.1.2.tar.gz (178.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

agency_swarm-0.1.2-py3-none-any.whl (191.5 kB view details)

Uploaded Python 3

File details

Details for the file agency-swarm-0.1.2.tar.gz.

File metadata

  • Download URL: agency-swarm-0.1.2.tar.gz
  • Upload date:
  • Size: 178.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.8

File hashes

Hashes for agency-swarm-0.1.2.tar.gz
Algorithm Hash digest
SHA256 d1c66fe620dabcc3479b2d8aa4c697e63bcd037bc4ae6bee8bc9744f03cf364d
MD5 a9716e0ce9ba9028f956dc3f7a9850a4
BLAKE2b-256 15d8d1b8cdbf355317dc43f38697f2e98bc79d591d0436b1e116f779618f6705

See more details on using hashes here.

File details

Details for the file agency_swarm-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: agency_swarm-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 191.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.8

File hashes

Hashes for agency_swarm-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 cb58226d9bf0a5a2990c8fc0f2d336acdb8b800c4ec348c293bb80a3be491ac5
MD5 29c4cc9dbfad00c2f7f3b96dd46e5a27
BLAKE2b-256 9b89bee64febd859da8ee8056696dd04c49d224c0c1fe81cc649fd89b0f3aff9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page