Construye aplicaciones de IA generativa listas para producción para la búsqueda empresarial utilizando tuberías de Haystack y Amazon SageMaker JumpStart con LLMs

Construye aplicaciones de IA generativa para búsqueda empresarial con Haystack y Amazon SageMaker JumpStart con LLMs en producción

Esta publicación de blog está escrita en colaboración con Tuana Çelik de deepset.

La búsqueda empresarial es un componente crítico de la eficiencia organizativa a través de la digitalización de documentos y la gestión del conocimiento. La búsqueda empresarial cubre el almacenamiento de documentos como archivos digitales, la indexación de los documentos para la búsqueda y proporcionar resultados relevantes basados en las consultas del usuario. Con la llegada de modelos de lenguaje grandes (LLM), podemos implementar experiencias conversacionales al proporcionar los resultados a los usuarios. Sin embargo, debemos asegurarnos de que los LLM limiten las respuestas a los datos de la empresa, mitigando así las alucinaciones del modelo.

En esta publicación, mostramos cómo construir una aplicación de IA generativa de extremo a extremo para la búsqueda empresarial con Retrieval Augmented Generation (RAG) utilizando las tuberías de Haystack y el modelo Falcon-40b-instruct de Amazon SageMaker JumpStart y Amazon OpenSearch Service. El código fuente para el ejemplo mostrado en esta publicación está disponible en el repositorio de GitHub

Descripción general de la solución

Para restringir las respuestas de la aplicación de IA generativa solo a datos de la empresa, necesitamos utilizar una técnica llamada Retrieval Augmented Generation (RAG). Una aplicación que utiliza el enfoque RAG recupera la información más relevante para la solicitud del usuario de la base de conocimientos o contenido empresarial, la agrupa como contexto junto con la solicitud del usuario como una indicación y luego la envía al LLM para obtener una respuesta. Los LLM tienen limitaciones en cuanto al recuento máximo de palabras para las indicaciones de entrada, por lo que elegir los pasajes adecuados entre miles o millones de documentos en la empresa tiene un impacto directo en la precisión del LLM.

La técnica RAG se ha vuelto cada vez más importante en la búsqueda empresarial. En esta publicación, mostramos un flujo de trabajo que aprovecha SageMaker JumpStart para implementar un modelo Falcon-40b-instruct y utiliza Haystack para diseñar y ejecutar una tubería de preguntas y respuestas con búsqueda mejorada por recuperación. El flujo de trabajo final de mejora de recuperación cubre los siguientes pasos generales:

  1. La consulta del usuario se utiliza para un componente de recuperador, que realiza una búsqueda vectorial para recuperar el contexto más relevante de nuestra base de datos.
  2. Este contexto se incrusta en una indicación que está diseñada para instruir a un LLM para generar una respuesta solo a partir del contexto proporcionado.
  3. El LLM genera una respuesta a la consulta original considerando únicamente el contexto incrustado en la indicación que recibió.

SageMaker JumpStart

SageMaker JumpStart sirve como un centro de modelos que encapsula una amplia variedad de modelos de aprendizaje profundo para casos de uso de texto, visión, audio e incrustación. Con más de 500 modelos, su centro de modelos comprende tanto modelos públicos como propietarios de los socios de AWS, como AI21, Stability AI, Cohere y LightOn. También aloja modelos fundamentales desarrollados únicamente por Amazon, como AlexaTM. Algunos de los modelos ofrecen capacidades para ajustarlos con sus propios datos. SageMaker JumpStart también proporciona plantillas de soluciones que establecen la infraestructura para casos de uso comunes y cuadernos de ejemplo ejecutables para aprendizaje automático (ML) con SageMaker.

Haystack

Haystack es un marco de código abierto desarrollado por deepset que permite a los desarrolladores orquestar aplicaciones LLM compuestas por diferentes componentes como modelos, bases de datos vectoriales, convertidores de archivos y muchos otros módulos. Haystack proporciona tuberías y Agentes, dos estructuras potentes para diseñar aplicaciones LLM para varios casos de uso, incluyendo búsqueda, preguntas y respuestas y IA conversacional. Con un gran enfoque en los métodos de recuperación de última generación y métricas sólidas de evaluación, le proporciona todo lo que necesita para enviar una aplicación confiable y segura. Puede serializar tuberías en archivos YAML, exponerlas a través de una API REST y escalarlas de manera flexible con su carga de trabajo, lo que facilita la transición de su aplicación desde una etapa de prototipo a producción.

Amazon OpenSearch

OpenSearch Service es un servicio completamente administrado que facilita la implementación, escalado y operación de OpenSearch en la nube de AWS. OpenSearch es un conjunto de software de código abierto escalable, flexible y extensible para aplicaciones de búsqueda, análisis, monitoreo de seguridad y observabilidad, con licencia Apache 2.0.

En los últimos años, las técnicas de ML se han vuelto cada vez más populares para mejorar la búsqueda. Entre ellas se encuentran el uso de modelos de incrustación, un tipo de modelo que puede codificar un gran conjunto de datos en un espacio n-dimensional donde cada entidad se codifica en un vector, un punto de datos en ese espacio, y se organiza de manera que las entidades similares estén más cerca una de la otra. Una base de datos vectoriales proporciona una búsqueda eficiente de similitud de vectores al proporcionar índices especializados como índices k-NN.

Con las capacidades de la base de datos vectorial de OpenSearch Service, puede implementar la búsqueda semántica, RAG con LLM, motores de recomendación y búsqueda de medios ricos. En esta publicación, utilizamos RAG para permitirnos complementar LLM generativos con una base de conocimientos externa que generalmente se construye utilizando una base de datos vectorial alimentada con artículos de conocimiento codificados en vectores.

Visión general de la aplicación

El siguiente diagrama representa la estructura de la aplicación final.

En esta aplicación, utilizamos el Pipeline de Indexación de Haystack para gestionar los documentos cargados e indexar los documentos, y el Pipeline de Consulta de Haystack para realizar la recuperación de conocimiento a partir de los documentos indexados.

El Pipeline de Indexación de Haystack incluye los siguientes pasos de alto nivel:

  1. Cargar un documento.
  2. Inicializar el DocumentStore e indexar los documentos.

Utilizamos OpenSearch como nuestro DocumentStore y un pipeline de indexación de Haystack para preprocesar e indexar nuestros archivos en OpenSearch. Los FileConverters y PreProcessor de Haystack te permiten limpiar y preparar tus archivos sin procesar para que estén en una forma y formato con los que tu pipeline de procesamiento de lenguaje natural (NLP) y el modelo de lenguaje que elijas puedan manejar. El pipeline de indexación que hemos utilizado aquí también utiliza sentence-transformers/all-MiniLM-L12-v2 para crear embeddings para cada documento, que utilizamos para una recuperación eficiente.

El Pipeline de Consulta de Haystack incluye los siguientes pasos de alto nivel:

  1. Enviamos una consulta al pipeline RAG.
  2. Un componente EmbeddingRetriever actúa como un filtro que recupera los documentos más relevantes top_k de nuestros documentos indexados en OpenSearch. Utilizamos nuestro modelo de embedding elegido para embeber tanto la consulta como los documentos (en la indexación) para lograr esto.
  3. Los documentos recuperados se incrustan en nuestra solicitud al modelo Falcon-40b-instruct.
  4. El LLM devuelve una respuesta basada en los documentos recuperados.

Para implementar el modelo, utilizamos SageMaker JumpStart, que facilita la implementación de modelos con solo presionar un botón. Aunque hemos utilizado y probado Falcon-40b-instruct para este ejemplo, puedes utilizar cualquier modelo de Hugging Face disponible en SageMaker.

La solución final está disponible en el repositorio haystack-sagemaker y utiliza el sitio web y la documentación de OpenSearch (para OpenSearch 2.7) como nuestros datos de ejemplo para realizar una recuperación de preguntas y respuestas aumentada.

Prerrequisitos

Lo primero que debemos hacer antes de poder utilizar cualquier servicio de AWS es asegurarnos de haber creado una cuenta de AWS y haber iniciado sesión en ella. Luego, debes crear un usuario y un grupo administrativos. Para obtener instrucciones sobre ambos pasos, consulta “Configurar los prerrequisitos de Amazon SageMaker”.

Para poder utilizar Haystack, debes instalar el paquete farm-haystack con las dependencias necesarias. Para ello, utiliza el archivo requirements.txt del repositorio de GitHub ejecutando pip install requirements.txt.

Indexar documentos en OpenSearch

Haystack ofrece varios conectores a bases de datos, que se llaman DocumentStores. Para este flujo de trabajo RAG, utilizamos el OpenSearchDocumentStore. El repositorio de ejemplo incluye un pipeline de indexación y una plantilla de AWS CloudFormation para configurar un OpenSearchDocumentStore con documentos rastreados del sitio web y las páginas de documentación de OpenSearch.

A menudo, para hacer que una aplicación de procesamiento de lenguaje natural funcione en casos de uso de producción, debemos pensar en la preparación y limpieza de datos. Esto se cubre con los pipelines de indexación de Haystack, que te permiten diseñar tus propios pasos de preparación de datos, que finalmente escriben tus documentos en la base de datos de tu elección.

Un pipeline de indexación también puede incluir un paso para crear embeddings para tus documentos. Esto es muy importante para el paso de recuperación. En nuestro ejemplo, utilizamos sentence-transformers/all-MiniLM-L12-v2 como nuestro modelo de embedding. Este modelo se utiliza para crear embeddings para todos nuestros documentos indexados, pero también para la consulta del usuario en el momento de la consulta.

Para indexar documentos en el OpenSearchDocumentStore, ofrecemos dos opciones con instrucciones detalladas en el archivo README del repositorio de ejemplo. Aquí, explicamos los pasos para indexar en un servicio OpenSearch implementado en AWS.

Iniciar un servicio de OpenSearch

Utiliza la plantilla de CloudFormation proporcionada para configurar un servicio de OpenSearch en AWS. Al ejecutar el siguiente comando, tendrás un servicio de OpenSearch vacío. Luego puedes elegir indexar los datos de ejemplo que hemos proporcionado o utilizar tus propios datos, que puedes limpiar y preprocesar utilizando el Pipeline de Indexación de Haystack. Ten en cuenta que esto crea una instancia abierta a Internet, lo cual no se recomienda para casos de uso de producción.

```bash
aws cloudformation create-stack --stack-name HaystackOpensearch --template-body file://cloudformation/opensearch-index.yaml --parameters ParameterKey=InstanceType,ParameterValue=r5.large.search ParameterKey=InstanceCount,ParameterValue=3 ParameterKey=OSPassword,ParameterValue=Password123!
```

Permite aproximadamente 30 minutos para que se complete el lanzamiento de la pila. Puede verificar su progreso en la consola de AWS CloudFormation navegando a la página Stacks y buscando la pila llamada HaystackOpensearch.

Indexar documentos en OpenSearch

Ahora que tenemos un servicio de OpenSearch en funcionamiento, podemos usar la clase OpenSearchDocumentStore para conectarnos a él y escribir nuestros documentos en él.

Para obtener el nombre de host de OpenSearch, ejecute el siguiente comando:

```bash
aws cloudformation describe-stacks --stack-name HaystackOpensearch --query "Stacks[0].Outputs[?OutputKey=='OpenSearchEndpoint'].OutputValue" --output text
```

Primero, exporte lo siguiente:

```bash
export OPENSEARCH_HOST='tu_host_de_opensearch'
export OPENSEARCH_PORT=443
export OPENSEARCH_USERNAME=admin
export OPENSEARCH_PASSWORD=Password123!
```

Luego, puede usar el script opensearch_indexing_pipeline.py para preprocesar e indexar los datos de demostración proporcionados.

Si desea utilizar sus propios datos, modifique el pipeline de indexación en opensearch_indexing_pipeline.py para incluir los pasos de configuración de FileConverter y PreProcessor que necesite.

Implementar el pipeline de pregunta y respuesta aumentada por recuperación

Ahora que tenemos datos indexados en OpenSearch, podemos realizar preguntas y respuestas sobre estos documentos. Para este pipeline RAG, utilizamos el modelo Falcon-40b-instruct que hemos implementado en SageMaker JumpStart.

También tiene la opción de implementar el modelo programáticamente desde un cuaderno Jupyter. Para obtener instrucciones, consulte el repositorio de GitHub.

  1. Busque el modelo Falcon-40b-instruct en SageMaker JumpStart.

  2. Implemente su modelo en SageMaker JumpStart y tome nota del nombre del punto de conexión.

  3. Exporte los siguientes valores:

    ```bash
    export SAGEMAKER_MODEL_ENDPOINT=your_falcon_40b_instruc_endpoint
    export AWS_PROFILE_NAME=your_aws_profile
    export AWS_REGION_NAME=your_aws_region
    ```
  4. Ejecute python rag_pipeline.py.

Esto iniciará una utilidad de línea de comandos que espera la pregunta del usuario. Por ejemplo, preguntemos “¿Cómo puedo instalar la interfaz de línea de comandos de OpenSearch?”

Este resultado se logra porque hemos definido nuestra indicación en Haystack PromptTemplate de la siguiente manera:

```python
question_answering = PromptTemplate(prompt="Dado el contexto, responda la pregunta. Si la respuesta no está contenida en el contexto a continuación, diga 'No lo sé'.\n" 
"Contexto: {join(documents)};\n Pregunta: {query};\n Respuesta: ", output_parser=AnswerParser(reference_pattern=r"Documento\[(\d+)\]"))
```

Personalizaciones adicionales

Puede realizar personalizaciones adicionales en diferentes elementos de la solución, como los siguientes:

  • Los datos – Hemos proporcionado la documentación de OpenSearch y los datos del sitio web como datos de ejemplo. Recuerda modificar el script opensearch_indexing_pipeline.py para que se ajuste a tus necesidades si decides utilizar tus propios datos.
  • El modelo – En este ejemplo, hemos utilizado el modelo Falcon-40b-instruct. Eres libre de implementar y utilizar cualquier otro modelo de Hugging Face en SageMaker. Ten en cuenta que cambiar el modelo probablemente signifique que debes adaptar tu indicación a algo para lo que esté diseñado.
  • La indicación – Para esta publicación, creamos nuestra propia PromptTemplate que instruye al modelo para que responda preguntas basadas en el contexto proporcionado y responda “No lo sé” si el contexto no incluye información relevante. Puedes cambiar esta indicación para experimentar con diferentes indicaciones con Falcon-40b-instruct. También puedes simplemente tomar algunas de nuestras indicaciones del PromptHub.
  • El modelo de incrustación – Para el paso de recuperación, utilizamos un modelo de incrustación ligero: sentence-transformers/all-MiniLM-L12-v2. Sin embargo, también puedes cambiar esto según tus necesidades. Recuerda modificar las dimensiones de incrustación esperadas en tu DocumentStore en consecuencia.
  • El número de documentos recuperados – También puedes elegir jugar con el número de documentos que solicitas que el EmbeddingRetriever recupere para cada consulta. En nuestra configuración, esto se establece en top_k=5. Puedes experimentar con cambiar esta cifra para ver si proporcionar más contexto mejora la precisión de tus resultados.

Preparación para producción

La solución propuesta en esta publicación puede acelerar el tiempo de valor del proceso de desarrollo del proyecto. Puedes construir un proyecto que sea fácil de escalar con el entorno de seguridad y privacidad en la nube de AWS.

Para la seguridad y privacidad, el Servicio de OpenSearch proporciona protección de datos con gestión de identidad y acceso y prevención de proxy confuso entre servicios. Puedes utilizar un control de acceso de usuario detallado para que el usuario solo pueda acceder a los datos a los que está autorizado. Además, SageMaker proporciona configuraciones de seguridad personalizables para el control de acceso, la protección de datos y el registro y monitoreo. Puedes proteger tus datos en reposo y en tránsito con claves de AWS Key Management Service (AWS KMS). También puedes realizar un seguimiento del registro de implementación de modelos de SageMaker o del acceso a puntos finales utilizando Amazon CloudWatch. Para obtener más información, consulta el monitoreo de Amazon SageMaker con Amazon CloudWatch.

Para la alta escalabilidad en el Servicio de OpenSearch, puedes ajustarlo dimensionando tus dominios de OpenSearch y utilizando las mejores prácticas operativas. También puedes aprovechar el escalado automático de tu punto final de SageMaker: puedes ajustar automáticamente los modelos de SageMaker para adaptar el punto final tanto cuando aumenta el tráfico como cuando los recursos no se están utilizando.

Limpieza

Para ahorrar costos, elimina todos los recursos que implementaste como parte de esta publicación. Si lanzaste la pila de CloudFormation, puedes eliminarla a través de la consola de CloudFormation de AWS. De manera similar, puedes eliminar cualquier punto final de SageMaker que hayas creado a través de la consola de SageMaker.

Conclusión

En esta publicación, mostramos cómo construir una aplicación de inteligencia artificial generativa de extremo a extremo para la búsqueda empresarial con RAG utilizando las tuberías de Haystack y el modelo Falcon-40b-instruct de SageMaker JumpStart y OpenSearch Service. El enfoque RAG es fundamental en la búsqueda empresarial porque asegura que las respuestas generadas estén en el dominio y, por lo tanto, mitiga las alucinaciones. Al utilizar las tuberías de Haystack, podemos orquestar aplicaciones LLM compuestas por diferentes componentes como modelos y bases de datos vectoriales. SageMaker JumpStart nos proporciona una solución de implementación de LLM con un solo clic, y utilizamos OpenSearch Service como la base de datos vectorial para nuestros datos indexados. Puedes comenzar a experimentar y construir pruebas de concepto de RAG para tus aplicaciones empresariales de inteligencia artificial generativa, utilizando los pasos descritos en esta publicación y el código fuente disponible en el repositorio de GitHub.

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

¿Quién es Harry Potter? Dentro del método de ajuste fino de Microsoft Research para desaprender conceptos en LLMs

Los modelos de lenguaje grandes (LLMs) se entrenan regularmente con grandes cantidades de datos no etiquetados, lo qu...

Inteligencia Artificial

Una nueva investigación de IA de Italia presenta un modelo generativo basado en difusión capaz tanto de la síntesis musical como de la separación de fuentes

Los seres humanos son capaces de procesar varias fuentes de sonido al mismo tiempo, tanto en términos de composición ...

Inteligencia Artificial

Crea e implementa aplicaciones de inferencia de ML desde cero utilizando Amazon SageMaker

A medida que el aprendizaje automático (ML) se vuelve más popular y es cada vez más adoptado, las aplicaciones de inf...

Inteligencia Artificial

Conoce a PoisonGPT Un método de IA para introducir un modelo malicioso en una cadena de suministro de LLM de otra manera confiable

En medio de todo el revuelo en torno a la inteligencia artificial, las empresas están comenzando a darse cuenta de la...