Spaces:
Sleeping
Sleeping
# **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. | |