Swarms / docs /swarms /agents /external_party_agents.md
harshalmore31's picture
Synced repo using 'sync_with_huggingface' Github Action
d8d14f1 verified
# **Swarms External Agent Integration**
Integrating external agents from other frameworks like **Langchain**, **Griptape**, and more is straightforward using **Swarms**. Below are step-by-step guides on how to bring these agents into Swarms by creating a new class, implementing the required methods, and ensuring compatibility.
---
## **Quick Overview**
- **Step 1**: Create a new class that inherits the `Agent` class from Swarms.
- **Step 2**: Override the `.run(task: str) -> str` method that will execute the agent and return a string response.
- **Step 3**: Optionally, add methods to save outputs to other formats like JSON, logs, or databases.
### **Agent Class**
The primary structure you'll need to integrate any external agent is the `Agent` class from **Swarms**. Here’s a template for how your new agent class should be structured:
```python
from swarms import Agent
class ExternalAgent(Agent):
def run(self, task: str) -> str:
# Implement logic to run external agent
pass
def save_to_json(self, output: str, filepath: str):
# Optionally save the result to a JSON file
with open(filepath, "w") as file:
json.dump({"response": output}, file)
```
---
## **Griptape Agent Integration Example**
In this example, we will create a **Griptape** agent by inheriting from the Swarms `Agent` class and implementing the `run` method.
### **Griptape Integration Steps**:
1. **Inherit from Swarms Agent**: Inherit from the `SwarmsAgent` class.
2. **Create Griptape Agent**: Initialize the **Griptape** agent inside your class and provide it with the necessary tools.
3. **Override the `run()` method**: Implement logic to process a task string and execute the Griptape agent.
## **Griptape Example Code**:
```python
from swarms import (
Agent as SwarmsAgent,
) # Import the base Agent class from Swarms
from griptape.structures import Agent as GriptapeAgent
from griptape.tools import (
WebScraperTool,
FileManagerTool,
PromptSummaryTool,
)
# Create a custom agent class that inherits from SwarmsAgent
class GriptapeSwarmsAgent(SwarmsAgent):
def __init__(self, *args, **kwargs):
# Initialize the Griptape agent with its tools
self.agent = GriptapeAgent(
input="Load {{ args[0] }}, summarize it, and store it in a file called {{ args[1] }}.",
tools=[
WebScraperTool(off_prompt=True),
PromptSummaryTool(off_prompt=True),
FileManagerTool(),
],
*args,
**kwargs,
)
# Override the run method to take a task and execute it using the Griptape agent
def run(self, task: str) -> str:
# Extract URL and filename from task
url, filename = task.split(",") # Example task string: "https://example.com, output.txt"
# Execute the Griptape agent
result = self.agent.run(url.strip(), filename.strip())
# Return the final result as a string
return str(result)
# Example usage:
griptape_swarms_agent = GriptapeSwarmsAgent()
output = griptape_swarms_agent.run("https://griptape.ai, griptape.txt")
print(output)
```
### **Explanation**:
1. **GriptapeSwarmsAgent**: The custom class that integrates **Griptape** into **Swarms**.
2. **run(task: str)**: This method extracts inputs from the task string and runs the agent using **Griptape** tools.
3. **Tools**: The **Griptape** agent is equipped with web scraping, summarization, and file management tools.
## **Additional Features**:
You can enhance your external agents with additional features such as:
- **Saving outputs** to JSON, databases, or logs.
- **Handling errors** and retry mechanisms for robustness.
- **Custom logging** with tools like **Loguru** for extensive debugging.
---
## **Langchain Agent Integration Example**
Next, we demonstrate how to integrate a **Langchain** agent with **Swarms** by following similar steps.
### **Langchain Integration Steps**:
1. **Inherit from Swarms Agent**: Inherit from the `SwarmsAgent` class.
2. **Create Langchain Agent**: Initialize a Langchain agent with the necessary components (like language models or memory modules).
3. **Override the `run()` method**: Pass tasks to the Langchain agent and return the response.
## **Langchain Example Code**:
```python
from swarms import Agent as SwarmsAgent
from langchain import LLMChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
# Create a custom agent class that inherits from SwarmsAgent
class LangchainSwarmsAgent(SwarmsAgent):
def __init__(self, *args, **kwargs):
# Initialize the Langchain agent with LLM and prompt
prompt_template = PromptTemplate(template="Answer the question: {question}")
llm = OpenAI(model="gpt-3.5-turbo")
self.chain = LLMChain(llm=llm, prompt=prompt_template)
super().__init__(*args, **kwargs)
# Override the run method to take a task and execute it using the Langchain agent
def run(self, task: str) -> str:
# Pass the task to the Langchain agent
result = self.chain.run({"question": task})
# Return the final result as a string
return result
# Example usage:
langchain_swarms_agent = LangchainSwarmsAgent()
output = langchain_swarms_agent.run("What is the capital of France?")
print(output)
```
### **Explanation**:
1. **LangchainSwarmsAgent**: The custom class integrates **Langchain** into **Swarms**.
2. **run(task: str)**: The task is passed to a language model via Langchain and returns a result.
### Additional Examples from other providers
### 1. **OpenAI Function Calling Agents**
- **Description**: OpenAI models like GPT-4 can now call functions programmatically. This makes it possible to create agents that execute external functions, APIs, or code snippets.
## Example Integration:
```python
from swarms import Agent as SwarmsAgent
import openai
# Custom OpenAI Function Calling Agent
class OpenAIFunctionAgent(SwarmsAgent):
def __init__(self, *args, **kwargs):
# Initialize OpenAI API credentials and settings
self.api_key = "your_openai_api_key"
super().__init__(*args, **kwargs)
def run(self, task: str) -> str:
# Example task: "summarize, 'Provide a short summary of this text...'"
command, input_text = task.split(", ")
response = openai.Completion.create(
model="gpt-4",
prompt=f"{command}: {input_text}",
temperature=0.5,
max_tokens=100,
)
return response.choices[0].text.strip()
# Example usage:
openai_agent = OpenAIFunctionAgent()
output = openai_agent.run("summarize, Provide a short summary of this text...")
print(output)
```
### 2. **Rasa Agents**
- **Description**: **Rasa** is a popular open-source framework for building conversational AI agents. You can integrate **Rasa** to build dialogue-based agents with **Swarms**.
## Example Integration:
```python
from swarms import Agent as SwarmsAgent
from rasa.core.agent import Agent as RasaAgent
from rasa.core.interpreter import RasaNLUInterpreter
# Custom Rasa Swarms Agent
class RasaSwarmsAgent(SwarmsAgent):
def __init__(self, model_path: str, *args, **kwargs):
# Initialize the Rasa agent with a pre-trained model
self.agent = RasaAgent.load(model_path)
super().__init__(*args, **kwargs)
def run(self, task: str) -> str:
# Pass user input to the Rasa agent
result = self.agent.handle_text(task)
# Return the final response from the agent
return result[0]["text"] if result else "No response."
# Example usage:
rasa_swarms_agent = RasaSwarmsAgent("path/to/rasa_model")
output = rasa_swarms_agent.run("Hello, how can I get a refund?")
print(output)
```
### 3. **Hugging Face Transformers**
- **Description**: **Hugging Face** offers a variety of pre-trained models, including transformers for NLP tasks. These can be easily integrated into **Swarms** for various tasks like text generation, question answering, and more.
## Example Integration:
```python
from swarms import Agent as SwarmsAgent
from transformers import pipeline
# Custom Hugging Face Agent
class HuggingFaceSwarmsAgent(SwarmsAgent):
def __init__(self, model_name: str, *args, **kwargs):
# Initialize a pre-trained pipeline from Hugging Face
self.pipeline = pipeline("text-generation", model=model_name)
super().__init__(*args, **kwargs)
def run(self, task: str) -> str:
# Generate text based on the task input
result = self.pipeline(task, max_length=50)
return result[0]["generated_text"]
# Example usage:
hf_swarms_agent = HuggingFaceSwarmsAgent("gpt2")
output = hf_swarms_agent.run("Once upon a time in a land far, far away...")
print(output)
```
### 4. **AutoGPT or BabyAGI**
- **Description**: **AutoGPT** and **BabyAGI** are agent frameworks designed to be autonomous, where agents can recursively execute tasks and create new tasks based on previous outputs.
## Example Integration:
```python
from swarms import Agent as SwarmsAgent
from autogpt import AutoGPT
# Custom AutoGPT Agent
class AutoGPTSwarmsAgent(SwarmsAgent):
def __init__(self, config, *args, **kwargs):
# Initialize AutoGPT with configuration
self.agent = AutoGPT(config)
super().__init__(*args, **kwargs)
def run(self, task: str) -> str:
# Execute task recursively using AutoGPT
result = self.agent.run(task)
return result
# Example usage:
autogpt_swarms_agent = AutoGPTSwarmsAgent({"goal": "Solve world hunger"})
output = autogpt_swarms_agent.run("Develop a plan to solve world hunger.")
print(output)
```
### 5. **DialogFlow Agents**
- **Description**: **DialogFlow** by Google is used to build conversational agents. These agents can process user intents and deliver responses based on predefined conversation flows.
## Example Integration:
```python
from swarms import Agent as SwarmsAgent
from google.cloud import dialogflow
# Custom DialogFlow Agent
class DialogFlowSwarmsAgent(SwarmsAgent):
def __init__(self, project_id: str, session_id: str, *args, **kwargs):
# Initialize DialogFlow session client
self.session_client = dialogflow.SessionsClient()
self.project_id = project_id
self.session_id = session_id
super().__init__(*args, **kwargs)
def run(self, task: str) -> str:
session = self.session_client.session_path(self.project_id, self.session_id)
text_input = dialogflow.TextInput(text=task, language_code="en-US")
query_input = dialogflow.QueryInput(text=text_input)
response = self.session_client.detect_intent(
request={"session": session, "query_input": query_input}
)
return response.query_result.fulfillment_text
# Example usage:
dialogflow_swarms_agent = DialogFlowSwarmsAgent("your_project_id", "your_session_id")
output = dialogflow_swarms_agent.run("Book me a flight to Paris.")
print(output)
```
### 6. **ChatterBot Agents**
- **Description**: **ChatterBot** is a Python-based machine-learning conversational agent. It learns from previous conversations to generate intelligent responses.
## Example Integration:
```python
from swarms import Agent as SwarmsAgent
from chatterbot import ChatBot
# Custom ChatterBot Agent
class ChatterBotSwarmsAgent(SwarmsAgent):
def __init__(self, name: str, *args, **kwargs):
# Initialize ChatterBot
self.agent = ChatBot(name)
super().__init__(*args, **kwargs)
def run(self, task: str) -> str:
# Get a response from ChatterBot based on user input
response = self.agent.get_response(task)
return str(response)
# Example usage:
chatterbot_swarms_agent = ChatterBotSwarmsAgent("Assistant")
output = chatterbot_swarms_agent.run("What is the capital of Italy?")
print(output)
```
### 7. **Custom APIs as Agents**
- **Description**: You can create agents that integrate with any REST or GraphQL API by defining them as a task runner within Swarms. This allows for interaction with third-party services.
## Example Integration:
```python
from swarms import Agent as SwarmsAgent
import requests
# Custom API Agent
class APIAgent(SwarmsAgent):
def run(self, task: str) -> str:
# Parse task for API endpoint and parameters
endpoint, params = task.split(", ")
response = requests.get(endpoint, params={"q": params})
return response.text
# Example usage:
api_swarms_agent = APIAgent()
output = api_swarms_agent.run("https://api.example.com/search, python")
print(output)
```
---
### **Summary of Integrations**:
- **Griptape**: Integrate with tools for web scraping, summarization, etc.
- **Langchain**: Use powerful language model orchestration.
- **OpenAI Function Calling**: Directly run OpenAI API-based agents.
- **Rasa**: Build and integrate conversational agents.
- **Hugging Face**: Leverage transformer models.
- **AutoGPT/BabyAGI**: Recursive, autonomous task execution.
- **DialogFlow**: Integrate conversational flows for voice/chat-based systems.
- **ChatterBot**: Machine-learning conversational agents.
- **Custom APIs**: Leverage external APIs as agents for custom workflows.
---
## **Conclusion**:
By following the steps outlined above, you can seamlessly integrate external agent frameworks like **Griptape** and **Langchain** into **Swarms**. This makes Swarms a highly versatile platform for orchestrating various agentic workflows and leveraging the unique capabilities of different frameworks.
For more examples and use cases, please refer to the official Swarms documentation site.