0Pricing
AI Agents · Lección

Un bot de preguntas y respuestas sobre sus documentos

Ponga en producción un bot RAG funcional: ingiera PDF, genere embeddings, busque y genere respuestas. El «hola mundo» de los agentes en producción.

Un bot de preguntas y respuestas sobre sus documentos es una lección gratuita de AI Agents en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de AI Agents, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de AI Agents incluye 4 lecciones en total.

Partes de esta lección aún no han sido traducidas y se muestran en inglés.

Objetivo del proyecto

Construya un chatbot que responda preguntas a partir de sus propios documentos (PDF, Markdown, etc.). Este es el «hola mundo» de los agentes de producción y resulta útil de inmediato para cualquier equipo.

Arquitectura

  1. Ingesta: cargar documentos → dividirlos en fragmentos → generar embeddings → almacenarlos en una base de datos vectorial
  2. Consulta: generar el embedding de la pregunta → recuperar los fragmentos top-K → incluirlos en el prompt → LLM
  3. Citas: formatear los fragmentos con identificadores; pedir al LLM que cite las fuentes

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?'))

Conéctelo a una interfaz

Envuélvalo en FastAPI con una página HTML sencilla (o Streamlit) y tendrá una aplicación funcional.

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

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

Añada el historial del chat

Para preguntas y respuestas de varios turnos, conserve los mensajes y páselos al prompt:

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

Errores habituales

  • Fragmentos demasiado grandes o pequeños: pruebe con 500-800 tokens
  • Sin citas de fuentes: los usuarios no confían en respuestas sin citas
  • K demasiado grande: desperdicia tokens y dispersa la atención
  • Generar el embedding de la pregunta COMPLETA, incluido el historial del chat: genere el embedding solo de la pregunta más reciente del usuario

Añada enlaces a las fuentes

Guarde las URL de las fuentes en los metadatos y muéstrelas en la respuesta:

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.

Evalúelo

Recopile 20 preguntas reales de los usuarios. Marque manualmente si el bot responde correctamente. Utilice este conjunto como punto de partida para la evaluación.

Publique e itere

Este bot, en producción, gestiona el 80 % de las preguntas habituales. Itere a partir del 20 % que responde mal; normalmente necesitará mejores fragmentación o reordenación.

Citas de fuentes

¿Por qué incluir identificadores de fuentes en el prompt y pedir al LLM que cite?

Resumen

Un bot RAG en unas 50 líneas. Publíquelo, evalúelo e itere sobre la fragmentación y la recuperación. Este patrón se repite en innumerables aplicaciones de agentes.

Preguntas frecuentes

¿La lección «Un bot de preguntas y respuestas sobre sus documentos» es gratis?

Sí — el texto completo de «Un bot de preguntas y respuestas sobre sus documentos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de AI Agents, actualiza a CoddyKit PRO. El curso de AI Agents incluye 4 lecciones en total.

¿Qué aprenderé en «Un bot de preguntas y respuestas sobre sus documentos»?

Ponga en producción un bot RAG funcional: ingiera PDF, genere embeddings, busque y genere respuestas. El «hola mundo» de los agentes en producción. Practicas AI Agents con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar AI Agents?

No se requiere experiencia previa. AI Agents en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Un bot de preguntas y respuestas sobre sus documentos»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de AI Agents?

Sí. Cada lección de AI Agents incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Un bot de preguntas y respuestas sobre sus documentos
  2. Un agente que explica código
  3. Un agente de investigación que navega por la web
  4. Un asistente SQL para su base de datos
← Volver a AI Agents