| import os
|
| import streamlit as st
|
| from crewai import Agent, Task, Crew, LLM
|
|
|
|
|
| gemini_api_key = 'AIzaSyAC_i-I9uCP2UP14H89uigWP7MDM2xQno8'
|
| os.environ["GEMINI_API_KEY"] = gemini_api_key
|
|
|
|
|
| my_llm = LLM(
|
| api_key=gemini_api_key,
|
| model="gemini/gemini-pro"
|
| )
|
|
|
|
|
| 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=my_llm,
|
| allow_delegation=False,
|
| verbose=True
|
| )
|
|
|
| writer = Agent(
|
| role="Content Writer",
|
| goal="Write insightful and factually accurate opinion piece about the topic: {topic}",
|
| backstory="You're 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 provided by the Content Planner.",
|
| llm=my_llm,
|
| allow_delegation=False,
|
| verbose=True
|
| )
|
|
|
| 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 reviews blog posts from the Content Writer to ensure they follow journalistic best practices, provide balanced viewpoints, "
|
| "and avoid controversial topics when possible.",
|
| llm=my_llm,
|
| allow_delegation=False,
|
| verbose=True
|
| )
|
|
|
|
|
| plan = Task(
|
| description=(
|
| "1. Prioritize the latest trends, key players, "
|
| "and noteworthy news on {topic}.\n"
|
| "2. Identify the target audience, considering "
|
| "their interests and pain points.\n"
|
| "3. Develop a detailed content outline including "
|
| "an introduction, key points, and a call to action.\n"
|
| "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,
|
| )
|
|
|
| write = Task(
|
| description=(
|
| "1. Use the content plan to craft a compelling "
|
| "blog post on {topic}.\n"
|
| "2. Incorporate SEO keywords naturally.\n"
|
| "3. Ensure the post is structured with an engaging introduction, insightful body, and a summarizing conclusion.\n"
|
| "4. 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,
|
| )
|
|
|
| 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
|
| )
|
|
|
|
|
| article_crew = Crew(
|
| agents=[planner, writer, editor],
|
| tasks=[plan, write, edit],
|
| manager_llm=False,
|
| verbose=True
|
| )
|
|
|
|
|
| st.title('Content Creation for Blog Articles')
|
| st.write("Enter the topic for your blog article:")
|
|
|
|
|
| topic = st.text_input("Topic", "Artificial Intelligence")
|
|
|
| if st.button('Generate Article'):
|
|
|
| result = article_crew.kickoff(inputs={"topic": topic})
|
|
|
|
|
|
|
| st.markdown(result)
|
|
|
|
|