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.
Posts relacionados
O modelo fantasma que "destruiu" o GPT-5.6 — e a aula de estatística que veio junto
Um modelo sem dono apareceu no OpenRouter, marcou 80% em um benchmark de código e virou ma...
2,4 trilhões de parâmetros em open weights: o modelo de fronteira saiu do data center
Agosto de 2026 empilhou o maior lançamento de open weights da história e um modelo multimo...
Laravel 13 e PHP 8.5: IA e busca vetorial no framework, sem quebrar o que já existe
O Laravel 13 chegou em março de 2026 com AI SDK de primeira parte, busca vetorial no query...