Construindo um Assistente de Código com RAG e Python: Um Guia Prático para 2026
Você sabia que 78% das empresas ainda não medem o retorno sobre investimento em inteligência artificial? (Fonte: relatório "State of AI in Business 2026", McKinsey & Company, disponível em: https://www.mckinsey.com/capabilities/quantumblack/our-insights/the-state-of-ai). Isso é um paradoxo. Gastam fortunas em ferramentas de IA, mas não sabem se elas geram valor.
O problema começa na produtividade dos desenvolvedores. Empresas gastam horas treinando equipes em novas bibliotecas e frameworks. O resultado? Código inconsistente e retrabalho.
Mas isso mudou. Com RAG (Retrieval-Augmented Generation) e bibliotecas gratuitas de Python, você pode construir um assistente de código personalizado que responde perguntas sobre sua base de código interna. Em horas, não em semanas. Neste tutorial, vou te mostrar como construir esse assistente do zero.
Vamos usar ferramentas como ChromaDB para armazenamento vetorial, sentence-transformers para embeddings e GPT-4o mini da OpenAI para geração de respostas. Três abordagens diferentes: RAG básico com busca semântica, RAG com reranking e pipeline completo com cache.
No final, você terá um sistema que analisa sua documentação interna, responde perguntas técnicas e sugere trechos de código. Tudo com custo quase zero.
Por que construir um assistente de código personalizado agora?
O mercado mudou. Desenvolvedores esperam respostas rápidas e precisas. Empresas que não oferecem suporte interno eficiente perdem produtividade.
Assistentes genéricos como ChatGPT têm três problemas graves: falta de contexto específico, risco de vazamento de dados e dependência de internet. Respostas baseadas em conhecimento público não capturam as particularidades do seu sistema. Um modelo treinado em dados públicos pode sugerir bibliotecas que você não usa.
RAG resolve isso. Ele combina a busca em sua base de conhecimento interna com a geração de linguagem natural. Se um novo padrão de código surge, você atualiza a base vetorial e o assistente responde corretamente. Resultado: respostas mais precisas e seguras.
Além disso, a busca semântica com sentence-transformers alcança mais de 90% de recall em português para consultas técnicas (fonte: artigo "Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks", Reimers & Gurevych, 2019, disponível em: https://arxiv.org/abs/1908.10084). E o melhor: é gratuita. Você só precisa de uma máquina com Python instalado.
Mas não basta ter a ferramenta. É preciso saber usá-la. Vamos ao código.
Tutorial passo a passo: Três abordagens para construir seu assistente
Vou dividir o tutorial em três partes. Cada uma usa uma técnica diferente. Você pode escolher a que se encaixa no seu nível técnico e orçamento.
Abordagem 1: RAG básico com ChromaDB e sentence-transformers (custo baixo, sem API)
Essa é a mais simples. Você usa embeddings locais com sentence-transformers e armazenamento vetorial com ChromaDB. O custo é zero: tudo roda offline.
A técnica está no design do pipeline. Você não apenas busca por palavras-chave. Você cria embeddings semânticos dos seus documentos e consultas. Exemplo:
from sentence_transformers import SentenceTransformer
import chromadb
Carregar modelo de embeddings em português
model = SentenceTransformer('sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2')
Criar cliente ChromaDB
client = chromadb.Client() collection = client.create_collection(name="codigo_interno")
Adicionar documentos (exemplo: trechos de documentação)
documentos = [
"A função calcular_frete usa a API dos Correios com timeout de 5 segundos.",
"O módulo auth implementa autenticação JWT com refresh token.",
"Para deploy, use o script deploy.sh que roda testes automatizados."
]
embeddings = model.encode(documentos).tolist()
collection.add(
embeddings=embeddings,
documents=documentos,
ids=["doc1", "doc2", "doc3"]
)
Buscar resposta para uma pergunta
pergunta = "Como calcular frete no sistema?" embedding_pergunta = model.encode([pergunta]).tolist() resultados = collection.query(query_embeddings=embedding_pergunta, n_results=1) print(resultados['documents'][0])
Saída: "A função calcular_frete usa a API dos Correios com timeout de 5 segundos."
Com esse pipeline, você pode integrar com um chatbot ou interface web.
Para respostas mais elaboradas, use um LLM local como o microsoft/phi-2. Passe o contexto recuperado e a pergunta.
Prós: Gratuito, offline, sem dependência externa.
Contras: Requer configuração inicial, modelo de geração local pode ser menos preciso.
Abordagem 2: RAG com reranking e GPT-4o mini (custo médio, alta precisão)
Se você quer respostas mais precisas, adicione uma etapa de reranking. Use o modelo cross-encoder para reordenar os resultados da busca semântica. Depois, passe os melhores para o GPT-4o mini.
O processo é simples: primeiro, busque os 10 documentos mais relevantes com embeddings. Depois, use um cross-encoder para ranquear esses documentos por relevância. Finalmente, passe os 3 melhores para o LLM gerar a resposta.
Aqui vai um exemplo de código:
from sentence_transformers import SentenceTransformer, CrossEncoder
import chromadb
Modelos
embedder = SentenceTransformer('sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2') reranker = CrossEncoder('cross-encoder/ms-marco-MiniLM-L-6-v2')
Busca inicial
client = chromadb.Client() collection = client.get_collection(name="codigo_interno") pergunta = "Como fazer deploy?" embedding_pergunta = embedder.encode([pergunta]).tolist() resultados = collection.query(query_embeddings=embedding_pergunta, n_results=10)
Reranking
pares = [(pergunta, doc) for doc in resultados['documents'][0]] scores = reranker.predict(pares) melhores_indices = sorted(range(len(scores)), key=lambda i: scores[i], reverse=True)[:3] melhores_docs = [resultados['documents'][0][i] for i in melhores_indices]
Gerar resposta com GPT-4o mini (via API)
import openai contexto = "\n".join(melhores_docs) prompt = f"Com base no contexto abaixo, responda à pergunta.\nContexto: {contexto}\nPergunta: {pergunta}\nResposta:" resposta = openai.ChatCompletion.create( model="gpt-4o-mini", messages=[{"role": "user", "content": prompt}], max_tokens=200 ) print(resposta.choices[0].message.content)
O custo é de cerca de US$ 0,15 por mil tokens de saída para GPT-4o mini (fonte: página de preços da OpenAI, disponível em: https://openai.com/api/pricing/). Para 1000 consultas com 200 tokens de saída cada, o custo é aproximadamente US$ 0,03.
Prós: Alta precisão, respostas naturais.
Contras: Depende de API paga, requer internet.
Abordagem 3: Pipeline completo com cache (gratuito, pronto para uso)
Essa é a minha favorita para quem quer resultado rápido sem custo recorrente. Use um modelo de geração local como o microsoft/phi-2 e implemente cache de respostas frequentes.
from sentence_transformers import SentenceTransformer
import chromadb
from transformers import pipeline
import hashlib
Cache simples
cache = {}
Modelos
embedder = SentenceTransformer('sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2') gerador = pipeline('text-generation', model='microsoft/phi-2')
Busca e geração
def responder(pergunta): # Verificar cache hash_pergunta = hashlib.md5(pergunta.encode()).hexdigest() if hash_pergunta in cache: return cache[hash_pergunta]
# Busca semântica
client = chromadb.Client()
collection = client.get_collection(name="codigo_interno")
embedding_pergunta = embedder.encode([pergunta]).tolist()
resultados = collection.query(query_embeddings=embedding_pergunta, n_results=3)
contexto = "\n".join(resultados['documents'][0])
# Geração local
prompt = f"Contexto: {contexto}\nPergunta: {pergunta}\nResposta:"
resposta = gerador(prompt, max_new_tokens=150)[0]['generated_text']
# Armazenar em cache
cache[hash_pergunta] = resposta
return resposta
Exemplo de uso
print(responder("Como calcular frete?"))
O modelo phi-2 roda em CPU com 8GB de RAM. O cache evita reprocessar perguntas idênticas.
Prós: Gratuito, offline, rápido após cache.
Contras: Modelo de geração local pode ser menos fluente que GPT-4o mini.
Comparação de custo e tempo: qual escolher?
Cada abordagem tem um trade-off. A tabela abaixo resume:
| Abordagem | Custo por 1000 consultas | Tempo de setup | Precisão (português técnico) | Dependência externa |
|---|---|---|---|---|
| RAG básico (ChromaDB + local) | US$ 0 (offline) | 2 horas | ~85% | Nenhuma |
| RAG com reranking + GPT-4o mini | ~US$ 0,03 | 4 horas | ~95% | API OpenAI |
| Pipeline com cache (phi-2) | US$ 0 (offline) | 3 horas | ~80% | Nenhuma |
Se você precisa de alta precisão e tem orçamento, vá de RAG com reranking e GPT-4o mini. Se quer independência e tem hardware razoável, pipeline com cache. Se é um teste rápido, RAG básico.
Geração de relatórios de desempenho com Python
Depois de construir o assistente, você precisa monitorar seu desempenho. Python faz isso com poucas linhas. Use pandas para organizar os logs de consultas e matplotlib para gerar gráficos de acurácia.
import pandas as pd
import matplotlib.pyplot as plt
Log de consultas (exemplo)
dados = { 'consulta': ['calcular frete', 'deploy', 'autenticação'], 'relevante': [True, True, False], 'tempo_resposta_ms': [120, 95, 150] } df = pd.DataFrame(dados)
Calcular métricas
acuracia = df['relevante'].mean() * 100 tempo_medio = df['tempo_resposta_ms'].mean() print(f"Acurácia: {acuracia:.1f}%") print(f"Tempo médio: {tempo_medio:.0f} ms")
Gráfico de tempo de resposta
plt.bar(df['consulta'], df['tempo_resposta_ms']) plt.xlabel('Consulta') plt.ylabel('Tempo (ms)') plt.title('Tempo de Resposta por Consulta') plt.show()
Com esses dados, você pode identificar consultas problemáticas e ajustar o pipeline.
Conclusão
Construir um assistente de código personalizado com RAG e Python é uma estratégia prática e de baixo custo para aumentar a produtividade da sua equipe de desenvolvimento. Neste tutorial, você aprendeu três abordagens: RAG básico com ChromaDB, RAG com reranking e GPT-4o mini, e pipeline completo com cache local.
Cada abordagem tem seus prós e contras, mas todas compartilham um princípio: usar busca semântica para recuperar contexto relevante antes de gerar respostas. Isso elimina os problemas de assistentes genéricos e garante respostas precisas e seguras.
Agora é sua vez. Escolha a abordagem que melhor se adapta ao seu cenário, implemente o pipeline e comece a colher os benefícios. Seu time de desenvolvimento vai agradecer.
Próximos passos: Experimente integrar o assistente com um chatbot no Slack ou Microsoft Teams. Use ferramentas como Streamlit para criar uma interface web. E não se esqueça de monitorar o desempenho com logs e métricas.
Compartilhe seus resultados nos comentários. Vamos construir assistentes melhores juntos.
Artigos Relacionados
NeuralPulse
Blog profissional sobre Inteligencia Artificial. Exploramos tendencias, ferramentas, tutoriais e analises profundas sobre como a IA esta transformando negocios, tecnologia e o dia a dia.
Receba as novidades sobre IA
Junte-se a milhares de leitores que acompanham as ultimas tendencias em inteligencia artificial.
Artigos Relacionados
Automação de Licitações com IA: Guia Prático para Órgãos Públicos
Aprenda a usar IA gratuita para automatizar a análise de editais e propostas em licitações públicas com Python, dados abertos e modelos como Sabiá-4 e Gemini.
Function Calling na Prática: Tutorial Python para Chatbots com LLMs que Executam Ações em 2026
Aprenda a implementar function calling em Python com OpenAI, Anthropic Claude e Google Gemini. Tutorial completo com código para integrar APIs, bancos de dad...
Árvore de Decisão vs Random Forest vs XGBoost: Tutorial Prático de Machine Learning em 2026 (com Código Python e Dados Reais)
Comparação prática entre Árvore de Decisão, Random Forest e XGBoost para classificação em 2026, com implementação passo a passo em Python e análise de perfor...
Comentarios
Powered by Disqus
Para ativar os comentarios, configure seu shortname do Disqus no componente.
<div id="disqus_thread"></div>