mirror of
https://github.com/mendableai/firecrawl.git
synced 2024-11-16 11:42:24 +08:00
Nick: open ai swarm and firecrawl
This commit is contained in:
parent
ca85feb9d0
commit
3315648a0f
37
examples/openai_swarm_firecrawl/README.md
Normal file
37
examples/openai_swarm_firecrawl/README.md
Normal file
|
@ -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
|
||||
```
|
103
examples/openai_swarm_firecrawl/main.py
Normal file
103
examples/openai_swarm_firecrawl/main.py
Normal file
|
@ -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)
|
2
examples/openai_swarm_firecrawl/requirements.txt
Normal file
2
examples/openai_swarm_firecrawl/requirements.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
firecrawl-py
|
||||
openai
|
Loading…
Reference in New Issue
Block a user