RAG (Retrieval-augmented generation) es un enfoque pragmático y eficaz para utilizar grandes modelos lingüísticos en la empresa. Aprenda cómo funciona, por qué lo necesita y cómo implementarlo con OpenAI y LangChain.
Normalmente, el uso de grandes modelos lingüísticos (LLM) en la empresa se divide en dos grandes categorías. La primera es cuando el LLM automatiza una tarea relacionada con el lenguaje, como escribir una entrada en un blog, redactar un correo electrónico o mejorar la gramática o el tono de un correo electrónico ya redactado. La mayoría de las veces este tipo de tareas no implican información confidencial de la empresa.
La segunda categoría consiste en procesar información interna de la empresa, como una colección de documentos (PDF, hojas de cálculo, presentaciones, etc.) que deben analizarse, resumirse, consultarse o utilizarse de otro modo en una tarea lingüística. Tales tareas incluyen hacer preguntas detalladas sobre las implicaciones de una cláusula de un contrato, por ejemplo, o crear una visualización de las previsiones de ventas para el lanzamiento de un próximo proyecto.
Hay dos razones por las que utilizar un LLM de acceso público como ChatGPT puede no ser apropiado para procesar documentos internos. La confidencialidad es la primera y obvia. Pero la segunda razón, también importante, es que los datos de entrenamiento de un LLM público no incluyen información interna de su empresa. Por lo tanto, es poco probable que ese LLM dé respuestas útiles cuando se le pregunte por esa información.
Introduzca la generación aumentada por recuperación, o RAG. RAG es una técnica utilizada para aumentar un LLM con datos externos, como los documentos de su empresa, que proporcionan al modelo el conocimiento y el contexto que necesita para producir resultados precisos y útiles para su caso de uso específico. RAG es un enfoque pragmático y eficaz para utilizar LLM en la empresa.
En este artículo, explicaré brevemente cómo funciona RAG, enumeraré algunos ejemplos de cómo se utiliza RAG y proporcionaré un ejemplo de código para configurar un marco RAG sencillo.
Como su nombre indica, la RAG consta de dos partes: una de recuperación y otra de generación. Pero eso no aclara mucho. Es más útil pensar en la RAG como un proceso de cuatro pasos. La primera se realiza una vez y las otras tres tantas veces como sea necesario.
Las cuatro etapas de la generación aumentada por recuperación:
Introducción de los documentos internos en una base de datos vectorial. Este paso puede requerir una gran cantidad de limpieza de datos, formateo y fragmentación, pero se trata de un coste inicial único. (Para una introducción rápida a las bases de datos vectoriales, véase este artículo).
Una consulta en lenguaje natural, es decir, la pregunta que un humano quiere hacer al LLM.
Aumento de la consulta con datos recuperados mediante la búsqueda de similitudes en la base de datos vectorial. En este paso se añade a la consulta el contexto del almacén de documentos antes de enviarla al LLM. La consulta indica al LLM que responda en el contexto del contenido adicional. El marco RAG realiza este trabajo entre bastidores mediante un componente denominado recuperador, que ejecuta la búsqueda y añade el contexto pertinente.
Generación de la respuesta a la consulta aumentada por parte del LLM.
Al centrar el LLM en el corpus de documentos, RAG ayuda a garantizar que el modelo produzca respuestas relevantes y precisas. Al mismo tiempo, la RAG ayuda a evitar respuestas arbitrarias o sin sentido, a las que se suele hacer referencia en la literatura como «alucinaciones».
Desde el punto de vista del usuario, la generación aumentada por recuperación no parecerá diferente de hacer una pregunta a cualquier LLM con una interfaz de chat, salvo que el sistema sabrá mucho más sobre el contenido en cuestión y dará mejores respuestas.
El proceso GAR desde el punto de vista del usuario:
Un humano formula una pregunta al LLM.
El sistema GAR busca en el almacén de documentos (base de datos vectorial) y extrae contenido que pueda ser relevante.
El sistema RAG pasa la pregunta del usuario, más el contenido adicional recuperado del almacén de documentos, al LLM.
Ahora el LLM «sabe» proporcionar una respuesta que tiene sentido en el contexto del contenido recuperado del almacén de documentos (base de datos vectorial).
El sistema RAG devuelve la respuesta del LLM. El sistema RAG también puede proporcionar enlaces a los documentos utilizados para responder a la consulta.
Los casos de uso de la RAG son variados y crecen rápidamente. Estos son sólo algunos ejemplos de cómo y dónde se utiliza la GAR.
Los motores de búsqueda han implementado la RAG para proporcionar fragmentos destacados más precisos y actualizados en sus resultados de búsqueda. Cualquier aplicación de LLM que deba mantenerse al día con información constantemente actualizada es una buena candidata para la RAG.
RAG se ha utilizado para mejorar la calidad de las respuestas en los sistemas de respuesta a preguntas. El modelo, basado en la recuperación, encuentra los pasajes o documentos pertinentes que contienen la respuesta (mediante búsqueda por similitud) y, a continuación, genera una respuesta concisa y pertinente basada en esa información.
La GAR puede utilizarse para mejorar la experiencia del usuario en el comercio electrónico proporcionando recomendaciones de productos más pertinentes y personalizadas. Al recuperar e incorporar información sobre las preferencias del usuario y los detalles del producto, RAG puede generar recomendaciones más precisas y útiles para los clientes.
RAG tiene un gran potencial en el sector sanitario, donde el acceso a información precisa y oportuna es crucial. Al recuperar e incorporar información médica relevante de fuentes externas, la GAR puede ayudar a proporcionar respuestas más precisas y contextualizadas en aplicaciones sanitarias. Estas aplicaciones aumentan la información a la que puede acceder un médico humano, que en última instancia es quien realiza la llamada y no el modelo.
La GAR puede aplicarse eficazmente en situaciones jurídicas, como las fusiones y adquisiciones, en las que complejos documentos jurídicos proporcionan contexto para las consultas, permitiendo una navegación rápida a través de un laberinto de cuestiones normativas.
Antes de sumergirnos en nuestro ejemplo de código, necesitamos echar un vistazo más de cerca al proceso de ingestión de documentos. Para poder ingerir documentos en una base de datos vectorial para su uso en RAG, tenemos que pre-procesarlos de la siguiente manera:
Extraer el texto.
Tokenizar el texto.
Crear vectores a partir de los tokens.
Guardar los vectores en una base de datos.
¿Qué significa esto?
Un documento puede ser PDF o HTML o cualquier otro formato, y no nos importa el marcado o el formato. Lo único que queremos es el contenido, el texto en bruto.
Después de extraer el texto, tenemos que dividirlo en trozos, llamados «tokens», y luego asignar estos tokens a vectores de alta dimensión de números de coma flotante, normalmente de 768 o 1024, o incluso más grandes. Estos vectores se denominan incrustaciones, aparentemente porque estamos incrustando una representación numérica de un trozo de texto en un espacio vectorial.
Hay muchas formas de convertir texto en incrustaciones vectoriales. Normalmente esto se hace utilizando una herramienta llamada modelo de incrustación, que puede ser un LLM o un modelo codificador independiente. En nuestro ejemplo RAG, utilizaremos el modelo de incrustación de OpenAI.
LangChain es un framework para Python y TypeScript/JavaScript que facilita la creación de aplicaciones basadas en modelos lingüísticos. Esencialmente, LangChain te permite encadenar agentes o tareas para interactuar con modelos, conectar con fuentes de datos (incluyendo almacenes de datos vectoriales), y trabajar con tus datos y respuestas de modelos.
LangChain es muy útil para saltar a la exploración de LLM, pero está cambiando rápidamente. Como resultado, requiere cierto esfuerzo mantener todas las librerías sincronizadas, especialmente si tu aplicación tiene muchas partes móviles con diferentes librerías Python en diferentes etapas de evolución. También ha surgido un marco más reciente, LlamaIndex. LlamaIndex fue diseñado específicamente para aplicaciones de datos LLM, por lo que tiene más de una inclinación empresarial.
Tanto LangChain como LlamaIndex disponen de amplias bibliotecas para la ingesta, el análisis sintáctico y la extracción de datos a partir de una amplia gama de fuentes de datos, desde texto, PDF y correo electrónico hasta sistemas de mensajería y bases de datos. El uso de estas librerías elimina la molestia de analizar cada tipo de datos y extraer el contenido del formato. Esto ya vale el precio de entrada.
Fuente: https://www.computerworld.es/tecnologia/generacion-aumentada-por-recuperacion-paso-a-paso
Cookie | Duración | Descripción |
---|---|---|
__cf_bm | 1 hour | This cookie, set by Cloudflare, is used to support Cloudflare Bot Management. |
_GRECAPTCHA | 6 months | Google Recaptcha service sets this cookie to identify bots to protect the website against malicious spam attacks. |
cookielawinfo-checkbox-advertisement | 1 year | Set by the GDPR Cookie Consent plugin, this cookie records the user consent for the cookies in the "Advertisement" category. |
cookielawinfo-checkbox-analytics | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Analytics". |
cookielawinfo-checkbox-functional | 11 months | The cookie is set by GDPR cookie consent to record the user consent for the cookies in the category "Functional". |
cookielawinfo-checkbox-necessary | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Necessary". |
cookielawinfo-checkbox-others | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Other. |
cookielawinfo-checkbox-performance | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Performance". |
CookieLawInfoConsent | 1 year | CookieYes sets this cookie to record the default button state of the corresponding category and the status of CCPA. It works only in coordination with the primary cookie. |
csrftoken | 1 year | This cookie is associated with Django web development platform for python. Used to help protect the website against Cross-Site Request Forgery attacks |
opt_out | 1 year | This cookie is used for preventing the installation of third party advertiser or other cookies on the browser. |
PHPSESSID | 24 minutes | This cookie is native to PHP applications. The cookie stores and identifies a user's unique session ID to manage user sessions on the website. The cookie is a session cookie and will be deleted when all the browser windows are closed. |
rc::a | never | This cookie is set by the Google recaptcha service to identify bots to protect the website against malicious spam attacks. |
rc::b | session | This cookie is set by the Google recaptcha service to identify bots to protect the website against malicious spam attacks. |
rc::c | session | This cookie is set by the Google recaptcha service to identify bots to protect the website against malicious spam attacks. |
rc::f | never | This cookie is set by the Google recaptcha service to identify bots to protect the website against malicious spam attacks. |
ts | 1 year 1 month | PayPal sets this cookie to enable secure transactions through PayPal. |
usprivacy | 1 year 1 month | This is a consent cookie set by Dailymotion to store the CCPA consent string (mandatory information about an end-user being or not being a California consumer and exercising or not exercising its statutory right). |
viewed_cookie_policy | 11 months | The cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data. |
wordpress_test_cookie | session | WordPress sets this cookie to determine whether cookies are enabled on the users' browsers. |
Cookie | Duración | Descripción |
---|---|---|
cX_G | 1 year 1 month | Cxense sets this cookie for storing the global ID, mapping different ids together into one ID. |
v1st | 1 year 1 month | The v1st cookie is set by TripAdvisor to collect details about how visitors use the website, by displaying user reviews, awards and information received on the TripAdvisor community. |
yt-player-headers-readable | never | The yt-player-headers-readable cookie is used by YouTube to store user preferences related to video playback and interface, enhancing the user's viewing experience. |
yt-remote-cast-available | session | The yt-remote-cast-available cookie is used to store the user's preferences regarding whether casting is available on their YouTube video player. |
yt-remote-cast-installed | session | The yt-remote-cast-installed cookie is used to store the user's video player preferences using embedded YouTube video. |
yt-remote-connected-devices | never | YouTube sets this cookie to store the user's video preferences using embedded YouTube videos. |
yt-remote-device-id | never | YouTube sets this cookie to store the user's video preferences using embedded YouTube videos. |
yt-remote-fast-check-period | session | The yt-remote-fast-check-period cookie is used by YouTube to store the user's video player preferences for embedded YouTube videos. |
yt-remote-session-app | session | The yt-remote-session-app cookie is used by YouTube to store user preferences and information about the interface of the embedded YouTube video player. |
yt-remote-session-name | session | The yt-remote-session-name cookie is used by YouTube to store the user's video player preferences using embedded YouTube video. |
ytidb::LAST_RESULT_ENTRY_KEY | never | The cookie ytidb::LAST_RESULT_ENTRY_KEY is used by YouTube to store the last search result entry that was clicked by the user. This information is used to improve the user experience by providing more relevant search results in the future. |
Cookie | Duración | Descripción |
---|---|---|
_gat | 1 minute | Google Universal Analytics sets this cookie to restrain request rate and thus limit data collection on high-traffic sites. |
dmvk | session | The dmvk cookie is set by Dailymotion to record data of visitor behaviour on the website. |
Cookie | Duración | Descripción |
---|---|---|
_fbp | 3 months | Facebook sets this cookie to display advertisements when either on Facebook or on a digital platform powered by Facebook advertising after visiting the website. |
_ga | 1 year 1 month 4 days | Google Analytics sets this cookie to calculate visitor, session and campaign data and track site usage for the site's analytics report. The cookie stores information anonymously and assigns a randomly generated number to recognise unique visitors. |
_gid | 1 day | Google Analytics sets this cookie to store information on how visitors use a website while also creating an analytics report of the website's performance. Some of the collected data includes the number of visitors, their source, and the pages they visit anonymously. |
cX_P | 1 year 1 month | Cxense sets this cookie for site-specific user sessions - across sessions. |
Cookie | Duración | Descripción |
---|---|---|
guest_id | 1 year 1 month | Twitter sets this cookie to identify and track the website visitor. It registers if a user is signed in to the Twitter platform and collects information about ad preferences. |
test_cookie | 15 minutes | doubleclick.net sets this cookie to determine if the user's browser supports cookies. |
VISITOR_INFO1_LIVE | 6 months | YouTube sets this cookie to measure bandwidth, determining whether the user gets the new or old player interface. |
VISITOR_PRIVACY_METADATA | 6 months | YouTube sets this cookie to store the user's cookie consent state for the current domain. |
YSC | session | Youtube sets this cookie to track the views of embedded videos on Youtube pages. |
yt.innertube::nextId | never | YouTube sets this cookie to register a unique ID to store data on what videos from YouTube the user has seen. |
yt.innertube::requests | never | YouTube sets this cookie to register a unique ID to store data on what videos from YouTube the user has seen. |
Cookie | Duración | Descripción |
---|---|---|
__cflb | 1 day | This cookie is used by Cloudflare for load balancing. |
_awl | 1 year 1 month | No description available. |
_pcid | 1 year 1 month | Description is currently not available. |
_pctx | 1 year 1 month | Description is currently not available. |
gckp | 1 year | This cookie is set by the provider Cxense. This cookie is used for building user profile information across all sites in the Cxense network. |
itsec-hb-login-27e4caa2b0fb20a2dee118de04e9de77 | 1 hour | Description is currently not available. |
ntvSession | session | Description is currently not available. |