Creación de un Chatbot para Preguntas con Bases de Datos Vectoriales

Clase 27 de 37Curso de LangChain

Contenido del curso

Introducción a LangChain

Manejo de documentos con índices

Embeddings y bases de datos vectoriales

Chats y memoria con LangChain

Resumen

Construir un sistema que responda preguntas basándose en documentación real es uno de los pasos más poderosos al trabajar con modelos de lenguaje. Aquí se explica cómo crear una cadena de preguntas y respuestas usando LangChain, una base de datos vectorial de Chroma y un modelo como GPT-3.5 Turbo, integrando cada pieza del flujo de datos.

¿Cómo se construye la función process QA query?

El punto de partida es definir una función llamada process_qa_query que recibe tres argumentos: un query (la pregunta en texto), un retriever y un modelo de lenguaje (LLM) [01:06]. Dentro de esta función se crea la cadena principal.

La cadena se instancia con RetrievalQA, una clase que se importa directamente desde LangChain [01:20]:

python from langchain.chains import RetrievalQA

Para configurarla se usa el método from_chain_type, donde se especifican tres parámetros clave:

  • llm: el modelo de chat que se recibe como argumento.
  • chain_type: se establece como "stuff", lo que significa que solo se incluye en el prompt la información que cabe directamente en él [01:40].
  • retriever: el retriever que se pasa a la función.

Finalmente, se imprime un mensaje indicando que la inteligencia artificial está procesando la consulta y se ejecuta la cadena con el método run, pasándole el query original [02:10].

¿Qué herramientas ayudan a formatear el código?

Para mantener el código organizado se utilizan dos herramientas: Black, que formatea automáticamente el estilo del código Python, e isort, que ordena los imports de manera consistente [02:30]. Ambas se ejecutan desde la terminal antes de correr el programa.

¿Qué errores comunes pueden surgir?

Un error frecuente es escribir max_token en lugar de max_tokens [03:05]. Este tipo de detalle genera un fallo en tiempo de ejecución. Corregir el nombre del parámetro soluciona el problema de inmediato.

¿Cómo funciona el flujo completo del chatbot?

El sistema sigue un proceso bien definido que conecta varias etapas [04:20]:

  • La documentación se almacena inicialmente en archivos JSON.
  • Cada JSON se convierte en un document de LangChain.
  • Los documents se dividen en fragmentos más pequeños usando un splitter.
  • Cada fragmento se transforma en representaciones numéricas mediante los embeddings de OpenAI.
  • Estos embeddings se almacenan en una base de datos vectorial como Chroma.
  • La base de datos se convierte en un retriever, que busca los fragmentos más similares a la pregunta del usuario.

Cuando una persona hace una pregunta, la cadena toma ese query, usa el retriever para encontrar los fragmentos relevantes dentro de Chroma y el modelo de chat genera una respuesta basada exclusivamente en esa información [05:00].

¿Por qué este sistema no tiene memoria de conversación?

Un punto importante es que esta implementación no incluye memoria [03:50]. Cada pregunta se procesa de forma independiente, sin recordar las interacciones previas. Esto significa que no se puede hacer referencia a respuestas anteriores dentro de la misma sesión.

Sin embargo, el sistema ya constituye un producto funcional por sí mismo. La posibilidad de agregar memoria, es decir, que el chatbot recuerde el contexto de la conversación y lo use para responder con mayor precisión, es una mejora que se aborda con distintos tipos de memoria disponibles en LangChain [05:30].

Si ya tienes tu base de datos vectorial lista, prueba construir tu propia cadena y experimenta con diferentes preguntas para ver cómo responde tu modelo. Comparte en los comentarios qué tipo de documentación estás usando y qué resultados obtuviste.