Spaces:
Sleeping
Sleeping
| from crewai import Agent, Task, Crew | |
| from crewai_tools import SerperDevTool, ScrapeWebsiteTool | |
| def generate_content(llm, topic): | |
| search_tool = SerperDevTool(n_results=10) | |
| docs_scrape_tool = ScrapeWebsiteTool() | |
| planner = Agent( | |
| role = "Content Planner", | |
| goal = "Plan engaging and factually accurate content on {topic}", | |
| backstory = """You're working on planning a blog article about the topic: {topic}. | |
| You collect information that helps the audience learn something and make informed decisions. | |
| Your work is the basis for the Content Writer to write an article on this topic.""", | |
| llm = llm, | |
| allow_delegation = False, | |
| verbose = True, | |
| tools = [search_tool, docs_scrape_tool] | |
| ) | |
| plan = Task( | |
| description = """1. Prioritize the latest trends, key players, and noteworthy news on {topic}. | |
| 2. Identify the target audience, considering their interests and pain points. | |
| 3. Develop a detailed content outline including an introduction, key points, and a call to action. | |
| 4. Include SEO keywords and relevant data or sources.""", | |
| expected_output = """A comprehensive content plan document with an outline, audience analysis, SEO keywords, and resources.""", | |
| agent = planner, | |
| ) | |
| writer = Agent( | |
| role = "Content Writer", | |
| goal = """Write insightful and factually accurate opinion piece about the topic: {topic}""", | |
| backstory = """You're working on a writing a new opinion piece about the topic: {topic}. | |
| You base your writing on the work of the Content Planner, who provides an outline and relevant context about the topic. | |
| You follow the main objectives and direction of the outline, as provide by the Content Planner. | |
| You also provide objective and impartial insights and back them up with information provide by the Content Planner. | |
| You acknowledge in your opinion piece when your statements are opinions as opposed to objective statements.""", | |
| llm = llm, | |
| allow_delegation = False, | |
| verbose = True | |
| ) | |
| write = Task( | |
| description = """1. Use the content plan to craft a compelling blog post on {topic}. | |
| 2. Incorporate SEO keywords naturally. | |
| 3. Sections/Subtitles are properly named in an engaging manner. | |
| 4. Ensure the post is structured with an engaging introduction, insightful body, and a summarizing conclusion. | |
| 5. Proofread for grammatical errors and alignment with the brand's voice.""", | |
| expected_output = "A well-written blog post in markdown format, ready for publication, each section should have 2 or 3 paragraphs.", | |
| agent = writer, | |
| ) | |
| editor = Agent( | |
| role = "Editor", | |
| goal = "Edit a given blog post to align with the writing style of the organization.", | |
| backstory = """You are an editor who receives a blog post from the Content Writer. | |
| Your goal is to review the blog post to ensure that it follows journalistic best practices, | |
| provides balanced viewpoints when providing opinions or assertions, and also avoids major controversial topics | |
| or opinions when possible.""", | |
| llm = llm, | |
| allow_delegation = False, | |
| verbose = True | |
| ) | |
| edit = Task( | |
| description = "Proofread the given blog post for grammatical errors and alignment with the brand's voice.", | |
| expected_output = "A well-written blog post in markdown format, ready for publication, each section should have 2 or 3 paragraphs.", | |
| agent = editor | |
| ) | |
| crew = Crew( | |
| agents = [planner, writer, editor], | |
| tasks = [plan, write, edit], | |
| verbose = True | |
| ) | |
| return crew.kickoff(inputs={"topic": topic}) | |