Para executar esse script você precisa usar o GOOGLE COLAB e duas chaves API (OpenAI e SERPER) nos links a seguir:
https://colab.research.google.com/
https://platform.openai.com/api-keys
Utilizem o GOOGLE COLAB e sigam o passo a passo explicativo dos vídeos disponibilizados no Material Complementar
!pip install crewai==0.28.8 crewai_tools==0.1.6 langchain_community==0.0.29
import os
from crewai_tools import tool, SerperDevTool, ScrapeWebsiteTool, WebsiteSearchTool
from crewai_tools import tool
from crewai import Agent, Task, Crew, Process
from langchain_openai import ChatOpenAI
# Função para ler a chave de API do arquivo
def get_openai_api_key():
with open('API_OpenAI_SEPEI.txt', 'r') as file:
return file.read().strip()
# Função para ler a chave da API Serper
def get_serper_api_key():
with open('API_Serper.txt', 'r') as file:
return file.read().strip()
# Configurar a chave de API como variável de ambiente
openai_api_key = get_openai_api_key()
serper_api_key = get_serper_api_key()
os.environ["OPENAI_API_KEY"] = openai_api_key
os.environ["SERPER_API_KEY"] = serper_api_key
gpt4o_mini_llm = ChatOpenAI(model="gpt-4o-mini", api_key=openai_api_key)
# Ferramenta para busca no google
ferramenta_de_busca = SerperDevTool()
# Ferramenta para raspagem de sites
ferramenta_de_raspagem = ScrapeWebsiteTool()
planejador = Agent(role="Planejador de Conteúdo",
goal="Planejar conteúdo envolvente e factualmente preciso sobre {tópico}",
backstory="Você está trabalhando no planejamento de um artigo de blog "
"sobre o tópico: {tópico}."
"Você coleta informações que ajudam o "
"público a aprender algo "
"e tomar decisões informadas. "
"Seu trabalho é a base para que o "
"Redator de Conteúdo escreva um artigo sobre este tópico.",
verbose=True,
tools=[ferramenta_de_busca, ferramenta_de_raspagem],
allow_delegation=False,
llm=gpt4o_mini_llm
)
escritor = Agent(
role="Redator de Conteúdo",
goal="Escrever um artigo, em português do Brasil, de opinião perspicaz e factualmente preciso "
"sobre o tópico: {tópico}",
backstory="Você está trabalhando na escrita de um "
"novo artigo de opinião sobre o tópico: {tópico}. "
"Você baseia sua escrita no trabalho do "
"Planejador de Conteúdo, que fornece um esboço "
"e contexto relevante sobre o tópico. "
"Você segue os principais objetivos e "
"a direção do esboço, "
"conforme fornecido pelo Planejador de Conteúdo. "
"Você também fornece insights objetivos e imparciais "
"e os apoia com as informações "
"fornecidas pelo Planejador de Conteúdo. "
"Você reconhece em seu artigo de opinião "
"quando suas declarações são opiniões "
"em vez de afirmações objetivas.",
verbose=True,
tools=[ferramenta_de_busca, ferramenta_de_raspagem],
allow_delegation=False,
llm=gpt4o_mini_llm
)
editor = Agent(
role="Editor",
goal="Editar um post para um blog alinhado com "
"o estilo de escrita da organização.",
backstory="Você é um editor que recebe um post de blog "
"do Redator de Conteúdo. "
"Seu objetivo é revisar o post de blog "
"para garantir que ele siga as melhores práticas jornalísticas, "
"forneça pontos de vista equilibrados "
"ao apresentar opiniões ou afirmações, "
"e também evite tópicos ou opiniões "
"altamente controversos sempre que possível.",
verbose=True,
tools=[ferramenta_de_busca, ferramenta_de_raspagem],
allow_delegation=False,
llm=gpt4o_mini_llm
)
planejamento = Task(
description=(
"1. Priorizar as últimas tendências, principais players "
"e notícias relevantes sobre {tópico}.\n"
"2. Identificar o público-alvo, considerando "
"seus interesses e pontos de dor.\n"
"3. Desenvolver um esboço de conteúdo detalhado, incluindo "
"uma introdução, pontos principais e um chamado para ação.\n"
"4. Incluir palavras-chave de SEO e dados ou fontes relevantes."
),
expected_output="Um documento abrangente de plano de conteúdo "
"com um esboço, análise de público-alvo, "
"palavras-chave de SEO e demais recursos.",
agent=planejador,
)
escrita = Task(
description=(
"1. Use o plano de conteúdo para criar um "
"post de blog atraente sobre {tópico}.\n"
"2. Incorpore palavras-chave de SEO de forma natural.\n"
"3. As seções/subtítulos devem ser nomeados "
"de maneira envolvente.\n"
"4. Garanta que o post esteja estruturado com uma "
"introdução envolvente, corpo perspicaz "
"e uma conclusão resumida.\n"
"5. Revise para corrigir erros gramaticais e "
"alinhamento com o público-alvo.\n"
),
expected_output="Um post de blog bem escrito, em português do Brasil, "
"em formato markdown, pronto para publicação, "
"com cada seção contendo 3 ou 4 parágrafos.",
agent=escritor,
)
edicao = Task(
description=("Revise o post de blog para corrigir "
"erros gramaticais e "
"alinhar com o público-alvo."),
expected_output="Um post de blog bem escrito em formato markdown, "
"pronto para publicação, em portuguê do Brasil,"
"com cada seção contendo 3 ou 4 parágrafos.",
agent=editor
)
crew = Crew(
agents=[planejador, escritor, editor],
tasks=[planejamento, escrita, edicao],
verbose=2
)
result = crew.kickoff(inputs={"tópico": "Seminário de Ensino, Pesquisa e Extensão do IFSC - SEPEI"})
from IPython.display import Markdown