|
|
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)
|
|
|
|
|
|
|