Resumen

Implementa un RAG sencillo y funcional con OpenAI para responder preguntas desde tus PDFs. Enfócate en resultados: agrega conocimiento actualizado o privado a tu large language model y mejora la precisión sin montar infraestructura compleja de embeddings y bases vectoriales.

¿Qué problema resuelve un RAG con OpenAI file search?

Un large language model se entrena con mucha información pública, pero tiene límites claros. No sabe datos en tiempo real y no incluye tu información privada. Por eso, si preguntas por el clima de hoy, fallará; y si necesitas que responda sobre tus manuales, productos o bases de datos, tampoco podrá sin que se los cargues.

¿Por qué el large language model no tiene info en tiempo real?

  • Su “ventana de información” llega hasta la fecha de entrenamiento.
  • Es malo respondiendo consultas de tipo real time.
  • Para actualizar conocimiento, se usan tools como web search o un RAG.

¿Qué información privada puedes agregar?

  • PDFs: manuales, guías, documentación interna.
  • Datos de productos y procedimientos.
  • Todo lo que puedas pasar a texto.

En este enfoque se usa la tool de OpenAI llamada file search: subes PDFs, se vectorizan y luego consultas. Es una técnica de RAG sencilla pero potente para prototipos y primeros casos de uso (por ejemplo, customer support).

¿Cómo crear y cargar una base vectorial en OpenAI?

Desde la plataforma de OpenAI, con tu key y proyecto (mejor si creas uno dedicado), ve a Storage > Vector stores. Crea una base vectorial (ej.: “My docs”) y sube tus archivos. El sistema convierte el texto a embeddings, los guarda y te entrega un ID para consultarlo desde tu código.

¿Qué bases vectoriales existen y por qué usar la de OpenAI?

  • Alternativas: Chroma, Pintcup, Vectorize, PostgreSQL con vectoriales, Mongo con embeddings.
  • Ventaja aquí: OpenAI ya te da un vector store listo. Cómodo para empezar.
  • Nota: no es tan personalizable/automatizable como un RAG avanzado.

¿Qué hace el pipeline de embeddings y búsqueda?

  • Vectoriza el PDF en una base de datos vectorial.
  • Permite consultas semánticas (queries) sobre ese contenido.
  • El modelo usa ese conocimiento para generar respuestas con mayor ajuste al documento cargado.

Habilidades y keywords trabajadas: - Configurar proyecto y gestionar vector stores. - Subir archivos y “attach” a la base vectorial. - Copiar y usar el ID del vector store. - Entender embeddings e inferencia basada en vectores.

¿Cómo invocar el modelo con la tool de file search?

Debes usar el modelo de OpenAI porque file search es específica de este proveedor. Se declara un arreglo con tus IDs de vector stores, y se pasa la lista de tools al LLM. Al preguntar, el modelo decide si necesita consultar su base vectorial.

  • Si la pregunta lo amerita (ej.: “¿Cómo mejorar el rendimiento de un website?”), hará un query a la base vectorial y responderá desde el PDF.
  • Si es trivial (ej.: “Hola, ¿cómo estás?”), no llama la tool y responde directo. Este “switch” lo maneja el propio modelo.
  • Puedes comparar tiempos: sin tools responde más rápido, pero sin el conocimiento del PDF.

¿Cómo limitar el contexto y manejar el historial?

La tool puede fallar si le envías “todo el array de mensajes” (mucho contexto). Solución práctica: enviar solo el último mensaje del historial al LLM. Pierdes memoria conversacional (no recordará tu nombre), pero evitas errores. Alternativas: resumir mensajes o, si necesitas historial completo, pasar a un RAG más avanzado.

Pseudocódigo ilustrativo:

# IDs de tus vector stores (copiados de OpenAI)
vector_store_ids = ["vs_XXXXXXXX"]

# Declarar tool de file search con tus IDs
tools = [
    {
        "type": "file_search",
        "vector_store_ids": vector_store_ids
    }
]

# Instanciar LLM de OpenAI con tools
llm = LLM(provider="openai", tools=tools)

# Enviar solo el último mensaje del historial
last_message = history[-1].text
response = llm.invoke(user_input=last_message)
print(response)

¿Cómo integrarlo en tu app?

  • Crea un archivo “rag.py” a partir de tu “simple”.
  • Integra la tool de file search y verifica el ID del vector store.
  • Sobrescribe el LLM para que use tools.
  • Envía solo el último mensaje del historial.
  • Registra el nuevo agente en “lang-af.json” (ej.: “RAG”).
  • Reinicia el servidor con “lang-af.dev” y prueba en la interfaz de chat.

Conceptos y keywords clave incorporados: - Large language model, ventana de información y real time. - Tools de OpenAI: function coding, web search, file search, Computer Views. - Base de datos vectorial, vector stores, embeddings, inferencia. - Trade-offs entre contexto completo vs. último mensaje. - Agentes, estado e historial del chat.

¿Te gustaría ver más ejemplos con varios PDFs o conectar otras tools como APIs externas? Comparte en comentarios en qué caso de uso planeas aplicar este RAG sencillo.