Oi pessoal, Emma aqui do agent101.net!
Estamos em março de 2026, e se você é como eu, provavelmente já ouviu o burburinho sobre os agentes de IA se tornando mais inteligentes, mais capazes e, francamente, um pouco mais intimidantes para começar a usar. Apenas alguns anos atrás, estávamos todos maravilhados com LLMs escrevendo poemas; agora, eles estão praticamente gerenciando pequenos negócios para nós. O ritmo é insano, certo?
Hoje, quero abordar algo que tem estado na minha mente e, julgando pela minha caixa de entrada, na sua também: como ir além de apenas *conversar* com uma IA e realmente fazê-la *fazer coisas* por você, repetidamente, sem que você precise cuidar dela. Especificamente, vamos explorar como configurar um agente de IA pessoal super simples usando uma ferramenta que você já pode ter no seu computador: um script em Python e uma ajudinha da API do Assistente da OpenAI. Pense nisso como dar a sua IA um trabalho pequeno e focado – como ser seu resumidor de artigos pessoais sobre um tópico específico.
Por que essa abordagem específica? Porque resumos genéricos de “o que é um agente de IA” estão em toda parte. O que é mais difícil de encontrar é um guia prático, sem enrolação, que te leve do zero a um agente funcional sem precisar de um doutorado em ciência da computação. Lembro das minhas próprias frustrações tentando juntar isso, sentindo que precisava entender cada nuance de engenharia de prompts e chamadas de API antes de conseguir fazer um bot me enviar uma atualização sobre o clima. Spoiler: você não precisa. Vamos construir algo pequeno, útil e, mais importante, *compreensível* para que você possa expandir a partir disso.
Meu Momento Aha! Pessoal com Resumos Gerados por Agentes
Deixe-me contar uma história rápida. Há um tempo, eu estava tentando acompanhar a quantidade insana de notícias e pesquisas surgindo sobre segurança e ética em IA. É crucial para o meu trabalho aqui, mas também, francamente, só para entender o futuro que estamos construindo. Eu passava horas filtrando artigos, trabalhos de pesquisa e posts de blog. Meu cérebro ficava exausto na hora do almoço.
Tentei feeds RSS, aplicativos de ler depois, até contratei uma assistente virtual por um tempo. Nada parecia funcionar. A assistente virtual era cara, e os aplicativos eram apenas agregadores; eu ainda precisava fazer o trabalho pesado de ler e digerir. Então, me ocorreu: e se eu pudesse treinar um pequeno agente de IA para fazer *apenas essa uma coisa*? Para encontrar artigos sobre segurança em IA, lê-los e resumir os pontos principais para mim, diariamente?
Foi quando comecei a brincar com a API do Assistente da OpenAI. Ela é projetada precisamente para esse tipo de comportamento “agente”: dar a uma IA um conjunto de instruções, ferramentas e uma memória, e deixá-la se virar. Minha primeira tentativa foi uma bagunça, para ser honesta. Tentei torná-la muito complexa, dando a ela responsabilidades demais. Era como tentar ensinar uma criança a voar um avião antes de ela conseguir andar. Mas então eu simplifiquei. Restrinjo seu escopo a *apenas* resumir artigos de uma lista que forneci, focando nos principais argumentos e potenciais preconceitos.
A diferença foi dia e noite. De repente, eu estava recebendo resumos concisos e relevantes entregues para mim. Não estava perfeito – às vezes perdia nuances, às vezes se concentrava em algo que eu não me importava – mas foi uma melhoria massiva em relação ao meu método anterior. E a melhor parte? Eu entendia *como* funcionava, o que me deu a confiança para ajustá-la e expandir lentamente suas capacidades. É essa a sensação que quero que você tenha hoje.
Por que usar a API do Assistente da OpenAI para Iniciantes?
Existem toneladas de frameworks por aí para construir agentes de IA – LangChain, AutoGen, CrewAI, para citar alguns. Eles são poderosos, sem dúvida. Mas para um verdadeiro iniciante, podem parecer como tentar beber de uma mangueira de incêndio. A API do Assistente da OpenAI, por outro lado, abstrai muita da complexidade. Você define um “Assistente” com um propósito, um modelo e algumas “ferramentas”, e então interage com ele através de “Threads” e “Messages”. Ele gerencia o histórico de conversas, chamadas de ferramentas e até mesmo algum raciocínio básico para você.
É como configurar um trabalhador de IA miniatura e especializado. Você dá a ele uma descrição de trabalho (suas instruções), alguns manuais de referência (arquivos de conhecimento) e um conjunto de ferramentas (funções que ele pode chamar). Então você simplesmente atribui tarefas a ele.
Nossa Missão Hoje: Um Agente Simples de Resumo de Artigos da Web
Vamos construir um script em Python que:
- Criar um Assistente da OpenAI.
- Dar a ele uma instrução específica: artigos da web.
- Fornecer uma “ferramenta” para buscar o conteúdo de uma página da web.
- Pegar uma URL sua, alimentá-la ao agente e receber um resumo de volta.
Este agente não vai “navegar” na web sozinho ou decidir o que. Você vai dar o link. Isso mantém as coisas simples e controláveis, perfeito para entender os mecanismos principais.
Pré-requisitos (Não Pule Estes!)
- Python 3.8+ instalado: Se você não tiver, uma rápida pesquisa no Google por “instalar Python [seu SO]” vai te ajudar.
- Uma chave de API da OpenAI: Você pode obtê-la no site da Plataforma OpenAI. Certifique-se de ter alguns créditos!
- Familiaridade básica com a linha de comando: Apenas o suficiente para executar um script em Python.
- Um editor de texto: VS Code, Sublime Text, até mesmo o Bloco de Notas serve.
Passo 1: Configurando seu Ambiente
Primeiro, vamos preparar nosso ambiente Python. Abra seu terminal ou prompt de comando.
# Crie um novo diretório para nosso projeto
mkdir ai_summarizer_agent
cd ai_summarizer_agent
# Crie um ambiente virtual (boa prática!)
python -m venv venv
# Ative o ambiente virtual
# No macOS/Linux:
source venv/bin/activate
# No Windows:
venv\Scripts\activate
# Instale as bibliotecas necessárias
pip install openai beautifulsoup4 requests
O que acabamos de instalar?
openai: Esta é a biblioteca oficial para interagir com as APIs da OpenAI.beautifulsoup4: Uma biblioteca fantástica para analisar HTML. Vamos usá-la para extrair texto de páginas da web.requests: Para fazer requisições HTTP, ou seja, para baixar o conteúdo da página da web.
Em seguida, crie um arquivo chamado .env no seu diretório ai_summarizer_agent e adicione sua chave de API:
OPENAI_API_KEY="SUA_CHAVE_DE_API_OPENAI_AQUI"
Substitua SUA_CHAVE_DE_API_OPENAI_AQUI pela sua chave real. Isso mantém sua chave fora do seu código principal, o que é importante para a segurança!
Passo 2: Construindo Nossa Ferramenta de Busca na Web
Nosso agente de IA precisa de uma maneira de “ler” uma página da web. Como LLMs não podem navegar nativamente na internet (a menos que você esteja usando um modelo específico com capacidades de navegação, o que adiciona complexidade que queremos evitar por enquanto), vamos dar a ele uma ferramenta personalizada. Esta ferramenta será uma simples função em Python que pega uma URL, busca seu conteúdo e extrai o texto principal.
Crie um novo arquivo chamado tools.py no diretório do seu projeto:
import requests
from bs4 import BeautifulSoup
def fetch_web_article_content(url: str) -> str:
"""
Busca o conteúdo de texto principal de um artigo da web a partir de uma URL dada.
"""
try:
response = requests.get(url, timeout=10)
response.raise_for_status() # Levanta uma exceção para erros HTTP (4xx ou 5xx)
soup = BeautifulSoup(response.text, 'html.parser')
# Tente encontrar elementos comuns de conteúdo de artigos
article_body = soup.find('article') or soup.find('main') or soup.find('div', class_='content')
if article_body:
paragraphs = article_body.find_all('p')
article_text = '\n'.join([p.get_text() for p in paragraphs])
else:
# Retorno se elementos específicos de artigos não forem encontrados
article_text = soup.get_text(separator='\n', strip=True)
# Limpeza básica e truncamento para evitar entradas enormes
cleaned_text = ' '.join(article_text.split())
return cleaned_text[:30000] # Truncar para evitar exceder os limites de tokens
except requests.exceptions.RequestException as e:
return f"Erro ao buscar URL: {e}"
except Exception as e:
return f"Ocorreu um erro inesperado: {e}"
if __name__ == '__main__':
# Teste a ferramenta diretamente
test_url = "https://www.theverge.com/2024/3/20/24106575/nvidia-gputech-ai-chips-future-computing"
content = fetch_web_article_content(test_url)
print(f"--- Conteúdo Fetchado (primeiros 500 caracteres) ---")
print(content[:500])
print(f"--- Comprimento total: {len(content)} ---")
Esta função faz algumas coisas:
- Usa
requestspara baixar o HTML da página. - Usa
BeautifulSouppara analisar o HTML. - Tenta encontrar elementos comuns de artigos (como
<article>,<main>) para extrair o texto relevante. Se não conseguir encontrá-los, simplesmente pega todo o texto visível. - Limpa um pouco o texto e o trunca para evitar enviar entradas excessivamente longas para a IA (o que custa mais e pode atingir limites de tokens).
- Inclui tratamento de erros para problemas de rede ou URLs ruins.
Execute python tools.py para testá-lo com a URL exemplo. Você deve ver uma versão truncada do conteúdo de um artigo impressa no seu console.
Passo 3: Criando e Interagindo com Nosso Agente Resumidor
Agora é a grande hora! Vamos escrever o script que juntará tudo.
Crie um novo arquivo chamado summarizer_agent.py:
import os
import time
import json
from openai import OpenAI
from dotenv import load_dotenv
from tools import fetch_web_article_content # Importar nossa ferramenta personalizada
# Carregar variáveis de ambiente (como sua chave API)
load_dotenv()
# Inicializar o cliente OpenAI
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
# Definir nosso esquema de ferramenta para a API Assistant
# Isso informa à API Assistant como chamar nossa função fetch_web_article_content
web_fetch_tool = {
"type": "function",
"function": {
"name": "fetch_web_article_content",
"description": "Busca o conteúdo textual principal de uma URL da web fornecida para sumarização.",
"parameters": {
"type": "object",
"properties": {
"url": {"type": "string", "description": "A URL do artigo da web."},
},
"required": ["url"],
},
},
}
def create_or_retrieve_assistant(name="Agente Resumidor de Artigos", model="gpt-4o"):
"""
Verifica se já existe um assistente com o nome fornecido.
Se sim, recupera-o. Se não, cria um novo.
"""
assistants = client.beta.assistants.list(order="desc", limit="20")
for assistant in assistants.data:
if assistant.name == name:
print(f"Assistente existente encontrado: {assistant.id}")
return assistant
print(f"Criando novo assistente: {name}")
assistant = client.beta.assistants.create(
name=name,
instructions=(
"Você é um especialista em resumir artigos. Sua tarefa é buscar o conteúdo de uma URL da web fornecida "
"usando a ferramenta 'fetch_web_article_content', e então resumir o artigo de forma concisa. "
"Concentre-se nos principais argumentos, descobertas chave e conclusões. "
"Se o conteúdo for muito longo ou ocorrer um erro, mencione isso em seu resumo."
),
model=model,
tools=[web_fetch_tool],
)
print(f"Assistente criado com ID: {assistant.id}")
return assistant
def run_assistant_and_get_response(assistant_id, user_message, thread_id=None):
"""
Envia uma mensagem para o assistente, executa o thread e lida com chamadas de ferramentas.
Retorna a resposta final do assistente e o ID do thread.
"""
if thread_id is None:
thread = client.beta.threads.create()
thread_id = thread.id
print(f"Criado novo thread: {thread_id}")
else:
print(f"Usando thread existente: {thread_id}")
# Adicionar a mensagem do usuário ao thread
client.beta.threads.messages.create(
thread_id=thread_id,
role="user",
content=user_message,
)
# Executar o assistente
run = client.beta.threads.runs.create(
thread_id=thread_id,
assistant_id=assistant_id,
)
# Verificar o status da execução até que ela esteja completa ou exija ação
while run.status in ['queued', 'in_progress', 'cancelling']:
time.sleep(1)
run = client.beta.threads.runs.retrieve(
thread_id=thread_id,
run_id=run.id
)
if run.status == 'requires_action':
print("Assistente requer ação da ferramenta...")
tool_outputs = []
for tool_call in run.required_action.submit_tool_outputs.tool_calls:
if tool_call.function.name == "fetch_web_article_content":
url_to_fetch = json.loads(tool_call.function.arguments)["url"]
print(f"Chamando ferramenta: fetch_web_article_content com URL: {url_to_fetch}")
# Executar nossa função Python local
article_content = fetch_web_article_content(url_to_fetch)
tool_outputs.append({
"tool_call_id": tool_call.id,
"output": article_content,
})
# Se tivéssemos outras ferramentas, as manipularíamos aqui
# Enviar as saídas da ferramenta de volta para o assistente
run = client.beta.threads.runs.submit_tool_outputs(
thread_id=thread_id,
run_id=run.id,
tool_outputs=tool_outputs
)
# Verificar novamente pela resposta final
while run.status in ['queued', 'in_progress', 'cancelling']:
time.sleep(1)
run = client.beta.threads.runs.retrieve(
thread_id=thread_id,
run_id=run.id
)
if run.status == 'completed':
messages = client.beta.threads.messages.list(
thread_id=thread_id,
order="asc" # Obter mensagens em ordem cronológica
)
assistant_responses = []
for message in messages.data:
if message.role == 'assistant':
for content_block in message.content:
if content_block.type == 'text':
assistant_responses.append(content_block.text.value)
return "\n".join(assistant_responses), thread_id
else:
return f"Execução finalizada com status: {run.status}", thread_id
if __name__ == '__main__':
assistant = create_or_retrieve_assistant()
current_thread_id = None # Começar sem thread, deixar a função criar uma
print("\n--- Agente Resumidor de Artigos ---")
print("Digite uma URL ou 'sair' para encerrar.")
while True:
user_input = input("\nDigite a URL: ").strip()
if user_input.lower() == 'sair':
break
if not user_input.startswith("http"):
print("Por favor, insira uma URL válida começando com http:// ou https://")
continue
try:
print("Resumindo artigo... Isso pode levar um momento.")
response, current_thread_id = run_assistant_and_get_response(
assistant.id,
f"Por favor, resuma o artigo encontrado nesta URL: {user_input}",
current_thread_id # Passar o ID do thread para manter o contexto da conversa
)
print("\n--- Resumo ---")
print(response)
print("-----------------")
except Exception as e:
print(f"Ocorreu um erro: {e}")
# Redefinir thread_id em caso de erro se você quiser começar do zero na próxima vez
# current_thread_id = None
print("Saindo do agente resumidor. Adeus!")
Vamos detalhar este script:
web_fetch_tool
Este dicionário descreve nossa fetch_web_article_content função para a API Assistant da OpenAI. Ele especifica o nome da função, uma descrição útil (crucial para a IA saber quando usá-la!) e seus parâmetros. A IA usará este esquema para entender como chamar nossa função Python.
create_or_retrieve_assistant()
Esta função é inteligente. Ela primeiro verifica se você já criou um assistente chamado “Agente Resumidor de Artigos” em sua conta da OpenAI. Se sim, ela o reutiliza, economizando chamadas de API e mantendo sua configuração limpa. Caso contrário, ela cria um novo. Elementos importantes aqui:
name: Um nome legível para o seu assistente.instructions: Esta é a “descrição do trabalho” do seu agente. Quanto mais clara e específica você for aqui, melhor será o desempenho do seu agente. Eu disse a ele para se concentrar nos pontos chave e lidar com erros.model: Estou usandogpt-4oaqui por suas capacidades de raciocínio e chamadas de ferramentas. Você poderia tentargpt-3.5-turbopara uma opção mais barata e rápida, mas os resultados podem variar.tools=[web_fetch_tool]: Aqui é onde informamos ao assistente sobre nossa ferramenta personalizada de busca na web.
run_assistant_and_get_response()
Este é o loop de interação principal. Ele:
- Gerencia Threads: Ele cria um novo thread de conversa ou continua um existente (
thread_id). Threads são como a API Assistant mantém o rastreamento do histórico de conversa. - Adiciona Mensagem do Usuário: Ele envia seu pedido de URL para o assistente dentro do thread.
- Executa o Assistente: Ele inicia uma “execução”, que é o processo de pensamento do assistente.
- Verifica o Status: A API Assistant é assíncrona, então temos que continuar verificando o
run.statusaté que esteja concluído ou precise de entrada nossa. - Lida com
requires_action: Esta é a parte mágica! Se o assistente decidir que precisa usar uma ferramenta (como nossafetch_web_article_content), o status da execução se tornarárequires_action. Nosso script então analisa a chamada da ferramenta, executa nossa função Python *local* (fetch_web_article_content) e envia a saída de volta para o assistente. - Recupera Resposta: Uma vez que a execução
completed, ele busca todas as mensagens do assistente e retorna a mais recente.
if __name__ == '__main__':
Este bloco torna o script interativo. Ele continuamente solicita uma URL, chama nosso agente e imprime o resumo. Ele também mantém o current_thread_id para que seu agente se lembre das interações anteriores (embora para essa tarefa de sumarização específica, não seja estritamente necessário, é uma boa prática para agentes mais complexos).
Passo 4: Executando seu Agente Resumidor!
Agora, salve ambos os arquivos (tools.py e summarizer_agent.py) no mesmo diretório. Certifique-se de que seu ambiente virtual está ativado.
# Certifique-se de que você está no diretório ai_summarizer_agent
# e que sua venv está ativada
python summarizer_agent.py
Na primeira vez que você executá-lo, verá que está criando o assistente. Isso pode levar alguns segundos. Execuções subsequentes serão mais rápidas, pois ele recupera o assistente existente.
Então, ele solicitará que você insira uma URL. Tente colar um link de artigo, como:
https://www.nytimes.com/2024/03/23/technology/ai-agents-google-openai.html
Ou qualquer outro artigo que você esteja curioso. Veja enquanto ele processa, chama a ferramenta e, eventualmente, gera um resumo!
Você pode notar um atraso enquanto o assistente está em execução e realizando suas chamadas de ferramenta. Isso é normal. O loop de polling está esperando que os servidores da OpenAI processem a solicitação, chamem a ferramenta e então continuem o raciocínio.
Conclusões Práticas e Próximos Passos
Parabéns! Você acabou de construir seu primeiro agente de IA simples usando a API Assistant da OpenAI e ferramentas personalizadas. Aqui está o que você deve levar disso e como você pode expandir:
-
Comece Pequeno e Focado:
Este é o meu maior conselho. Em vez de tentar construir uma IA de propósito geral que faça tudo, escolha uma tarefa específica e repetível. Nosso resumidor é um exemplo perfeito. Isso facilita o debugging e ajuda você a entender os mecanismos centrais.
-
Instruções são Chave:
A qualidade do output do seu agente é diretamente proporcional à clareza e especificidade de suas instruções. Experimente diferentes frases. Diga a ele o que priorizar, qual tom usar e como lidar com casos extremos.
Ferramentas que habilitam Agentes:
Os agentes de IA são poderosos não apenas por causa de seus “cérebros” (o LLM), mas também por causa das “mãos” que você lhes dá (as ferramentas). Nossa ferramenta fetch_web_article_content expandiu as capacidades da IA além da mera geração de texto. Pense em outras ferramentas que você poderia criar: gravar em um arquivo, enviar um e-mail, consultar um banco de dados, pesquisar em uma base de conhecimento específica.
Tratamento de Erros é Seu Amigo:
Dados do mundo real são desorganizados. Sites quebram, APIs retornam erros. Observe como adicionamos blocos try-except na nossa função fetch_web_article_content. Seu agente precisa lidar com essas situações de forma elegante, ou ele simplesmente vai travar. Diga ao seu agente em suas instruções o que fazer se uma ferramenta falhar.
Explore e Experimente:
- Adicione mais ferramentas: Seu agente poderia também pesquisar em um banco de dados específico de artigos científicos? Poderia salvar resumos em um arquivo de texto?
- Aperfeiçoe as instruções: Pergunte a ele para um público específico (ex: “resuma para uma criança de 10 anos,” ou “resuma focando nas implicações econômicas”).
- Adicione memória (além do thread): Nossa configuração atual usa o thread como memória. Para agentes mais persistentes, você pode querer salvar o histórico da conversa ou fatos-chave em um banco de dados.
- Execuções programadas: Em vez de colar URLs manualmente, você poderia conectar isso a um feed RSS e fazer com que ele resuma novos artigos diariamente?
Este é apenas o começo da sua jornada na construção de agentes de IA. Os princípios que usamos hoje – definir um propósito claro, fornecer ferramentas e iterar sobre instruções – se aplicam a sistemas de agentes muito mais complexos. Agora você tem um exemplo tangível e funcional que criou sozinho. Vá em frente e crie!
Se você criar algo legal com isso, ou encontrar algum obstáculo, me avise no Twitter ou deixe um comentário abaixo. Eu adoraria saber sobre isso!
Até a próxima,
Emma Walsh
agent101.net
Artigos Relacionados
- Os Agentes de IA Podem Melhorar o Atendimento ao Cliente?
- Plataformas Low-Code para Criação de Agentes de IA
- Construindo um Agente de Pesquisa OpenClaw
🕒 Published:
Related Articles
- Março de 2026 Provou que as Empresas de IA se Importam Mais com o Hype do que com os Humanos
- Actualités sur la réglementation de l’IA au Japon aujourd’hui : Analyse des dernières mises à jour
- “Dominando las Estrategias de Manejo de Errores de Agentes”
- Modèle de Contexte de Protocole (MCP) : Le Connecteur Universel pour les Outils d’IA