0Pricing
AI Agents · Aula

Um robô de perguntas e respostas sobre seus documentos

Coloque em produção um robô RAG funcional: ingira PDFs, gere embeddings, pesquise e gere respostas. O “olá, mundo” dos agentes de produção.

Um robô de perguntas e respostas sobre seus documentos é uma aula grátis de AI Agents no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de AI Agents, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de AI Agents inclui 4 aulas no total.

Partes desta aula ainda não foram traduzidas e aparecem em inglês.

Objetivo do projeto

Crie um chatbot que responda a perguntas usando seus próprios documentos (PDFs, Markdown etc.). Esse é o “olá, mundo” dos agentes de produção e é imediatamente útil para qualquer equipe.

Arquitetura

  1. Ingestão: carregue os documentos → divida em partes → faça a incorporação → armazene em um banco de dados vetorial
  2. Consulta: incorpore a pergunta → recupere as K principais partes → insira-as na instrução → LLM
  3. Citação: formate as partes com IDs; peça ao LLM para fazer a citação

Step 1: Load and Chunk

from langchain.text_splitter import RecursiveCharacterTextSplitter
from pypdf import PdfReader

text = ''
for page in PdfReader('handbook.pdf').pages:
    text += page.extract_text() + '\n'

splitter = RecursiveCharacterTextSplitter(chunk_size=800, chunk_overlap=100)
chunks = splitter.split_text(text)
print(f'{len(chunks)} chunks')

Step 2: Embed and Store

import chromadb
from openai import OpenAI

oai = OpenAI()
chroma = chromadb.PersistentClient(path='./db')
collection = chroma.get_or_create_collection('handbook')

resp = oai.embeddings.create(model='text-embedding-3-small', input=chunks)
vectors = [d.embedding for d in resp.data]
collection.add(ids=[f'c{i}' for i in range(len(chunks))], embeddings=vectors, documents=chunks)

Step 3: Query Function

def query(question, k=4):
    qvec = oai.embeddings.create(model='text-embedding-3-small', input=question).data[0].embedding
    res = collection.query(query_embeddings=[qvec], n_results=k)
    return res['documents'][0]

Step 4: Build the Prompt

def make_prompt(question, chunks):
    context = '\n\n'.join(f'[{i+1}] {c}' for i, c in enumerate(chunks))
    return f'''
Using only the context below, answer the question.
If the answer is not present, say so.
Cite the source like [1], [2], etc.

Context:
{context}

Question: {question}
Answer:
'''

print(make_prompt("What is the return policy?", ["Returns accepted within 30 days.", "Item must be unused."]))

Step 5: Generate

def answer(question):
    chunks = query(question)
    prompt = make_prompt(question, chunks)
    response = oai.chat.completions.create(
        model='gpt-4o-mini',
        messages=[{'role': 'user', 'content': prompt}],
        temperature=0,
    )
    return response.choices[0].message.content

print(answer('What is our refund policy?'))

Conecte tudo a uma interface

Envolva tudo em FastAPI e uma página HTML simples (ou Streamlit) e você terá um aplicativo funcional.

# pip install fastapi uvicorn
from fastapi import FastAPI
app = FastAPI()

@app.post('/ask')
def ask(payload: dict):
    return {'answer': answer(payload['question'])}

Adicionar histórico do chat

Para perguntas e respostas em várias interações, mantenha as mensagens e passe-as para a instrução:

messages = [{'role': 'system', 'content': 'You are a doc Q&A assistant.'}]

def chat(user_input):
    messages.append({'role': 'user', 'content': user_input})
    chunks = query(user_input)
    context_msg = {'role': 'system', 'content': f'Context:\n{chr(10).join(chunks)}'}
    response = oai.chat.completions.create(
        model='gpt-4o-mini',
        messages=[messages[0], context_msg] + messages[1:]
    )
    answer = response.choices[0].message.content
    messages.append({'role': 'assistant', 'content': answer})
    return answer

Armadilhas comuns

  • Partes grandes ou pequenas demais — tente usar de 500 a 800 tokens
  • Sem citação da fonte — os usuários não confiam em respostas sem citações
  • K grande demais — desperdiça tokens e dilui a atenção
  • Incorporar a pergunta WHOLE incluindo o histórico do chat — incorpore apenas a pergunta mais recente do usuário

Adicionar links das fontes

Armazene os URLs das fontes nos metadados e mostre-os na resposta:

metadata = [{'source': 'handbook.pdf', 'page': i} for i in range(len(chunks))]
# In the prompt, include 'source: <url>' so the LLM can produce clickable references.

Avalie o resultado

Reúna 20 perguntas reais dos usuários. Marque manualmente se o bot responde corretamente. Use isso como seu conjunto inicial de avaliação.

Publique e faça iterações

Esse bot, em produção, lida com 80% das perguntas comuns. Faça iterações com base nos 20% que ele responde incorretamente — geralmente, você precisa dividir melhor as partes ou melhorar a reclassificação.

Citação de fontes

Por que incluir IDs das fontes na instrução e pedir ao LLM para fazer a citação?

Recapitulação

Um bot RAG em cerca de 50 linhas. Publique-o, avalie-o e faça iterações na divisão e na recuperação. Esse padrão se repete em inúmeros aplicativos de agentes.

Perguntas Frequentes

A aula “Um robô de perguntas e respostas sobre seus documentos” é grátis?

Sim — o texto completo de “Um robô de perguntas e respostas sobre seus documentos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de AI Agents, atualize para CoddyKit PRO. O curso de AI Agents inclui 4 aulas no total.

O que vou aprender em “Um robô de perguntas e respostas sobre seus documentos”?

Coloque em produção um robô RAG funcional: ingira PDFs, gere embeddings, pesquise e gere respostas. O “olá, mundo” dos agentes de produção. Você pratica AI Agents com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar AI Agents?

Nenhuma experiência prévia é necessária. AI Agents no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “Um robô de perguntas e respostas sobre seus documentos”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de AI Agents?

Sim. Cada aula de AI Agents inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Um robô de perguntas e respostas sobre seus documentos
  2. Um agente que explica código
  3. Um agente de pesquisa que navega na Web
  4. Um assistente SQL para seu DB
← Voltar para AI Agents