Cómo entrenar un chatbot usando trapo y datos personalizados

?

RAG, que significa generación de recuperación aumentada, describe un proceso mediante el cual un LLM (modelo de lenguaje grande) puede optimizarse entrenando para extraer de una base de conocimiento más específica y más pequeña en lugar de su enorme base original. Por lo general, los LLM como ChatGPT están entrenados en todo Internet (miles de millones de puntos de datos). Esto significa que son propensos a pequeños errores y alucinaciones.

Aquí hay un ejemplo de una situación en la que el trapo podría usarse y ser útil:

Quiero construir un bot Bot de chat de la Guía turística del estado de EE. UU., Que contiene información general sobre los estados de EE. UU., Como sus capitales, poblaciones y atracciones turísticas principales. Para hacer esto, puedo descargar las páginas de Wikipedia de estos estados de EE. UU. Y entrenar mi LLM usando texto de estas páginas específicas.

Creando tu trapo LLM

Una de las herramientas más populares para construir sistemas de trapo es Llamadocual:

  • Simplifica la integración entre LLM y fuentes de datos externas
  • Permite a los desarrolladores estructurar, indexar y consultar sus datos de una manera optimizada para el consumo de LLM
  • Funciona con muchos tipos de datos, como PDF y archivos de texto
  • Ayuda a construir una tubería RAG que recupera e inyecte fragmentos de datos relevantes en un aviso antes de pasarlo a la LLM para la generación

Descargue sus datos

Comience obteniendo los datos con los que desea entrenar su modelo. Para descargar PDF de Wikipedia (CC por 4.0) En el formato correcto, asegúrese de hacer clic en Imprimir y luego “Guardar como PDF”.

No solo exporte la Wikipedia como un PDF: Llama no le gustará el formato en el que se encuentra y rechazará sus archivos.

Para los fines de este artículo y para mantener las cosas simples, solo descargaré las páginas de los siguientes 5 estados populares:

  • Florida
  • California
  • Washington DC
  • Nueva York
  • Texas

Asegúrese de guardarlos en una carpeta donde su proyecto pueda acceder fácilmente a ellos. Los guardé en uno llamado “datos”.

Obtenga las teclas API necesarias

Antes de crear su base de datos de estados personalizados, hay 2 claves API que necesitará generar.

  • Uno de OpenAi, para acceder a una base LLM
  • Uno de Llama para acceder a la base de datos de índice que carga datos personalizados a

Una vez que tenga estas claves API, guárdelas en un archivo .env en su proyecto.

#.env file
LLAMA_API_KEY = "<Your-Api-Key>"
OPENAI_API_KEY = "<Your-Api-Key>"

Crear un índice y cargar sus datos

Crear un Llamacloud cuenta. Una vez que esté dentro, busque la sección de índice y haga clic en “Crear” para crear un nuevo índice.

Captura de pantalla del autor

Un índice almacena y administra índices de documentos de forma remota para que puedan ser consultados a través de una API sin necesidad de reconstruirlos o almacenarlos localmente.

Así es como funciona:

  1. Cuando cree su índice, habrá un lugar donde puede cargar archivos para alimentar la base de datos del modelo. Sube tus PDF aquí.
  2. Llamado Parses y trozos los documentos.
  3. Crea un índice (por ejemplo, índice vectorial, índice de palabras clave).
  4. Este índice es almacenado en Llamacloud.
  5. Entonces puedes consultarlo Usando un LLM a través de la API.

Lo siguiente que debe hacer es configurar un modelo de incrustación. Un modelo de incrustación es la LLM que subyace a su proyecto y será responsable de recuperar la información relevante y la producción de texto.

Cuando crea un nuevo índice, desea seleccionar “Crear una nueva incrustación de OpenAI”:

Captura de pantalla del autor

Cuando cree su nueva incrustación, tendrá que proporcionar su clave API OpenAI y nombrar a su modelo.

Captura de pantalla del autor

Una vez que haya creado su modelo, deje la otra configuración del índice como su valor predeterminado y presione “Crear índice” en la parte inferior.

Puede tomar unos minutos para analizar y almacenar todos los documentos, así que asegúrese de que todos los documentos se hayan procesado antes de intentar ejecutar una consulta. El estado debe mostrarse en el lado derecho de la pantalla cuando crea su índice en un cuadro que dice “resumen de archivos de índice”.

Acceder a su modelo a través del código

Una vez que haya creado su índice, también obtendrá una identificación de organización. Para el código más limpio, agregue su ID de organización y nombre del índice a su archivo .env. Luego, recupere todas las variables necesarias para inicializar su índice en su código:

index = LlamaCloudIndex(
  name=os.getenv("INDEX_NAME"), 
  project_name="Default",
  organization_id=os.getenv("ORG_ID"),
  api_key=os.getenv("LLAMA_API_KEY")
)

Consulte su índice y haga una pregunta

Para hacer esto, deberá definir una consulta (aviso) y luego generar una respuesta llamando al índice como tal:

query = "What state has the highest population?"
response = index.as_query_engine().query(query)

# Print out just the text part of the response
print(response.response)

Tener una conversación más larga con tu bot

Al consultar una respuesta del LLM de la manera que acabamos de hacer anteriormente, puede acceder fácilmente a la información de los documentos que cargó. Sin embargo, si hace una pregunta de seguimiento, como “¿Cuál tiene menos?” Sin contexto, el modelo no recordará cuál era su pregunta original. Esto se debe a que no lo hemos programado para realizar un seguimiento del historial de chat.

Para hacer esto, necesitas:

  • Crear memoria usando chatMemoryBuffer
  • Cree un motor de chat y agregue la memoria creada usando contextchatengine

Para crear un motor de chat:

from llama_index.core.chat_engine import ContextChatEngine
from llama_index.core.memory import ChatMemoryBuffer

# Create a retriever from the index
retriever = index.as_retriever()

# Set up memory
memory = ChatMemoryBuffer.from_defaults(token_limit=2000)

# Create chat engine with memory
chat_engine = ContextChatEngine.from_defaults(
    retriever=retriever,
    memory=memory,
    llm=OpenAI(model="gpt-4o"),
)

A continuación, alimente su consulta en su motor de chat:

# To query:
response = chat_engine.chat("What is the population of New York?")
print(response.response)

Esto da la respuesta: “A partir de 2024, la población estimada de Nueva York es de 19,867,248”.

Luego puedo hacer una pregunta de seguimiento:

response = chat_engine.chat("What about California?")
print(response.response)

Esto da la siguiente respuesta: “A partir de 2024, la población de California es de 39,431,263”. Como puede ver, el modelo recordó que lo que estábamos preguntando anteriormente era la población y respondió en consecuencia.

Aplican la aplicación de chatbot de usuario para nosotros el trapo de estado de EE. UU. Captura de pantalla del autor

Conclusión

La generación aumentada de recuperación es una forma eficiente de entrenar una LLM en datos específicos. Llamacloud ofrece una forma simple y directa de construir su propio marco de trapo y consultar el modelo que se encuentra debajo.

El código que usé para este tutorial se escribió en un cuaderno, pero también se puede envolver en una aplicación aerodinámica para crear una conversación más natural de ida y vuelta con un chatbot. He incluido el código de transmisión Aquí en mi github.

Gracias por leer

  • Conéctate conmigo en LinkedIn
  • Cómprame un café ¡Para apoyar mi trabajo!
  • Ofrezco tutoría de ciencia de datos 1: 1, coaching/tutoría profesional, asesoramiento de escritura, reseñas de currículums y más sobre Compañero superior!