Capítulo 6

RAG no Prompt

A integração completa: como montar o prompt com contexto recuperado e enviar ao LLM para respostas fundamentadas.

🔄 Fluxo Completo

🔍
1Recuperar chunks

RetrievalService busca os k chunks mais similares

2Verificar relevância

Descartar chunks com similarity < limiar (ex: 0.5)

📦
3Montar contexto

Juntar chunks em string

📝
4Montar prompt

System prompt + contexto + pergunta do usuário

🤖
5Enviar ao LLM

API OpenAI/Anthropic com temperature baixa (0.3)

💬
6Retornar resposta

Resposta fundamentada no contexto disponível

📝 Prompt Patterns

Pattern 1

Answer from Context

Use o contexto abaixo para responder. Se não houver informação suficiente, diga "Não tenho essa informação." Contexto: {chunk1} {chunk2} Pergunta: {question}
Pattern 2

Cite Sources

Responda usando apenas o contexto. Cite de qual chunk veio. Contexto: {chunk1} [fonte: article_id={id1}] {chunk2} [fonte: article_id={id2}] Pergunta: {question}

💻 RAGService — Implementação Completa

app/Services/RAGService.php
<?php
class RAGService
{
    public function __construct(
        private RetrievalService $retrievalService,
        private EmbeddingService $embeddingService,
    ) {}

    public function ask(string $question): string
    {
        // 1. Recuperar chunks relevantes
        $chunks = $this->retrievalService->search($question, 3);

        if ($chunks->isEmpty()) {
            return "Não encontrei informações 
                relevantes para responder.";
        }

        // 2. Montar contexto
        $context = $chunks
            ->map(fn($r) => "- {$r->chunk}")
            ->join("
");

        // 3. Montar prompt com RAG
        $systemPrompt = "Você é um assistente técnico.
Use apenas o contexto fornecido. 
Se não souber, diga que não sabe.";

        $userPrompt = "Contexto:
{$context}

Pergunta: {$question}";

        // 4. Enviar para LLM
        $response = OpenAI::chat()->create([
            "string">'model' => "string">'gpt-4o-mini',
            "string">'messages' => [
                ["string">'role' => "string">'system', "string">'content' => $systemPrompt],
                ["string">'role' => "string">'user', "string">'content' => $userPrompt],
            ],
            "string">'temperature' => 0.3, // Baixa = mais consistente
        ]);

        return $response->choices[0]->message->content;
    }
}