From 3315648a0f82a1dd926a1ec6609fde78efc01bbc Mon Sep 17 00:00:00 2001 From: Nicolas Date: Sat, 12 Oct 2024 16:00:14 -0300 Subject: [PATCH] Nick: open ai swarm and firecrawl --- examples/openai_swarm_firecrawl/README.md | 37 +++++++ examples/openai_swarm_firecrawl/main.py | 103 ++++++++++++++++++ .../openai_swarm_firecrawl/requirements.txt | 2 + 3 files changed, 142 insertions(+) create mode 100644 examples/openai_swarm_firecrawl/README.md create mode 100644 examples/openai_swarm_firecrawl/main.py create mode 100644 examples/openai_swarm_firecrawl/requirements.txt diff --git a/examples/openai_swarm_firecrawl/README.md b/examples/openai_swarm_firecrawl/README.md new file mode 100644 index 00000000..b256ae7d --- /dev/null +++ b/examples/openai_swarm_firecrawl/README.md @@ -0,0 +1,37 @@ +# Swarm Firecrawl Marketing Agent + +A multi-agent system using [OpenAI Swarm](https://github.com/openai/swarm) for AI-powered marketing strategies using [Firecrawl](https://firecrawl.dev) for web scraping. + +## Agents + +1. User Interface: Manages user interactions +2. Website Scraper: Extracts clean LLM-ready content via Firecrawl API +3. Analyst: Provides marketing insights +4. Campaign Idea: Generates marketing campaign concepts +5. Copywriter: Creates compelling marketing copy + +## Requirements + +- [Firecrawl](https://firecrawl.dev) API key +- [OpenAI](https://platform.openai.com/api-keys) API key + +## Setup + +1. Install the required packages: + ``` + pip install -r requirements.txt + ``` + +2. Set up your environment variables in a `.env` file: + ``` + OPENAI_API_KEY=your_openai_api_key + FIRECRAWL_API_KEY=your_firecrawl_api_key + ``` + +## Usage + +Run the main script to start the interactive demo: + +``` +python main.py +``` \ No newline at end of file diff --git a/examples/openai_swarm_firecrawl/main.py b/examples/openai_swarm_firecrawl/main.py new file mode 100644 index 00000000..cef53fdf --- /dev/null +++ b/examples/openai_swarm_firecrawl/main.py @@ -0,0 +1,103 @@ +import os +from firecrawl import FirecrawlApp +from swarm import Agent +from swarm.repl import run_demo_loop +import dotenv +from openai import OpenAI + +dotenv.load_dotenv() + +# Initialize FirecrawlApp and OpenAI +app = FirecrawlApp(api_key=os.getenv("FIRECRAWL_API_KEY")) +client = OpenAI(api_key=os.getenv("OPENAI_API_KEY")) + +def scrape_website(url): + """Scrape a website using Firecrawl.""" + scrape_status = app.scrape_url( + url, + params={'formats': ['markdown']} + ) + return scrape_status + +def analyze_website_content(content): + """Analyze the scraped website content using OpenAI.""" + response = client.chat.completions.create( + model="gpt-4o-mini", + messages=[ + {"role": "system", "content": "You are a marketing analyst. Analyze the following website content and provide key insights for marketing strategy."}, + {"role": "user", "content": content} + ] + ) + return {"analysis": response.choices[0].message.content} + +def generate_copy(brief): + """Generate marketing copy based on a brief using OpenAI.""" + response = client.chat.completions.create( + model="gpt-4o-mini", + messages=[ + {"role": "system", "content": "You are a copywriter. Create compelling marketing copy based on the following brief."}, + {"role": "user", "content": brief} + ] + ) + return {"copy": response.choices[0].message.content} + +def create_campaign_idea(target_audience, goals): + """Create a campaign idea based on target audience and goals using OpenAI.""" + response = client.chat.completions.create( + model="gpt-4o-mini", + messages=[ + {"role": "system", "content": "You are a marketing strategist. Create an innovative campaign idea based on the target audience and goals provided."}, + {"role": "user", "content": f"Target Audience: {target_audience}\nGoals: {goals}"} + ] + ) + return {"campaign_idea": response.choices[0].message.content} + +def handoff_to_copywriter(): + """Hand off the campaign idea to the copywriter agent.""" + return copywriter_agent + +def handoff_to_analyst(): + """Hand off the website content to the analyst agent.""" + return analyst_agent + +def handoff_to_campaign_idea(): + """Hand off the target audience and goals to the campaign idea agent.""" + return campaign_idea_agent + +def handoff_to_website_scraper(): + """Hand off the url to the website scraper agent.""" + return website_scraper_agent + +user_interface_agent = Agent( + name="User Interface Agent", + instructions="You are a user interface agent that handles all interactions with the user. You need to always start with a URL that the user wants to create a marketing strategy for. Ask clarification questions if needed. Be concise.", + functions=[handoff_to_website_scraper], +) + +website_scraper_agent = Agent( + name="Website Scraper Agent", + instructions="You are a website scraper agent specialized in scraping website content.", + functions=[scrape_website, handoff_to_analyst], +) + +analyst_agent = Agent( + name="Analyst Agent", + instructions="You are an analyst agent that examines website content and provides insights for marketing strategies. Be concise.", + functions=[analyze_website_content, handoff_to_campaign_idea], +) + +campaign_idea_agent = Agent( + name="Campaign Idea Agent", + instructions="You are a campaign idea agent that creates innovative marketing campaign ideas based on website content and target audience. Be concise.", + functions=[create_campaign_idea, handoff_to_copywriter], +) + +copywriter_agent = Agent( + name="Copywriter Agent", + instructions="You are a copywriter agent specialized in creating compelling marketing copy based on website content and campaign ideas. Be concise.", + functions=[generate_copy], +) + +if __name__ == "__main__": + # Run the demo loop with the user interface agent + run_demo_loop(user_interface_agent, stream=True) \ No newline at end of file diff --git a/examples/openai_swarm_firecrawl/requirements.txt b/examples/openai_swarm_firecrawl/requirements.txt new file mode 100644 index 00000000..516c1dd2 --- /dev/null +++ b/examples/openai_swarm_firecrawl/requirements.txt @@ -0,0 +1,2 @@ +firecrawl-py +openai \ No newline at end of file