A Arquitetura: Engenharia de Prompt e o Segredo do Contexto

Para que um Large Language Model (LLM) consiga analisar dados com precisão, ele não precisa ler o seu arquivo de dados inteiro, o que consumiria milhares de tokens desnecessariamente. Ele só precisa entender os metadados, ou seja, a estrutura das colunas.
O coração do nosso arquivo agente_looqbox.py reside em passar dinamicamente a lista de colunas para o system_prompt:
colunas = base_marketing.columns.tolist()
system_prompt = f"""
Você é um Engenheiro de Dados sênior.
O usuário tem um DataFrame chamado 'base_marketing' com estas colunas: {colunas}.
Sua tarefa:
1. Escreva o código Python para responder à pergunta.
2. Se envolver comparação ou tendência, gere um gráfico usando matplotlib ou seaborn.
3. Para gráficos: use 'fig, ax = plt.subplots()', configure o gráfico e finalize com 'st.pyplot(fig)'.
4. Para insights em texto: use 'st.write()' ou 'st.info()'.
5. NÃO use blocos de código (```python). Retorne apenas o código puro.
6. O DataFrame 'base_marketing' já está carregado, não tente ler o CSV novamente.
"""
O Truque de Mestre no Prompt:
Restrição de Entrada: Ao injetar {colunas}, o modelo sabe exatamente se o usuário está perguntando sobre "Google Ads" ou "TikTok Ads" e usa o nome exato da variável contida no banco.csv.
Saída "Clean": O comando para não usar blocos de código python garante que a resposta retorne como uma string limpa de script Python puro.
O Canvas Dinâmico: Trazendo Código à Vida com exec()
Uma vez que o gpt-4o-mini processa a pergunta e retorna o código correto baseado nas nossas instruções, como fazemos para esse código rodar e renderizar um gráfico na tela do usuário?
A mágica acontece utilizando a função nativa exec() do Python encapsulada dentro de um container do Streamlit:
# O Canvas Dinâmico: Aqui o código da IA toma vida
try:
with st.container(border=True):
exec(codigo_gerado)
except Exception as e:
st.error(f"Erro ao processar os dados: {e}")
with st.expander("Ver código gerado"):
st.code(codigo_gerado)
O que acontece aqui sob a ótica de Engenharia de Software:
- Isolamento Visual: O st.container(border=True) delimita o espaço da resposta criando um aspecto de "widget vivo" ou "canvas".
- Tratamento de Erros Resiliente: Se a IA cometer um erro de sintaxe ou tentar usar uma coluna inexistente, o sistema não quebra (crash). Ele exibe um erro amigável e abre um st.expander para que o desenvolvedor inspecione o código gerado, facilitando o debug.
Casos de Uso Avançados na Prática
Com essa estrutura, nossa aplicação ganha uma flexibilidade infinita. O usuário pode rodar cenários complexos de E-commerce apenas digitando no chat:
- Análise de ROI tradicional: "Compare o investimento de Google Ads vs TikTok Ads em barras." -> O agente gera o agrupamento por colunas e monta o gráfico de matplotlib.
- Estatística e Correlação: "Crie um heatmap de correlação para entender o impacto dos influenciadores nas vendas." -> O agente invoca o seaborn.heatmap() combinando variáveis numéricas e categóricas.
- Modelagem Preditiva: O backend está preparado com scikit-learn permitindo estender o agente para prever vendas futuras via Regressão Linear com prompts como: "Trace uma linha de tendência para os próximos dias".
Conclusão e Próximos Passos
Desenvolver soluções focadas em IA generativa vai muito além de criar simples wrappers de API de Chat. Trata-se de entender como integrar o poder cognitivo dos LLMs com o ecossistema de dados tradicional do Python (Pandas, Numpy, Matplotlib).
O Marketing Intelligence Engine demonstra que, com menos de 80 linhas de código estruturado, podemos criar uma ferramenta com poder analítico sênior, pronta para rodar em produção na nuvem através do Streamlit Community Cloud.
E você, já pensou em substituir seus relatórios mensais por um agente conversacional autônomo?
Gostou do projeto? Conecte-se comigo aqui na DIO e confira o repositório completo com demonstrações em vídeo no meu GitHub!
https://github.com/viniciushoffmanndev/marketing-intelligence-engine



