Foundational LLM Chat es una aplicación Chainlit creada con AWS CDK y Converse API que le permite interactuar con el modelo de lenguaje Amazon Bedrock. Proporciona una interfaz fácil de usar para chatear con los LLM de Amazon Bedrock, cargar imágenes o documentos y recibir respuestas multimodales. La aplicación se implementa en AWS utilizando varios servicios como Amazon Bedrock, Amazon Elastic Container Service, Amazon Cognito, Amazon CloudFront y más.
El diagrama de arquitectura ilustra la implementación de AWS de la aplicación Foundational LLM Chat. Los usuarios interactúan con la aplicación a través de una interfaz web protegida por la autenticación de Amazon Cognito. La aplicación se distribuye globalmente mediante la CDN de Amazon CloudFront. Dentro de una región de AWS específica, la aplicación se implementa en varias zonas de disponibilidad mediante Amazon ECS para la implementación en contenedores. El backend se integra con Amazon Bedrock para aprovechar varios modelos de lenguaje, lo que permite a los usuarios entablar conversaciones multimodales con el asistente de IA.
La aplicación se configura a través de un archivo config.json
en la carpeta ./bin
. Las opciones de configuración clave incluyen:
default_system_prompt
: este campo contiene el mensaje predeterminado del sistema que utilizará el chatbot si no se especifica a continuación en el campo bedrock_models
. Define las instrucciones iniciales y el comportamiento del asistente de IA. Puede modificar este valor para cambiar la personalidad del asistente o el mensaje inicial.
max_characters_parameter
: este campo especifica el número máximo de caracteres permitidos en el texto de entrada. Si se establece en la cadena "None"
, no hay límite de caracteres. Puede cambiar este valor para limitar la longitud del texto de entrada si lo desea.
max_content_size_mb_parameter
: este campo establece el tamaño máximo del contenido de entrada (por ejemplo, imágenes) en megabytes. Si se establece en la cadena "None"
, no hay límite de tamaño. Puede modificar este valor para restringir el tamaño máximo del contenido de entrada.
default_aws_region
: este campo especifica la región de AWS donde se implementa la aplicación. También puede configurar la región para cada campo del modelo de Amazon Bedrock.
prefix
: este campo le permite establecer un prefijo para los nombres de recursos creados por la aplicación. Puede dejarlo vacío o proporcionar un prefijo personalizado si lo desea.
Este campo contiene un diccionario de modelos de Bedrock que el chatbot puede utilizar. Cada modelo se identifica mediante una clave (por ejemplo, "Soneto", "Haiku") y la clave es el nombre utilizado en el perfil de Chat de Chainlit. Cada modelo tiene las siguientes propiedades como mínimo:
id
: El ID o ARN del modelo de Amazon Bedrock. Puede encontrar los ID de modelo disponibles en la documentación de AWS.region
: una serie de regiones utilizadas para acceder al modelo. Uno si no habilitó la inferencia entre regiones, varios para la inferencia entre regiones.Los parámetros de configuración opcionales incluyen:
inference_profile
: Configuración para la inferencia entre regionesprefix
: prefijo de región (p. ej., "nosotros")region
: región de inferencia primariasystem_prompt
: mensaje de sistema personalizadocost
: información de preciosinput_1k_price
: El costo (en USD) de 1000 tokens de entrada. Puede encontrar la información de precios para diferentes modelos en la página de precios de AWS Bedrock.output_1k_price
: El costo (en USD) de 1000 tokens de salida.vision
[opcional] : verdadero o falso. Si las capacidades de visión están habilitadas para el modelo.document
[opcional] : verdadero o falso. Si las capacidades de documentos están habilitadas](https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference.html) para el modelo.tool
[opcional] : verdadero o falso. Si las capacidades de las herramientas están habilitadas](https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference.html) para el modelo.default
[opcional] : verdadero o falso. El modelo seleccionado por defecto Puede modificar la sección bedrock_models
para incluir modelos adicionales o actualizar los existentes según sus requisitos.
A continuación se muestra un ejemplo de cómo recuperar el ID del modelo y la información de precios:
Para encontrar el ID del modelo o el ARN, consulte la documentación de ID de modelo de AWS Bedrock. Por ejemplo, el ID del modelo Claude 3 Sonnet es anthropic.claude-3-sonnet-20240229-v1:0
.
Para encontrar información sobre precios, consulte la documentación de precios de AWS Bedrock. Para el modelo Claude 3 Sonnet, el precio de entrada y salida es el siguiente:
Después de realizar los cambios deseados en el archivo config.json
, puede continuar con la implementación como se describe en el archivo README.
Aquí un ejemplo del json:
{
"default_system_prompt" : " you are an assistant " ,
"max_characters_parameter" : " None " ,
"max_content_size_mb_parameter" : " None " ,
"default_aws_region" : " us-west-2 " ,
"prefix" : " " ,
"bedrock_models" : {
"Claude Sonnet 3.5 New" : {
"system_prompt" : " you are an assistant " ,
"id" : " us.anthropic.claude-3-5-sonnet-20241022-v2:0 " ,
"inference_profile" : {
"prefix" : " us " ,
"region" : " us-west-2 "
},
"region" : [ " us-east-1 " , " us-west-2 " , " us-east-2 " ],
"cost" : {
"input_1k_price" : 0.003 ,
"output_1k_price" : 0.015
},
"default" : true ,
"vision" : true ,
"document" : true ,
"tool" : true
},
"Meta Llama 3.2 90B Vision Instruct" : {
"id" : " us.meta.llama3-2-90b-instruct-v1:0 " ,
"inference_profile" : {
"prefix" : " us " ,
"region" : " us-west-2 "
},
"region" : [ " us-east-1 " , " us-west-2 " ],
"cost" : {
"input_1k_price" : 0.002 ,
"output_1k_price" : 0.002
},
"vision" : true ,
"document" : true ,
"tool" : true
},
"Mistral Large 2" : {
"id" : " mistral.mistral-large-2407-v1:0 " ,
"cost" : {
"input_1k_price" : 0.003 ,
"output_1k_price" : 0.009
},
"vision" : false ,
"document" : true ,
"tool" : true
}
}
}
La aplicación aprovecha Amazon Bedrock Prompt Manager para:
Actualmente la aplicación admite 2 sustituciones automáticas de variables:
%Y-%m-%d
del día;%Y-%m-%d %H:%M:%S UTC
puede editar la función extract_and_process_prompt
dentro de chainlit_image/foundational-llm-chat_app/massages_utils.py
para agregar más sustituciones directas.
La aplicación utiliza la API Converse de Amazon Bedrock y proporciona:
Todas las indicaciones del sistema se almacenan y administran a través de Amazon Bedrock Prompt Manager y ofrecen:
Cuando se utilizan indicaciones del sistema para configurar el comportamiento de los modelos de lenguaje, es fundamental considerar las implicaciones de seguridad y tomar medidas para evitar posibles usos indebidos o vulnerabilidades. Un riesgo importante es la inyección rápida , donde entradas maliciosas podrían manipular el aviso del sistema de manera no deseada, lo que podría generar resultados dañinos o sesgados.
Un buen punto de partida es la siguiente guía: Mitigar jailbreaks e inyecciones rápidas.
La ingeniería de indicaciones se refiere a la práctica de elaborar cuidadosamente indicaciones o instrucciones para guiar los modelos de lenguaje en la generación de los resultados deseados. La ingeniería rápida eficaz es crucial para garantizar que los modelos de lenguaje comprendan y respondan adecuadamente al contexto y la tarea dados.
El siguiente curso está destinado a brindarle una comprensión integral paso a paso de cómo diseñar mensajes óptimos dentro de Claude, utilizando Bedrock: Ingeniería de mensajes con Anthropic Claude v3.
Esta guía cubre varias técnicas y mejores prácticas para la ingeniería rápida a través de una serie de lecciones y ejercicios, organizados en tres niveles: principiante, intermedio y avanzado.
Si sigue los principios y técnicas descritos en esta guía, puede mejorar el rendimiento y la confiabilidad de sus aplicaciones de modelo de lenguaje, asegurando que el asistente de IA genere respuestas más relevantes, coherentes y conscientes del contexto.
Recomendamos implementar con AWS Cloud9. Si desea utilizar Cloud9 para implementar la solución, necesitará lo siguiente antes de continuar:
m5.large
como tipo de instancia.Amazon Linux 2023
como plataforma. Si ha decidido no utilizar AWS Cloud9, verifique que su entorno cumpla con los siguientes requisitos previos:
Verifique que su entorno cumpla los siguientes requisitos previos:
Tienes:
Una cuenta de AWS
Una política de acceso que le permite crear recursos contenidos en el ejemplo de AWS
Acceso tanto a consola como programático
NodeJS está instalado
nvm
puede ejecutar lo siguiente antes de continuar nvm install --lts
NPM lts instalado
nvm
puede ejecutar lo siguiente antes de continuar nvm install-latest-npm
AWS CLI instalada y configurada para usar con su cuenta de AWS
CLI de AWS CDK instalada
Finch instalado o Docker instalado
Habilite el acceso a los modelos de Amazon Bedrock en la región de implementación: cómo habilitar el acceso a los modelos de Amazon Bedrock.
Habilite al menos uno de:
Clona el repositorio, abre la carpeta, instala las dependencias:
git clone https://github.com/aws-samples/foundational-llm-chat.git
cd foundational-llm-chat
npm install
[Opcional solo si no lo hizo antes en la región de implementación] Arranque el entorno CDK:
cdk bootstrap
Construya e implemente la pila:
cdk deploy --region YOUR_DEPLOY_REGION
donde YOUR_DEPLOY_REGION es la región de AWS en la que desea implementar la aplicación. Por ejemplo: us-west-2
.
Si está utilizando Finch en lugar de Docker, agregue CDK_DOCKER=finch
al comienzo del comando como en el siguiente ejemplo:
CDK_DOCKER=finch cdk deploy --region us-west-2
Esto creará todos los recursos necesarios en AWS, incluido el clúster ECS, el grupo de usuarios de Cognito, la distribución de CloudFront y más.
Una vez completada la implementación, la URL de distribución de CloudFront se mostrará en la terminal. Utilice esta URL para acceder a la aplicación fundacional-llm-chat.
Después de la implementación obtendrás algo similar a esto:
✅ Foundational-LLM-ChatStack
Deployment time: 465.09s
Outputs:
FoundationalLlmChatStack.CognitoUserPool = ID
FoundationalLlmChatStack.NetworkingFoundationalLlmChatChatbotStack = CLOUDFRONT_DISTRIBUTION_ADDRESS
FoundationalLlmChatStack.ecsApplicationFoundationalLlmChatServiceLoadBalancer = ECS_LOAD_BALANCER
FoundationalLlmChatStack.ecsApplicationFoundationalLlmChatServiceServiceURL = ECS_LOAD_BALANCER_ADDRESS
Stack ARN: ARN
Total time: 469.14s
La distribución de Amazon CloudFront se indica en la siguiente línea: FoundationalLlmChatStack.NetworkingFoundationalLlmChat = CLOUDFRONT_DISTRIBUTION_ADDRESS
foundational-llm-chat-user-pool
. Abra este grupo de usuarios y cree un usuario que también verifique la dirección de correo electrónico;Para evitar incurrir en costos innecesarios, se recomienda limpiar y eliminar los recursos creados por este ejemplo cuando termine de usarlos. Siga estos pasos para eliminar la pila y los recursos asociados:
Foundational-LLM-ChatStack
.Esto eliminará toda la pila, incluido el clúster ECS, el grupo de usuarios de Cognito, la distribución de CloudFront y todos los demás recursos asociados.
Alternativamente, puede utilizar AWS CDK para eliminar la pila desde la línea de comando:
cdk destroy --region YOUR_DEPLOY_REGION
Reemplace YOUR_DEPLOY_REGION
con la región de AWS donde implementó la aplicación.
Tenga en cuenta que eliminar la pila no eliminará automáticamente los registros de CloudWatch ni la definición de tarea de Amazon ECS creada durante la implementación. Es posible que desee eliminar manualmente estos recursos si ya no los necesita para evitar incurrir en costos adicionales.
Si bien la arquitectura actual proporciona un buen punto de partida para implementar la aplicación Foundational LLM Chat, existen consideraciones adicionales para una implementación lista para producción:
En la arquitectura actual, la comunicación entre la distribución de CloudFront y el Balanceador de carga de aplicaciones (ALB) se realiza a través de HTTP. Para una implementación de producción, se recomienda encarecidamente utilizar HTTPS (TLS/SSL) para una comunicación segura:
Habilitar HTTPS con terminación TLS en ambos niveles (tareas ALB y ECS) garantiza el cifrado de un extremo a otro y mejora la seguridad de la aplicación.
Este ejemplo de AWS está destinado únicamente a fines educativos y de demostración. No está diseñado para uso en producción sin modificaciones y endurecimiento adicionales. Antes de implementar esta aplicación en un entorno de producción, es fundamental realizar pruebas exhaustivas, evaluaciones de seguridad y optimizaciones basadas en sus requisitos específicos y mejores prácticas.
Las indicaciones del sistema para Claude se pueden obtener directamente de la documentación de Anthropic aquí: Indicaciones del sistema
¡Las contribuciones son bienvenidas! Siga el flujo de trabajo habitual de Git:
Esta biblioteca tiene la licencia MIT-0. Ver el archivo de LICENCIA.
Debería considerar realizar su propia evaluación independiente antes de utilizar el contenido de esta muestra con fines de producción. Esto puede incluir (entre otras cosas) probar, proteger y optimizar el contenido proporcionado en esta muestra, en función de sus prácticas y estándares de control de calidad específicos.