Olá, família Clawgo, Jake Morrison aqui, trazendo uma nova exploração aprofundada do mundo dos agentes de IA. Hoje, quero falar sobre algo que tem feito barulho no meu próprio laboratório em casa nas últimas semanas: como fazer um agente de IA realizar algo útil, não apenas interessante em termos teóricos. Mais especificamente, vamos explorar como fazer um agente monitorar proativamente e relatar mudanças em um site. Esqueça o discurso sofisticado sobre a “transformação da indústria” por um minuto; vamos colocar a mão na massa com um problema prático.
O Problema: Detecção de Mudanças em Sites (o Método Difícil)
Aqui está o cenário: estou sempre à procura de novos componentes para meus vários projetos de automação residencial. Às vezes, um sensor específico ou um microcontrolador está fora de estoque, e eu preciso saber no exato momento em que está disponível novamente. Atualizar uma página a cada hora é tedioso e, francamente, estou muito preguiçoso para isso. Tentei esses serviços genéricos de notificação de mudanças de sites, mas eles costumam ser muito vagos, muito lentos, ou acionam para mudanças irrelevantes, como uma atualização de rodapé.
O que eu realmente precisava era de algo mais inteligente. Algo que entendesse a **intenção** do que eu estava procurando. É aí que um agente de IA entra em cena. Em vez de simplesmente “comparar” o HTML, eu queria um agente capaz de ler a página, entender o estado de disponibilidade do produto e me dizer especificamente quando esse estado mudava para “em estoque”.
Minha Primeira Tentativa: Script Python Simples (o Método da Força Bruta)
Minha primeira tentativa, como é comum, envolveu um simples script Python. Usei requests para recuperar a página e BeautifulSoup para analisá-la. Isso se parecia com algo assim (simplificado, claro):
import requests
from bs4 import BeautifulSoup
import time
URL = "https://example-store.com/product-x-123"
KEYWORD = "Fora de Estoque" # Ou "Em Estoque"
def check_stock():
try:
response = requests.get(URL)
response.raise_for_status() # Levanta uma exceção para erros HTTP
soup = BeautifulSoup(response.text, 'html.parser')
# Esta é a parte delicada: encontrar o elemento específico
# Digamos que o status do estoque esteja em uma div com a classe "product-status"
status_div = soup.find('div', class_='product-status')
if status_div and KEYWORD in status_div.text:
print(f"[{time.ctime()}] Produto está {KEYWORD}.")
return False # Ainda fora de estoque
elif status_div:
print(f"[{time.ctime()}] Mudança de status do produto! Atual: {status_div.text.strip()}")
return True # O estoque mudou!
else:
print(f"[{time.ctime()}] Não foi possível encontrar a div de status.")
return False
except requests.exceptions.RequestException as e:
print(f"[{time.ctime()}] Erro ao recuperar a URL: {e}")
return False
# Loop básico (isto funcionaria indefinidamente ou até ser interrompido)
# while True:
# if check_stock():
# print("ENVIO DE ALERTA: Produto novamente em estoque!")
# # Adicionar aqui a lógica de notificação (e-mail, SMS, etc.)
# break # Parar de verificar uma vez encontrado
# time.sleep(3600) # Verificar a cada hora
Funcionou, até certo ponto. O problema? Se o site atualizasse sua estrutura HTML, mesmo que levemente, minha linha soup.find('div', class_='product-status') quebraria. Ou, se o rótulo mudasse de “Fora de Estoque” para “Atualmente Indisponível”, minha verificação KEYWORD falharia. Isso exigia manutenção constante, o que contradizia o objetivo da automação.
Entrada do Agente de IA: Uma Abordagem Mais Inteligente
É aí que comecei a pensar em um verdadeiro agente de IA. Não apenas um script que segue instruções exatas, mas algo que pode **interpretar** a página. Meu objetivo era um agente capaz de:
- Visitar uma URL.
- Entender como é um “status de disponibilidade do produto”.
- Identificar se o produto está em estoque ou não com base no **significado** do texto, não apenas nas palavras-chave exatas.
- Relatar apenas quando o status que me interessa (por exemplo, “em estoque”) for detectado.
Configuração do Agente: Usar um LLM de Base para Interpretação
Para esta experiência, decidi manter as coisas relativamente simples. Estou usando um LLM local (especificamente, um modelo Llama 3 afinado rodando no meu servidor doméstico, graças ao Ollama) e um script Python para orquestrar as ações do agente. O agente em si não “vive” em um ambiente separado; é a combinação do script, do LLM e das ferramentas que ele pode usar.
As “Ferramentas” do Agente
- Web Scraper: Uma função para recuperar o conteúdo HTML de uma URL (semelhante ao meu script Python inicial, mas agora fornecendo apenas HTML bruto ao LLM).
- Interface LLM: Uma função para enviar prompts à minha instância local do Llama 3 e obter respostas.
- Sistema de Notificação: Um simples remetente de e-mails (ou mesmo apenas uma declaração de impressão por enquanto).
O Fluxo de Trabalho do Agente (Simplificado)
Aqui está como eu projetei o loop principal do agente:
- Recuperar a Página: Usar a ferramenta de scraper web para obter o HTML bruto da página do produto alvo.
- Analisar com o LLM: Enviar o HTML ao LLM com um prompt específico.
- Interpretar e Decidir: O LLM analisa o HTML e decide se o produto está em estoque.
- Relatar a Mudança: Se o status mudou para “em estoque” (e estava anteriormente fora de estoque), acionar uma notificação.
- Repetir: Aguardar um intervalo definido e repetir o processo.
Engenharia de Prompts para a Detecção de Estoque
Essa foi a parte crucial. Meu prompt ao LLM precisava ser claro e sólido. Aqui está um exemplo do que eu usei:
"Você é um assistente de IA projetado para detectar o status de estoque de um produto em uma página da web.
Vou fornecer o conteúdo HTML de uma página de produto.
Sua tarefa é analisar o HTML e determinar se o produto está atualmente 'em estoque' ou 'fora de estoque'.
Não procure apenas por frases exatas; entenda o contexto. Procure indicadores comuns como:
- os botões 'Adicionar ao Carrinho' (geralmente indicam em estoque)
- as mensagens 'Fora de Estoque'
- as mensagens 'Atualmente Indisponível'
- 'Pré-venda' (considere isso como fora de estoque para uma compra imediata)
- Qualquer variação de mensagem de status de estoque.
Retorne APENAS uma das seguintes palavras: 'EM_ESTOQUE' ou 'FORA_DE_ESTOQUE'.
Não forneça nenhum outro texto, explicação ou formatação.
Conteúdo HTML:
" + html_content
A diretiva “Retorne APENAS uma das seguintes palavras” é essencial para o processamento programático da saída do LLM. Isso permite que meu script Python leia facilmente a decisão do LLM e aja de acordo.
Colocando Tudo Junto (Código Conceitual)
Embora a implementação completa envolva mais gerenciamento de erros e gerenciamento de estados, aqui está a ideia principal em Python:
“`html
import requests
import time
# Suponha que você tenha uma função para interagir com seu LLM
# e.g., from my_llm_interface import query_llm
# E uma função para enviar notificações
# e.g., from my_notifier import send_alert
PRODUCT_URL = "https://example-store.com/product-x-123"
CHECK_INTERVAL_SECONDS = 3600 # Verificar a cada hora
last_known_status = "UNKNOWN" # Para acompanhar as mudanças
def get_html(url):
try:
response = requests.get(url, timeout=10)
response.raise_for_status()
return response.text
except requests.exceptions.RequestException as e:
print(f"Erro ao recuperar a URL: {e}")
return None
def determine_stock_status(html_content):
if not html_content:
return "ERROR"
prompt = f"""
Você é um assistente IA projetado para detectar o status de estoque de um produto em uma página da web.
Vou lhe fornecer o conteúdo HTML de uma página de produto.
Sua tarefa é analisar o HTML e determinar se o produto está atualmente 'em estoque' ou 'sem estoque'.
Não procure apenas frases exatas; compreenda o contexto. Procure indicadores comuns como:
- os botões 'Adicionar ao Carrinho' (geralmente indicam em estoque)
- as mensagens 'Fora de Estoque'
- as mensagens 'Atualmente Indisponível'
- 'Pré-venda' (considere isso como fora de estoque para uma compra imediata)
- Qualquer variação de mensagem de status de estoque.
Retorne SOMENTE uma das palavras seguintes: 'EM_STOQUE' ou 'FORA_DE_ESTOQUE'.
Não forneça nenhum outro texto, explicação ou formatação.
Conteúdo HTML:
{html_content}
"""
# É aqui que você chamaria seu LLM
# Para demonstração, vamos simular uma resposta
# real_llm_response = query_llm(prompt)
# Simular a resposta do LLM para teste
if "Adicionar ao Carrinho" in html_content: # Heurística simples para a demo
real_llm_response = "EM_STOQUE"
elif "Fora de Estoque" in html_content or "Indisponível" in html_content:
real_llm_response = "FORA_DE_ESTOQUE"
else:
real_llm_response = "UNKNOWN"
return real_llm_response.strip().upper()
# Loop principal do agente
while True:
print(f"[{time.ctime()}] Verificando o estoque do produto...")
html = get_html(PRODUCT_URL)
current_status = determine_stock_status(html)
if current_status == "ERROR":
print("Não foi possível determinar o status devido a um erro de recuperação. Tentando novamente mais tarde.")
elif current_status == "EM_STOQUE" and last_known_status != "EM_STOQUE":
print("ALERTA: O produto agora está EM ESTOQUE!")
# send_alert(f"Produto {PRODUCT_URL} está de volta em estoque!") # Sua lógica de notificação
last_known_status = "EM_STOQUE"
elif current_status == "FORA_DE_ESTOQUE" and last_known_status != "FORA_DE_ESTOQUE":
print("O produto está FORA DE ESTOQUE.")
last_known_status = "FORA_DE_ESTOQUE"
else:
print(f"O status do produto é {current_status}. Nenhuma mudança detectada.")
time.sleep(CHECK_INTERVAL_SECONDS)
Essa configuração permite que o agente seja muito mais resiliente a mudanças de layout ou de rótulo do site. O LLM, com sua compreensão da linguagem natural, pode interpretar variações de “fora de estoque” sem que eu precise atualizar uma lista de palavras-chave a cada vez.
Os Resultados: Um Monitor Mais Confiável
Depois de deixar esse agente funcionar por algumas semanas, posso confirmar que ele é significativamente mais confiável do que meu script inicial do BeautifulSoup. Vi páginas de produtos mudarem sua mensagem “esgotado”, mover elementos e até mesmo passar de botões para links textuais para a compra. Meu agente IA, confiando no poder de interpretação do LLM, me forneceu constantemente atualizações precisas sobre o estado do estoque.
Uma vez, uma loja mudou seu botão “Adicionar ao Carrinho” para “Me avise quando disponível.” Meu antigo script teria visto “Adicionar ao Carrinho” desaparecer e teria ficado confuso. O LLM, no entanto, interpretou corretamente “Me avise quando disponível” como um status “FORA_DE_ESTOQUE”, pois entende o *significado* por trás dessas frases.
Não se trata de construir uma IA geral superinteligente para gerenciar sua vida. Trata-se de pegar um problema específico e irritante e aplicar um pouco de know-how em IA para resolvê-lo de uma maneira mais robusta do que o permite o scripting tradicional. É IA prática, e é disso que eu gosto nessas coisas.
Dicas Práticas
Se você está buscando começar a experimentar com agentes IA para automação prática, aqui estão meus melhores conselhos:
“`
- Comece Pequeno, Resolva um Verdadeiro Problema: Não tente construir o Skynet na sua primeira tentativa. Escolha uma tarefa específica que você realiza manualmente e que acha chata. A monitorização do meu site é um exemplo perfeito.
- Use LLMs Locais: Ferramentas como Ollama tornam incrivelmente fácil executar LLMs poderosos em seu próprio hardware. Isso reduz os custos e mantém os dados privados, o que é ótimo para projetos pessoais.
- Concentre-se em Instruções Claras: A “inteligência” do agente muitas vezes depende da qualidade das suas instruções ao LLM. Seja explícito sobre o que você deseja que ele faça e em qual formato você espera a saída.
- Dê ao Seu Agente “Ferramentas”: Um LLM é poderoso, mas precisa interagir com o mundo real. Forneça funções para recuperar dados, enviar mensagens ou manipular arquivos.
- Itere e Aperfeiçoe: Seu primeiro agente não será perfeito. Teste-o, veja onde ele falha e refine suas instruções ou suas ferramentas.
O mundo dos agentes de IA ainda é jovem, mas o potencial para uma automação prática no dia a dia é enorme. Não espere um produto “revolucionário”; comece a criar seus próprios pequenos agentes úteis agora mesmo. Você ficará surpreso com o que pode automatizar da sua lista de tarefas.
É isso por enquanto, equipe Clawgo. Deixe-me saber quais agentes práticos você está construindo nos comentários!
🕒 Published: