Este repositorio aloja un código de muestra que admite el código de información 2024 Talk con ID de sesión DAP341. El código en este repositorio es intencionalmente simple de optimizar para la legibilidad durante la sesión, y no está destinado a su uso en una configuración de producción.
El objetivo del código en este repositorio es demostrar el núcleo funcional de un chatbot de generación aumentada (RAG) de recuperación, al tiempo que destaca algunas de las consideraciones de protección de datos relevantes para las cargas de trabajo generativas de IA en general.
Si desea implementar un caso de uso de estilo de chatbot de trapo con AWS en producción, considere una de las siguientes opciones:
Este repositorio contiene una serie de "scripts" de Python que se pueden ejecutar para demostrar una serie de ideas. Los scripts están numerados porque, cuando se ejecutan secuencialmente, cuentan una historia sobre cómo funciona un chatbot de trapo y cómo los datos pueden protegerse dentro de una carga de trabajo basada en Genai. Sin embargo, los scripts son todos independientes e idempotentes y no necesitan ejecutarse secuencialmente.
Algunos de los scripts de Python proporcionados aquí deben modificarse antes de que se ejecuten. Los scripts se almacenan aquí exactamente como se muestran en la presentación Re: Inforce para consistencia. Las instancias en las que debe actualizar el script se anotan con #UPDATE_TO_RUN_YOURSELF .
Los recursos de AWS requeridos para ejecutar los scripts de ejemplo de Python, por ejemplo, un índice de Amazon Kendra, datos de ejemplo, etc., pueden ser proporcionados por el usuario de este repositorio, pero a continuación hay instrucciones sobre cómo se podrían crear estos recursos.
Los principales recursos de AWS que deben crearse y referenciarse antes de que los scripts de Python funcionen son un índice de Amazon Kendra y una fuente de datos Kendra que acompaña a los datos en un cubo de Amazon S3. Tenga en cuenta que un índice de Amazon Kendra tiene un costo no desplegable, y se debe tener cuidado para comprender esos costos antes de implementar esta solución.
El código proporcionado en este repositorio está destinado a ser complementario a una implementación del generador de aplicaciones AI generativas en AWS. Si implementa el generador de aplicaciones de IA generativos en AWS y continúa a implementar una implementación de casos de uso de "texto" con la opción "RAG" habilitada, se puede crear un índice Kendra para usted como se muestra en la siguiente sección:
Implemente el generador de aplicaciones AI generador en la solución AWS según la guía de implementación.
En lo que respecta a la protección de datos, considere implementar la solución con la opción VPC habilitada, lo que minimiza el flujo del tráfico a través de Internet público al aprovechar los puntos finales VPC.
Después de implementar el tablero de implementación, podrá implementar un caso de uso.
Al implementar un caso de uso, seleccione la opción text . En la sección Select knowledge base , seleccione yes a la opción RAG, elija Kendra como base de conocimiento y, si aún no tiene un índice Kendra, seleccione no para "¿Tiene un índice Kendra existente?" para que uno cree uno para ti. Todos los demás valores predeterminados están bien, pero ajuste si es necesario para satisfacer sus necesidades.
Una vez que se implementa su generador de aplicaciones de IA generativos, tendrá un índice de Amazon Kendra. Ahora debe agregar una fuente de datos de Kendra a ese índice. Primero, cree o reutilice un cubo de Amazon S3 existente para almacenar datos. Cargue el contenido del directorio data , así como el src/kendra-acl.json en este repositorio a ese cubo S3 de modo que la estructura resultante se vea así:
engineering/rootrunner3k-techspecs.txt
wiki/ecorobopotato.txt
kendra-acl.json
Navegue a su índice de Amazon Kendra en la consola de administración de AWS y elija la opción Add Data Sources . Elija la opción Amazon S3 connector . Dé un nombre a la fuente de datos. Cree un rol de IAM o use uno existente como desee. En Configure sync settings , ingrese la ubicación de su cubo S3, establezca el archivo kendra-acl.json en la configuración Access control list configuration file location , amplíe Additional configuration y agregue engineering y marketing como prefijos a indexar. Todos los demás valores predeterminados son suficientes para crear e implementar su fuente de datos de Kendra. Una vez que se crea la fuente de datos, debe iniciar una operación sync de fuente de datos al menos una vez, y esperar a que esa sincronización se complete antes de ejecutar cualquier script de Python.
Antes de que pueda llamar a cualquier modelo de roca madre de Amazon, debe habilitar el acceso al modelo. Este repositorio utiliza el soneto Claude 3, por lo que al menos este modelo debe estar habilitado.
Para ejecutar específicamente el archivo CloudWatch Python, debe habilitar el registro de invocación del modelo de rock de Amazon, específicamente con un destino de registros de Amazon CloudWatch.
Como parte de este proceso, creará un grupo de registros de CloudWatch, que debe actualizarse en el script de Python que lo acompaña.
Para ejecutar los scripts de Python relacionados con las barandillas de roca madre, debe crear una barandilla. Para hacerlo utilizando la consola de administración de AWS, navegue hasta el servicio de roca madre de Amazon y seleccione la sección BuardRails. Elija Create guardrail . Déle un nombre y configúrelo con valores predeterminados o las opciones que prefiera. Sin embargo, asegúrese de que en la sección Add sensitive information filters , agregue el tipo de PII Address y seleccione Mask como comportamiento de barandilla. Esto asegura que su barandilla replicará el comportamiento que está destinado a demostrarse en los scripts de Python en este proyecto.
Los archivos de Markdown, las imágenes y el archivo de código Python en el directorio src están destinados a ser vistos y ejecutados en el orden especificado por su esquema de numeración. De la siguiente manera, es una explicación para cada archivo para ayudar a guiar al lector a través de la intención de la presentación que acompaña a estas muestras de código.
Da el punto principal de estos fragmentos de código, que es mostrarle un código Python muy simplificado que es legible y demuestra cómo el RAG funciona en un nivel básico, al tiempo que resalta las consideraciones de protección de datos para las cargas de trabajo de Genai de manera más amplia.
Imagen utilizada para introducir el producto y organización nocional cuyos datos estamos utilizando. Los datos son intencionalmente absurdos para que LLM no tenga accidentalmente ningún datos de capacitación relacionados con este producto u organización nocional. Sin embargo, dado que este repositorio que lo acompaña ahora es de código abierto, es posible que un LLM eventualmente use este repositorio como fuente de datos de capacitación, ¡lo que eventualmente puede romper esta suposición!
Simplemente muestra el contenido del cubo de Amazon S3 que configuramos que contiene nuestros datos de origen. También destaca el tipo de cifrado para estos datos sobre S3 para enfatizar la importancia de encriptar los datos en reposo.
Imprime parte de la información básica sobre nuestro índice de Amazon Kendra para introducir el concepto de Kendra y cómo puede realizar búsquedas semánticas contra nuestras fuentes de datos.
Demuestra una simple llamada API retrieve contra nuestro índice Kendra, que recupera el contexto en función de la pregunta que hacemos.
Llama a Amazon Bedrock y hace una pregunta no relacionada con nuestros datos de propiedad nocional. Esto tiene la intención de demostrar cómo un LLM puede responder muchas preguntas sobre cosas que están disponibles públicamente, porque los LLM a menudo se capacitan en grandes cantidades de datos raspados de Internet abierto.
Llama a Bedrock y hace una pregunta sobre nuestros datos patentados. Demuestra cómo un LLM no puede responder preguntas sobre datos que son propietarios y que no han sido parte de su conjunto de datos de capacitación.
Primero llama a Kendra a recuperar el contexto relevante de nuestros datos propietarios, y luego utiliza ese contexto al llamar a un LLM en Amazon Bedrock. Este patrón se llama generación de recuperación aumentada, o trapo.
Agrega en la lista de control de acceso en la llamada a Amazon Kendra. Debido a que nuestro grupo de "marketing" no puede acceder al documento de especificaciones técnicas de Kendra, nuestra respuesta no incluye detalles sobre el contenido que el marketing no está autorizado a ver. Esto demuestra cómo podemos lograr la autorización a nivel de documento cuando utilizan un enfoque basado en RAG. Vale la pena señalar que si usa sus datos propietarios para realizar un ajuste fino o continuo previo para personalizar un LLM, pierde esa capacidad de hacer una autorización de grano fino a nivel de documento; Sus usuarios tienen acceso a ese modelo personalizado o no lo hacen.
Realiza una consulta de trapo que incluye una dirección específica. Pero tal vez no queremos que las direcciones u otros tipos de PII o contenido sensible/dañino se incluyan en nuestro chatbot ...
Simplemente enumera nuestros atributos de una barandilla de roca madre de Amazon precedida que usaremos en el siguiente paso. Específicamente, vemos que nuestra barandilla redacta los tipos de datos de dirección.
Realiza la misma llamada a base de trapo como 09_rag_address.py, pero agrega en la barandilla de roca como parte de la llamada a la roca madre. Esto a su vez redacta los datos de la dirección específicos de la respuesta de la respuesta.
Enumera 3 instancias recientes de CloudTrail de invocar Bedrock. Esto simplemente demuestra cómo CloudTrail puede ser B para auditar el uso del servicio de roca madre de Amazon. Otros servicios de AWS también generan eventos de CloudTrail, y estos datos se pueden utilizar para auditar y proteger sus recursos de AWS.
Enumera 3 registros recientes de invocación del modelo CloudWatch. Esto demuestra cómo sus datos pueden incluirse en los registros de invocación del modelo CloudWatch. Por lo tanto, si habilita los registros de invocación de modelos, debe protegerlos con el mismo nivel de atención que protege la fuente de datos en sí.
Después de ejecutar los scripts de Python, habrá sido guiado a través de algunos ejemplos que demuestran consideraciones de protección de datos para cargas de trabajo generativas de IA. Algunas de las cosas clave son:
Los conceptos básicos de protección de datos aún se aplican.
La IA generativa presenta algunas consideraciones nuevas
Ver contribuyendo para más información.
Esta biblioteca tiene licencia bajo la licencia MIT-0. Ver el archivo de licencia.