En este tutorial, creará un sistema de RAG agéntica de LangChain utilizando el modelo IBM Granite-3.0-8B-Instruct ahora disponible en watsonx.ai que puede responder a consultas complejas sobre el US Open 2024 utilizando información externa.
La generación aumentada por recuperación (RAG) es una técnica de procesamiento del lenguaje natural (PLN) que aprovecha la recuperación de información y los modelos generativos para producir respuestas más precisas, relevantes y contextualizadas. En las tareas tradicionales de generación de lenguaje, se utilizan modelos de lenguaje de gran tamaño (LLM) como los modelos Llama de Meta o los modelos Granite de IBM para construir respuestas basadas en una instrucción de entrada. Los casos de uso comunes en el mundo real de estos modelos de lenguaje de gran tamaño son los chatbots. Cuando a los modelos les falta información relevante que está actualizada en su base de conocimientos, RAG es una herramienta poderosa.
En el núcleo de los sistemas de RAG agéntica se encuentran los agentes de inteligencia artificial (IA). Un agente de IA se refiere a un sistema o programa que es capaz de realizar tareas de forma autónoma en nombre de un usuario u otro sistema mediante el diseño de su flujo de trabajo y el uso de las herramientas disponibles. La tecnología agéntica implementa el uso de herramientas en el backend para obtener información actualizada de diversas fuentes de datos, optimizar el flujo de trabajo y crear subtareas de forma autónoma para resolver tareas complejas. Estas herramientas externas pueden incluir conjuntos de datos externos, motores de búsqueda, API e incluso otros agentes. Paso a paso, el agente reevalúa su plan de acción en tiempo real y se autocorrege.
Los marcos de RAG agéntica son potentes, ya que pueden abarcar más de una herramienta. En las aplicaciones RAG tradicionales, el LLM cuenta con una base de datos vectorial para referenciar al formar sus respuestas. Por el contrario, las aplicaciones de IA agéntica no se limitan a agentes de documentos que solo realizan la recuperación de datos. Los agentes de RAG también pueden tener herramientas para tareas como resolver cálculos matemáticos, escribir correos electrónicos, realizar análisis de datos y más. Estas herramientas pueden complementar el proceso de toma de decisiones del agente. Los agentes de IA son conscientes del contexto en su razonamiento de varios pasos y pueden determinar cuándo utilizar las herramientas adecuadas.
Los agentes de IA, o agentes inteligentes, también pueden trabajar de forma colaborativa en sistemas multiagente, que tienden a superar a los agentes singulares. Esta escalabilidad y adaptabilidad es lo que diferencia a los agentes RAG agénticos de los pipelines RAG tradicionales.
Necesita una cuenta de IBM Cloud para crear un proyecto watsonx.ai.
Aunque puede elegir entre varias herramientas, este tutorial le muestra cómo configurar una cuenta de IBM para utilizar un Jupyter Notebook.
Inicie sesión en watsonx.ai utilizando su cuenta de IBM Cloud.
Cree un proyecto watsonx.ai.
Puede obtener el ID de su proyecto desde su proyecto. Haga clic en la pestaña Administrar. A continuación, copie el ID del proyecto de la sección Detalles de la página General. Necesita este ID para este tutorial.
Cree un Jupyter Notebook.
Este paso abrirá un entorno de Notebook donde podrá copiar el código de este tutorial. También puede descargar este cuaderno en su sistema local y cargarlo en su proyecto watsonx.ai como activo. Para ver más tutoriales de Granite, consulte la comunidad de IBM Granite. Este Jupyter Notebook junto con los conjuntos de datos utilizados se pueden encontrar en GitHub.
Cree una instancia de servicio de watsonx.ai Runtime (seleccione la región adecuada y elija el plan Lite, que es una instancia gratuita).
Genere una clave de API.
Asocie la instancia del servicio watsonx.ai Runtime al proyecto que ha creado en watsonx.ai.
Necesitamos algunas dependencias para este tutorial. Asegúrese de importar los siguientes; si no están instalados, puede resolverlo con una instalación rápida de pip.
Los marcos comunes de Python para crear sistemas de IA agéntica incluyen LangChain, LangGraph y LlamaIndex. En este tutorial, utilizaremos LangChain.
Configure sus credenciales. Almacene su PROJECT_ID y APIKEY en un archivo .env independiente en el mismo nivel de su directorio que este cuaderno.
Este paso es importante, ya que producirá un ejemplo claro del comportamiento de un agente con y sin fuentes de datos externas. Comencemos por establecer nuestros parámetros.
Los parámetros del modelo disponibles se pueden encontrar aquí. Experimentamos con varios parámetros del modelo, como la temperatura, los tokens mínimos y máximos y las secuencias de parada. Obtenga más información sobre los parámetros del modelo y lo que significan en la documentación de watsonx. Es importante establecer nuestras stop_sequences aquí para limitar las alucinaciones de los agentes. Esto le indica al agente que deje de generar más resultados cuando encuentre determinadas subcadenas. En nuestro caso, queremos que el agente finalice su respuesta al llegar a una observación y que no alucine una respuesta humana. Por lo tanto, una de nuestras stop_sequences es 'Human:' y otra es Observation para detenerse una vez que se produce una respuesta final.
Para este tutorial, sugerimos utilizar Granite-3.0-8B-Instruct de IBM como el LLM para lograr resultados similares. Puede utilizar cualquier modelo de IA de su elección. Los modelos fundacionales disponibles a través de watsonx se pueden encontrar aquí. El propósito de estos modelos en las aplicaciones de LLM es servir como motor de razonamiento que decide qué acciones tomar.
Configuraremos una plantilla de instrucciones en caso de que desee hacer varias preguntas.
Y ahora podemos configurar una cadena con nuestra instrucción y nuestro LLM. Esto permite que el modelo generativo produzca una respuesta.
Probemos para ver cómo responde nuestro agente a una consulta básica.
Resultado: ' No intente inventar una respuesta.\n\n El deporte que se juega en el US Open es el tenis".
El agente respondió correctamente a la consulta básica con la respuesta correcta. En los próximos pasos de este tutorial, crearemos una herramienta RAG para que el agente acceda a información relevante sobre la participación de IBM en el US Open 2024. Como hemos cubierto, los LLM tradicionales no pueden obtener información actual por sí mismos. Verifiquemos esto.
Resultado: ' No invente una respuesta.\n\n US Open de 2024 aún no se ha anunciado oficialmente, por lo que la ubicación no está confirmada. Por lo tanto, no sé la respuesta a esta pregunta'.
Evidentemente, el LLM no puede proporcionarnos la información relevante. Los datos de entrenamiento utilizados para este modelo contenían información anterior al US Open de 2024 y, sin las herramientas adecuadas, el agente no tiene acceso a esta información.
El primer paso para crear la base de conocimientos es enumerar las URL de las que extraeremos el contenido. En este caso, nuestra fuente de datos se recopilará de nuestro contenido en línea que resume la participación de IBM en el US Open 2024. Las URL relevantes se establecen en la lista de URL.
A continuación, cargue los documentos utilizando LangChain WebBaseLoader para las URL que enumeramos. También imprimiremos un documento de muestra para ver cómo se carga.
Resultado: Document(metadata=,{'source': 'https://www.ibm.com/es-es/case-studies/us-open', 'title': 'U.S. Open | IBM', 'description': 'To help the US Open stay on the cutting edge of customer experience, IBM Consulting built powerful generative AI models with watsonx.', 'language': 'en'} page_content='\n\n\n\n\n\n\n\n\n\nU.S. Open | IBM\n\n\n\n\n\ n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ n\n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nHome\n\n\n\n\nCase Studies\n\n\n\nUS Open \n\n\n\n \n\n\n\n \n Acing the US Open digital experience\n\n\n\n\n\n\n \n\n\n \n\n \n\n\n \n \n AI models built with watsonx transform data into insight\n \n\n\n\n\n \n\n\n \n\n\nGet the latest AI and tech insights\n\n\nLearn More\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nFor two weeks at the end of summer, nearly one million people make the journey to Flushing, New York, to watch the best tennis players in the world compete in the US Open Tennis Championships...')
Para dividir los datos de estos documentos en fragmentos que puedan ser procesados por el LLM, podemos utilizar un divisor de texto como RecursiveCharacterTextSplitter . Este divisor de texto divide el contenido en los siguientes caracteres: ["\n\n", "\n", " ", ""]. Esto se hace con la intención de mantener el texto en los mismos fragmentos, como párrafos, oraciones y palabras juntas.
Una vez que se inicia el divisor de texto, podemos aplicarlo a nuestra docs_list.
El modelo de incrustación que estamos utilizando es un modelo IBM® Slate a través del servicio de incrustaciones watsonx.ai. Vamos a inicializarlo.
Para almacenar nuestros documentos incrustados, utilizaremos Chroma DB, un almacén de vectores de código abierto.
Para acceder a la información en el almacén de vectores, debemos configurar un recuperador.
Definamos la herramienta get_IBM_US_Open_context() que utilizará nuestro agente. El único parámetro de esta herramienta es la consulta del usuario. La descripción de la herramienta también se indica para informar al agente del uso de la herramienta. De esta manera, el agente sabe cuándo llamar a esta herramienta. Esta herramienta puede ser utilizada por el sistema de RAG agéntica para enrutar la consulta del usuario al almacén de vectores si se trata de la participación de IBM en el US Open de 2024.
A continuación, configuraremos una nueva plantilla de instrucciones para hacer varias preguntas. Esta plantilla es más compleja. Se denomina instrucción de chat estructurada y se puede utilizar para crear agentes que tengan varias herramientas disponibles. En nuestro caso, la herramienta que estamos utilizando se definió en el paso 6. La instrucción de chat estructurada estará compuesta por una system_prompt , una human_prompt y nuestra herramienta RAG.
Primero, configuraremos la system_prompt . Esta instrucción indica al agente que imprima su "proceso de pensamiento", que incluye las subtareas del agente, las herramientas que se utilizaron y el resultado. Esto nos da conocimiento de la llamada de función del agente. La instrucción también indica al agente que devuelva sus respuestas en formato JSON Blob.
En el siguiente código, estamos estableciendo la human_prompt . Esta instrucción le dice al agente que muestre la entrada del usuario seguida de los pasos intermedios tomados por el agente como parte del agent_scratchpad .
A continuación, establecemos el orden de nuestras instrucciones recién definidas en la plantilla de instrucciones. Creamos esta nueva plantilla para incluir la system_prompt seguida de una lista opcional de mensajes recopilados en la memoria del agente, si los hay, y finalmente, la human_prompt que incluye tanto la entrada humana como la agent_scratchpad .
Ahora, finalicemos nuestra plantilla de instrucciones por añadiendo los nombres, descripciones y argumentos de las herramientas utilizando una plantilla de instrucciones parcial. Esto permite al agente acceder a la información relativa a cada herramienta, incluidos los casos de uso previstos. También significa que podemos añadir y eliminar herramientas sin alterar toda nuestra plantilla de instrucciones.
Una característica importante de los agentes de IA es su memoria. Los agentes pueden almacenar conversaciones y hallazgos anteriores en su memoria para mejorar la precisión y relevancia de sus respuestas en el futuro. En nuestro caso, utilizaremos ConversationBufferMemory() de LangChain como medio de almacenamiento de memoria.
Y ahora podemos configurar una cadena con el bloc de notas, la memoria, la instrucción y el LLM de nuestro agente. La clase AgentExecutor se utiliza para ejecutar el agente. Toma el agente, sus herramientas, el enfoque de manejo de errores, el parámetro detallado y la memoria.
Ahora podemos hacer preguntas al agente. Recordemos la incapacidad anterior del agente para proporcionarnos información relacionada con el US Open de 2024. Ahora que el agente tiene su herramienta RAG disponible para usar, intentemos hacer las mismas preguntas nuevamente.
Resultado: (algunos campos de descripción y contenido de la página se acortaron para mostrar resultados de forma concisa)
> Entering new AgentExecutor chain...
Thought: The human is asking about the location of the 2024 US Open Tennis Championship. I need to find out where it was held.
Action:
```
{
"action": "get_IBM_US_Open_context",
"action_input": "Where was the 2024 US Open Tennis Championship held?"
}
```
Observation[Document(metadata={'description': "IBM and the United States Tennis Association (USTA) announced several watsonx-powered fan features coming to the US Open digital platforms ahead of this year's tournament. These new and enhanced capabilities – a product of collaboration between IBM and the USTA digital team – aim to deliver a more informative and engaging experience for millions of tennis fans around the world.", 'language': 'en-us', 'source': 'https://newsroom.ibm.com/2024-08-15-ibm-and-the-usta-serve-up-new-and-enhanced-generative-ai-features-for-2024-us-open-digital-platforms', 'title': 'IBM and the USTA Serve Up New and Enhanced Generative AI Features for 2024 US Open Digital Platforms'}, page_content="IBM and the USTA Serve Up New and Enhanced Generative AI Features for 2024 US Open Digital Platforms\n-New Match Report summaries offer...")]
Action:
```
{
"action": "Final Answer",
"action_input": "The 2024 US Open Tennis Championship was held at the USTA Billie Jean King National Tennis Center in Flushing, Queens, New York."
}
```
Observation
> Finished chain.
{'input': 'Where was the 2024 US Open Tennis Championship?',
'history': '',
'output': 'The 2024 US Open Tennis Championship was held at the USTA Billie Jean King National Tennis Center in Flushing, Queens, New York.'}
Great! El agente utilizó su herramienta RAG disponible para devolver la ubicación del US Open de 2024, según la consulta del usuario. Incluso podemos ver el documento exacto del que el agente está recuperando su información. Ahora, intentemos una consulta de pregunta un poco más compleja. Esta vez, la consulta será sobre la participación de IBM en el US Open de 2024.
Resultado: (algunos campos de descripción y contenido de la página se acortaron para mostrar los resultados de forma concisa)
> Entering new AgentExecutor chain...
```
{
"action": "get_IBM_US_Open_context",
"action_input": "How did IBM use watsonx at the 2024 US Open Tennis Championship?"
}
```
Observation[Document(metadata={'description': 'To help the US Open stay on the cutting edge of customer experience, IBM Consulting built powerful generative AI models with watsonx.', 'language': 'en', 'source': 'https://www.ibm.com/es-es/case-studies/us-open', 'title': 'U.S. Open | IBM'}, page_content='The US Open is a sprawling, two-week tournament, with hundreds of matches played on 22 different courts. Keeping up with all the action is a challenge, both for tennis fans and the USTA editorial team covering the event...)]
Action:
```
{
"action": "Final Answer",
"action_input": "IBM used watsonx at the 2024 US Open Tennis Championship to create generative AI-powered features such as Match Reports, AI Commentary, and SlamTracker. These features enhance the digital experience for fans and scale the productivity of the USTA editorial team."
}
```
Observation
> Finished chain.
{'input': 'How did IBM use watsonx at the 2024 US Open Tennis Championship?',
'history': 'Human: Where was the 2024 US Open Tennis Championship?\nAI: The 2024 US Open Tennis Championship was held at the USTA Billie Jean King National Tennis Center in Flushing, Queens, New York.',
'output': 'IBM used watsonx at the 2024 US Open Tennis Championship to create generative AI-powered features such as Match Reports, AI Commentary, and SlamTracker. These features enhance the digital experience for fans and scale the productivity of the USTA editorial team.'}
Una vez más, el agente pudo recuperar con éxito la información relevante relacionada con la consulta del usuario. Además, el agente actualiza con éxito su base de conocimientos a medida que aprende nueva información y tiene experiencia de nuevas interacciones como se ve en el output.
Ahora, probemos si el agente puede descifrar cuándo no es necesario llamar a la herramienta para responder a la consulta del usuario. Podemos probar esto haciendo al agente de RAG una pregunta que no sea sobre el US Open.
Resultado:
> Entering new AgentExecutor chain...
{
"action": "Final Answer",
"action_input": "The capital of France is Paris."
}
Observation
> Finished chain.
{'input': 'What is the capital of France?',
'history': 'Human: Where was the 2024 US Open Tennis Championship?\nAI: The 2024 US Open Tennis Championship was held at the USTA Billie Jean King National Tennis Center in Flushing, Queens, New York.\nHuman: How did IBM use watsonx at the 2024 US Open Tennis Championship?\nAI: IBM used watsonx at the 2024 US Open Tennis Championship to create generative AI-powered features such as Match Reports, AI Commentary, and SlamTracker. These features enhance the digital experience for fans and scale the productivity of the USTA editorial team.',
'output': 'The capital of France is Paris.'}
Como se ve en la cadena AgentExecutor, el agente reconoció que tenía la información en su base de conocimientos para responder a esta pregunta sin utilizar sus herramientas.
En este tutorial, ha creado un agente RAG utilizando LangChain en Python con watsonx. El LLM con el que trabajó fue el modelo IBM Granite-3.0-8B-Instruct . El resultado de la muestra es importante, ya que muestra la importancia de este avance de la IA generativa. El agente de IA pudo recuperar información relevante a través de la herramienta get_IBM_US_Open_context, actualizar su memoria con cada interacción y dar resultados adecuados. También es importante tener en cuenta la capacidad del agente para determinar si la llamada a herramientas es adecuada para cada tarea específica. Cuando el agente tenía la información necesaria para responder a la consulta de entrada, no utilizaba ninguna herramienta para responder a las preguntas.
Para obtener más contenido sobre agentes de IA, le recomendamos que consulte nuestro tutorial sobre agentes de IA que devuelve la imagen astronómica del día de hoy utilizando la API de código abierto de la NASA y una herramienta de fecha.
Cree, implemente y gestione potentes asistentes y agentes de IA que automaticen flujos de trabajo y procesos con IA generativa.
Construya el futuro de su empresa con soluciones de IA en las que puede confiar.
Los servicios de IA de IBM Consulting ayudan a reinventar la forma de trabajar de las empresas usando IA para la transformación.