Foundational LLM Chat est une application Chainlit construite à l'aide d'AWS CDK et de l'API Converse qui vous permet d'interagir avec le modèle de langage Amazon Bedrock. Il fournit une interface conviviale pour discuter avec les LLM d'Amazon Bedrock, télécharger des images ou des documents et recevoir des réponses multimodales. L'application est déployée sur AWS à l'aide de divers services tels qu'Amazon Bedrock, Amazon Elastic Container Service, Amazon Cognito, Amazon CloudFront, etc.
Le diagramme d'architecture illustre le déploiement AWS de l'application Foundational LLM Chat. Les utilisateurs interagissent avec l'application via une interface Web sécurisée par l'authentification Amazon Cognito. L'application est distribuée mondialement à l'aide du CDN d'Amazon CloudFront. Dans une région AWS spécifique, l'application est déployée sur plusieurs zones de disponibilité à l'aide d'Amazon ECS pour le déploiement conteneurisé. Le backend s'intègre à Amazon Bedrock pour exploiter divers modèles de langage, permettant aux utilisateurs d'engager des conversations multimodales avec l'assistant IA.
L'application est configurée via un fichier config.json
dans le dossier ./bin
. Les principales options de configuration incluent :
default_system_prompt
: ce champ contient l'invite système par défaut qui sera utilisée par le chatbot si elle n'est pas spécifiée ci-dessous dans le champ bedrock_models
. Il définit les instructions initiales et le comportement de l'assistant IA. Vous pouvez modifier cette valeur pour changer le personnage ou l'invite initiale de l'assistant.
max_characters_parameter
: Ce champ spécifie le nombre maximum de caractères autorisés dans le texte saisi. S'il est défini sur la chaîne "None"
, il n'y a pas de limite de caractères. Vous pouvez modifier cette valeur pour limiter la longueur du texte saisi si vous le souhaitez.
max_content_size_mb_parameter
: Ce champ définit la taille maximale du contenu d'entrée (par exemple, les images) en mégaoctets. S'il est défini sur la chaîne "None"
, il n'y a pas de limite de taille. Vous pouvez modifier cette valeur pour restreindre la taille maximale du contenu d'entrée.
default_aws_region
: ce champ spécifie la région AWS où l'application est déployée. Vous pouvez également définir une région pour chaque champ de modèle Amazon Bedrock.
prefix
: Ce champ vous permet de définir un préfixe pour les noms de ressources créés par l'application. Vous pouvez le laisser vide ou fournir un préfixe personnalisé si vous le souhaitez.
Ce champ contient un dictionnaire des modèles Bedrock que le chatbot peut utiliser. Chaque modèle est identifié par une clé (par exemple, « Sonnet », « Haiku ») et la clé est le nom utilisé dans le profil Chainlit Chat. Chaque modèle possède au minimum les propriétés suivantes :
id
: l'ID ou l'ARN du modèle Amazon Bedrock. Vous pouvez trouver les ID de modèle disponibles dans la documentation AWS.region
: un tableau de régions utilisées pour accéder au modèle. Un si vous n’avez pas activé l’inférence inter-régions, plusieurs pour l’inférence inter-régions.Les paramètres de configuration facultatifs incluent :
inference_profile
: paramètres pour l'inférence inter-régionsprefix
: préfixe de région (par exemple, "nous")region
: région d'inférence principalesystem_prompt
: invite système personnaliséecost
: informations sur les prixinput_1k_price
: Le coût (en USD) de 1 000 jetons d'entrée. Vous pouvez trouver les informations de tarification pour différents modèles sur la page de tarification d'AWS Bedrock.output_1k_price
: Le coût (en USD) de 1 000 jetons de sortie.vision
[facultatif] : vrai ou faux. Si les fonctionnalités de vision sont activées pour le modèle.document
[facultatif] : vrai ou faux. Si les fonctionnalités de document sont activées](https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference.html) pour le modèle.tool
[facultatif] : vrai ou faux. Si les fonctionnalités des outils sont activées](https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference.html) pour le modèle.default
[facultatif] : vrai ou faux. Le modèle sélectionné par défaut Vous pouvez modifier la section bedrock_models
pour inclure des modèles supplémentaires ou mettre à jour ceux existants en fonction de vos besoins.
Voici un exemple de la façon de récupérer l'ID du modèle et les informations de prix :
Pour trouver l'ID ou l'ARN du modèle, reportez-vous à la documentation des ID de modèle AWS Bedrock. Par exemple, l'ID du modèle Claude 3 Sonnet est anthropic.claude-3-sonnet-20240229-v1:0
.
Pour trouver les informations de tarification, reportez-vous à la documentation sur la tarification d'AWS Bedrock. Pour le modèle Claude 3 Sonnet, la tarification des entrées et sorties est la suivante :
Après avoir apporté les modifications souhaitées au fichier config.json
, vous pouvez procéder au déploiement comme décrit dans le README.
Voici un exemple du 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
}
}
}
L'application exploite Amazon Bedrock Prompt Manager pour :
Actuellement, l'application prend en charge 2 substitutions automatiques de variables :
%Y-%m-%d
du jour ;%Y-%m-%d %H:%M:%S UTC
vous pouvez modifier la fonction extract_and_process_prompt
dans chainlit_image/foundational-llm-chat_app/massages_utils.py
pour ajouter des substitutions plus directes.
L'application utilise l'API Converse d'Amazon Bedrock, fournissant :
Toutes les invites système sont stockées et gérées via Amazon Bedrock Prompt Manager, offrant :
Lorsque vous utilisez des invites système pour configurer le comportement des modèles de langage, il est crucial de prendre en compte les implications en matière de sécurité et de prendre des mesures pour éviter toute utilisation abusive ou vulnérabilité potentielle. Un risque important est l'injection d'invites , où des entrées malveillantes pourraient manipuler l'invite du système de manière involontaire, conduisant potentiellement à des sorties nuisibles ou biaisées.
Un bon point de départ est le guide suivant : Atténuation des jailbreaks et injections rapides.
L'ingénierie des invites fait référence à la pratique consistant à élaborer soigneusement des invites ou des instructions pour guider les modèles de langage dans la génération des résultats souhaités. Une ingénierie rapide et efficace est cruciale pour garantir que les modèles de langage comprennent et répondent de manière appropriée au contexte et à la tâche donnés.
Le cours suivant est destiné à vous fournir une compréhension complète, étape par étape, de la façon de concevoir des invites optimales dans Claude, à l'aide de Bedrock : Ingénierie des invites avec Anthropic Claude v3.
Ce guide couvre diverses techniques et bonnes pratiques pour une ingénierie rapide à travers une série de leçons et d'exercices, organisés en trois niveaux : Débutant, Intermédiaire et Avancé.
En suivant les principes et techniques décrits dans ce guide, vous pouvez améliorer les performances et la fiabilité de vos applications de modèle de langage, en garantissant que l'assistant IA génère des réponses plus pertinentes, cohérentes et contextuelles.
Nous vous recommandons de déployer avec AWS Cloud9. Si vous souhaitez utiliser Cloud9 pour déployer la solution, vous aurez besoin des éléments suivants avant de continuer :
m5.large
comme type d'instance.Amazon Linux 2023
comme plate-forme. Si vous avez décidé de ne pas utiliser AWS Cloud9, vérifiez que votre environnement satisfait aux conditions préalables suivantes :
Vérifiez que votre environnement satisfait aux conditions préalables suivantes :
Tu as:
Un compte AWS
Une stratégie d'accès qui vous permet de créer des ressources contenues dans l'exemple AWS
Accès console et programmatique
NodeJS est installé
nvm
vous pouvez exécuter ce qui suit avant de continuer nvm install --lts
NPM lts installé
nvm
vous pouvez exécuter ce qui suit avant de continuer nvm install-latest-npm
AWS CLI installé et configuré pour être utilisé avec votre compte AWS
AWS CDK CLI installé
Finch installé ou Docker installé
Activer l'accès aux modèles Amazon Bedrock dans la région de déploiement : Comment activer l'accès aux modèles Amazon Bedrock.
Activez au moins l'un des :
Clonez le référentiel, ouvrez le dossier, installez les dépendances :
git clone https://github.com/aws-samples/foundational-llm-chat.git
cd foundational-llm-chat
npm install
[Facultatif uniquement si vous ne l'avez pas déjà fait dans la région de déploiement] Amorcez l'environnement CDK :
cdk bootstrap
Créez et déployez la pile :
cdk deploy --region YOUR_DEPLOY_REGION
où YOUR_DEPLOY_REGION est la région AWS dans laquelle vous souhaitez déployer l'application. Par exemple : us-west-2
.
Si vous utilisez Finch au lieu de Docker, veuillez ajouter CDK_DOCKER=finch
au début de la commande, comme dans l'exemple suivant :
CDK_DOCKER=finch cdk deploy --region us-west-2
Cela créera toutes les ressources nécessaires sur AWS, y compris le cluster ECS, le pool d'utilisateurs Cognito, la distribution CloudFront, etc.
Une fois le déploiement terminé, l'URL de distribution CloudFront sera affichée dans le terminal. Utilisez cette URL pour accéder à l'application Foundational-llm-chat.
Après le déploiement, vous obtiendrez quelque chose de similaire à ceci :
✅ 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 distribution Amazon CloudFront est indiquée dans la ligne suivante : FoundationalLlmChatStack.NetworkingFoundationalLlmChat = CLOUDFRONT_DISTRIBUTION_ADDRESS
foundational-llm-chat-user-pool
. Ouvrez ce pool d'utilisateurs et créez un utilisateur vérifiant également l'adresse e-mail ;Pour éviter d'engager des coûts inutiles, il est recommandé de nettoyer et de supprimer les ressources créées par cet exemple lorsque vous avez fini de les utiliser. Suivez ces étapes pour supprimer la pile et les ressources associées :
Foundational-LLM-ChatStack
.Cela supprimera l'intégralité de la pile, y compris le cluster ECS, le pool d'utilisateurs Cognito, la distribution CloudFront et toutes les autres ressources associées.
Vous pouvez également utiliser le AWS CDK pour supprimer la pile de la ligne de commande :
cdk destroy --region YOUR_DEPLOY_REGION
Remplacez YOUR_DEPLOY_REGION
par la région AWS où vous avez déployé l'application.
Notez que la suppression de la pile ne supprimera pas automatiquement les journaux CloudWatch et la définition de tâche Amazon ECS créés lors du déploiement. Vous souhaiterez peut-être supprimer manuellement ces ressources si vous n’en avez plus besoin pour éviter d’engager des coûts supplémentaires.
Bien que l'architecture actuelle constitue un bon point de départ pour le déploiement de l'application Foundational LLM Chat, il existe des considérations supplémentaires pour un déploiement prêt pour la production :
Dans l'architecture actuelle, la communication entre la distribution CloudFront et l'Application Load Balancer (ALB) s'effectue via HTTP. Pour un déploiement en production, il est fortement recommandé d'utiliser HTTPS (TLS/SSL) pour une communication sécurisée :
L'activation de HTTPS avec terminaison TLS aux deux niveaux (tâches ALB et ECS) garantit le cryptage de bout en bout et améliore la sécurité de l'application.
Cet exemple AWS est destiné uniquement à des fins de démonstration et d'éducation. Il n’est pas conçu pour une utilisation en production sans modifications ni durcissement supplémentaires. Avant de déployer cette application dans un environnement de production, il est essentiel d'effectuer des tests approfondis, des évaluations de sécurité et des optimisations en fonction de vos exigences spécifiques et de vos meilleures pratiques.
Les invites système pour Claude peuvent être obtenues directement à partir de la documentation Anthropic ici : Invites système
Les contributions sont les bienvenues ! Veuillez suivre le workflow Git habituel :
Cette bibliothèque est sous licence MIT-0. Voir le fichier LICENCE.
Vous devriez envisager de réaliser votre propre évaluation indépendante avant d’utiliser le contenu de cet exemple à des fins de production. Cela peut inclure (entre autres choses) le test, la sécurisation et l'optimisation du contenu fourni dans cet exemple, en fonction de vos pratiques et normes de contrôle qualité spécifiques.