RAG na Prática: Construindo um Chatbot que Realmente Sabe o que Fala
RAG (Retrieval-Augmented Generation) é a técnica que transforma LLMs genéricos em especialistas no seu domínio. Em vez de depender só do que o modelo aprendeu no treino, você fornece contexto relevante em cada query.
Como RAG Funciona
O pipeline tem duas fases:
- Ingestion: seus documentos são divididos em chunks, convertidos em embeddings (vetores numéricos) e armazenados em um vector database.
- Query: a pergunta do usuário vira um embedding, os chunks mais similares são recuperados, e enviados junto com a pergunta ao LLM como contexto.
Implementando com Laravel e pgvector
Primeiro, habilite a extensão pgvector no PostgreSQL e instale as dependências:
composer require openai-php/laravel
php artisan vendor:publish --provider="OpenAI\Laravel\ServiceProvider"
Configure sua migration para armazenar embeddings:
Schema::create('document_chunks', function (Blueprint $table) {
$table->id();
$table->foreignId('document_id')->constrained()->cascadeOnDelete();
$table->text('content');
$table->vector('embedding', 1536); // dimensão do text-embedding-3-small
$table->integer('chunk_index');
$table->timestamps();
});
O ingestion pipeline converte documentos em chunks e gera embeddings:
class DocumentIngestionService
{
public function ingest(Document $document): void
{
$chunks = $this->splitIntoChunks($document->content, chunkSize: 500, overlap: 50);
foreach ($chunks as $index => $chunk) {
$embedding = OpenAI::embeddings()->create([
'model' => 'text-embedding-3-small',
'input' => $chunk,
])->embeddings[0]->embedding;
DocumentChunk::create([
'document_id' => $document->id,
'content' => $chunk,
'embedding' => $embedding,
'chunk_index' => $index,
]);
}
}
}
Resultado
Com este pipeline, você tem um chatbot que responde com precisão usando sua base de conhecimento, cita fontes e sabe quando não sabe a resposta — evitando alucinações.
Newsletter
Novos artigos direto no seu email.
Posts relacionados
Multi-tenancy em Laravel: Single DB vs Schema Separado vs Banco Separado
Uma análise prática das três abordagens de multi-tenancy no Laravel, com os trade-offs de...
CI/CD para Laravel em 2025: GitHub Actions do Zero ao Deploy
Configure um pipeline completo de CI/CD para Laravel com lint, testes, coverage, migration...
Clean Architecture em PHP: Vale a Pena em Projetos Laravel?
Uma análise honesta sobre quando Clean Architecture agrega valor e quando é over-engineeri...