Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Guide d'intégration
L'ensemble de la solution est conçu pour être facilement extensible. La couche d'orchestration de cette solution est construite à l'aide LangChain
Extension prise en charge LLMs
Pour ajouter un autre fournisseur de modèles, tel qu'un fournisseur LLM personnalisé, vous devez mettre à jour les trois composants suivants de la solution :
-
Créez une nouvelle pile
TextUseCaseCDK, qui déploie l'application de chat configurée avec votre fournisseur LLM personnalisé :-
Clonez le GitHub référentiel
de cette solution et configurez votre environnement de génération en suivant les instructions fournies dans le fichier README.md. -
Copiez (ou créez-en un nouveau), collez-le dans le même répertoire et renommez-le en
custom-chat-stack.ts.source/infrastructure/lib/bedrock-chat-stack.ts -
Renommez la classe du fichier en une classe appropriée, telle que
CustomLLMChat. -
Vous pouvez choisir d'ajouter un secret Secrets Manager à cette pile, qui stocke vos informations d'identification pour votre LLM personnalisé. Vous pouvez récupérer ces informations d'identification lors de l'invocation du modèle dans la couche Lambda du chat décrite dans le paragraphe suivant.
-
-
Créez et attachez une couche Lambda contenant la bibliothèque Python du fournisseur de modèles à ajouter. Pour une application de chat utilisant Amazon Bedrock, la bibliothèque
langchain-awsPython contient les connecteurs personnalisés situés au-dessus LangChain du package pour se connecter aux fournisseurs de modèles AWS (Amazon Bedrock et SageMaker AI), aux bases de connaissances (Amazon Kendra et Amazon Bedrock Knowledge Bases) et aux types de mémoire (tels que DynamoDB). De même, les autres fournisseurs de modèles disposent de leurs propres connecteurs. Cette couche vous permet d'associer la bibliothèque Python de ce fournisseur de modèles afin que vous puissiez utiliser ces connecteurs dans la couche Lambda du chat, qui invoque le LLM (étape 3). Dans cette solution, un bundler d'actifs personnalisé est utilisé pour créer des couches Lambda, qui sont attachées à l'aide des aspects CDK. Pour créer une nouvelle couche pour la bibliothèque de fournisseurs de modèles personnalisés, procédez comme suit :-
Accédez à la
LambdaAspectsclasse dans lesource/infrastructure/lib/utils/lambda-aspects.tsfichier. -
Suivez les instructions pour étendre les fonctionnalités de la classe d'aspects Lambda fournie dans le fichier (par exemple en ajoutant la
getOrCreateLangchainLayerméthode). Pour utiliser cette nouvelle méthode (par exemple,getOrCreateCustomLLMLayer), mettez également à jour l'LLM_LIBRARY_LAYER_TYPESénumération dans lesource/infrastructure/lib/utils/constants.tsfichier.
-
-
Étendez la fonction
chatLambda pour implémenter un générateur, un client et un gestionnaire pour le nouveau fournisseur.source/lambda/chatIl contient les LangChain connexions pour les différentes classes LLMs ainsi que les classes de support pour les créer LLMs. Ces classes de support suivent les modèles de conception orientés Builder et Object pour créer le LLM.Chaque gestionnaire (par exemple
bedrock_handler.py) crée d'abord un client, vérifie les variables d'environnement requises dans l'environnement, puis appelle uneget_modelméthode pour obtenir la classe LangChain LLM. La méthode generate est ensuite appelée pour invoquer le LLM et obtenir sa réponse. LangChain prend actuellement en charge la fonctionnalité de streaming pour Amazon Bedrock, mais pas l' SageMaker IA. Sur la base d'une fonctionnalité de streaming ou non, le WebSocket gestionnaire approprié (WebsocketStreamingCallbackHandlerouWebsocketHandler) est appelé pour renvoyer la réponse à la WebSocket connexion à l'aide de lapost_to_connectionméthode.Le
clients/builderdossier contient les classes qui aident à créer un générateur LLM à l'aide du modèle Builder. Tout d'abord, ause_case_configest extrait d'un magasin de configurations DynamoDB, qui contient les informations relatives au type de base de connaissances, de mémoire de conversation et de modèle à construire. Il contient également les détails pertinents du modèle, tels que les paramètres du modèle et les instructions. Le générateur aide ensuite à suivre les étapes de création d'une base de connaissances, de création d'une mémoire de conversation pour maintenir le contexte de conversation pour le LLM, de définition des LangChain rappels appropriés pour les cas de streaming et de non-streaming, et de création d'un modèle LLM basé sur les configurations de modèle fournies. La configuration DynamoDB est stockée au moment de la création des cas d'utilisation lorsque vous déployez un cas d'utilisation à partir du tableau de bord de déploiement (ou lorsqu'il est fourni par les utilisateurs dans le cadre de déploiements de pile de cas d'utilisation autonomes sans le tableau de bord de déploiement).Le
clients/factoriessous-dossier permet de définir la mémoire de conversation et la classe de base de connaissances appropriées, en fonction de la configuration LLM. Cela permet une extension facile à toute autre base de connaissances ou à tout autre type de mémoire que vous souhaitez que votre implémentation prenne en charge.Le
sharedsous-dossier contient des implémentations spécifiques de la base de connaissances et de la mémoire de conversation qui sont instanciées dans les usines par le constructeur. Il contient également des récupérateurs de la base de connaissances Amazon Kendra et Amazon Bedrock appelés pour récupérer des documents relatifs LangChain aux cas d'utilisation du RAG, ainsi que des rappels, utilisés par le modèle LLM. LangChainLes LangChain implémentations utilisent le langage LangChain d'expression (LCEL) pour composer ensemble des chaînes de conversation.
RunnableWithMessageHistoryLa classe est utilisée pour conserver l'historique des conversations avec des chaînes LCEL personnalisées, permettant des fonctionnalités telles que le renvoi de documents sources et l'utilisation de la question reformulée (ou désambiguïsée) envoyée à la base de connaissances pour être également envoyée au LLM.Pour créer votre propre implémentation d'un fournisseur personnalisé, vous pouvez :
-
Copiez le
bedrock_handler.pyfichier et créez votre gestionnaire personnalisé (par exemple,custom_handler.py), qui crée votre client personnalisé (par exemple,CustomProviderClient) (spécifié à l'étape suivante). -
Copiez
bedrock_client.pydans le dossier des clients. Renommez-le encustom_provider_client.py(ou renommez-le en votre nom de fournisseur de modèles spécifique, par exempleCustomProvider). Nommez la classe qu'elle contient de manière appropriée, par exempleCustomProviderClientqui hériteLLMChatClient.Vous pouvez utiliser les méthodes fournies par
LLMChatClientou écrire vos propres implémentations pour les remplacer.La
get_modelméthode crée unCustomProviderBuilder(voir l'étape suivante) et appelle laconstruct_chat_modelméthode qui construit le modèle de chat à l'aide des étapes du générateur. Cette méthode agit en tant que directeur dans le modèle de générateur. -
Copiez-le
clients/builders/bedrock_builder.pyet renommez-le encustom_provider_builder.pyainsiCustomProviderBuilderque la classe qu'il contient en héritant LLMBuilder ()llm_builder.py. Vous pouvez utiliser les méthodes fournies par LLMBuilder ou écrire vos propres implémentations pour les remplacer. Les étapes du générateur sont appelées en séquence dans laconstruct_chat_modelméthode du client, telles queset_model_defaultsset_knowledge_base, etset_conversation_memory.La
set_llm_modelméthode créerait le modèle LLM réel en utilisant toutes les valeurs définies à l'aide des méthodes appelées auparavant. Plus précisément, vous pouvez créer un LLM RAG (CustomProviderRetrievalLLM) ou non RAG (CustomProviderLLM), sur la base derag_enabled variablece qui est extrait de la configuration LLM dans DynamoDB.Cette configuration est récupérée dans la
retrieve_use_case_configméthode de laLLMChatClientclasse. -
Implémentez votre
CustomProviderRetrievalLLMimplémentationCustomProviderLLMou son implémentation dans lellm_modelssous-dossier selon que vous avez besoin d'un cas d'utilisation RAG ou non. La plupart des fonctionnalités permettant d'implémenter ces modèles sont fournies dans leursRetrievalLLMclassesBaseLangChainModelet respectivement, pour les cas d'utilisation autres que RAG et RAG.Vous pouvez copier le
llm_models/bedrock.pyfichier et apporter les modifications nécessaires pour appeler le LangChain modèle qui fait référence à votre fournisseur personnalisé. Par exemple, Amazon Bedrock utilise uneChatBedrockclasse pour créer un modèle de chat en utilisant LangChain.La méthode generate génère la réponse LLM à l'aide des chaînes LangChain LCEL.
Vous pouvez également utiliser
get_clean_model_paramscette méthode pour nettoyer les paramètres du modèle conformément LangChain aux exigences de votre modèle.
-
Extension des outils Strands pris en charge
La solution vous permet de créer et de déployer des serveurs MCP, des agents d'intelligence artificielle et des flux de travail multi-agents. Dans le cadre de l'expérience Agent Builder, vous pouvez associer des serveurs MCP pour offrir à vos agents des fonctionnalités supplémentaires. Outre les serveurs MCP, vous pouvez tirer parti des outils intégrés fournis par Strands
Prête à l'emploi, la solution est préconfigurée avec les outils Strands suivants :
-
Heure actuelle (activée par défaut)
-
Calculatrice (activée par défaut)
-
Environnement
Sélection du serveur et des outils MCP dans l'assistant Agent Builder affichant les outils Strands intégrés
Pour étendre à vos agents des outils Strands supplémentaires, suivez le processus en quatre étapes décrit dans cette section.
Étape 1 : Trouvez l'outil Strands
Parcourez les outils Strands disponibles
Par exemple, pour ajouter les fonctionnalités de récupération de la base de connaissances Amazon Bedrock, vous devez utiliser l'outil de récupération
Étape 2 : mise à jour du paramètre SSM
Pour rendre un outil disponible dans l'interface utilisateur de déploiement d'Agent Builder, mettez à jour le paramètre AWS Systems Manager Parameter Store qui définit les outils Strands pris en charge.
-
Accédez au AWS Systems Manager Parameter Store dans votre compte AWS.
-
Localisez le paramètre :
/gaab/<stack-name>/strands-tools -
Ajoutez la configuration de votre outil à la fin de la liste existante à l'aide de la structure JSON suivante :
{ "name": "Bedrock KB Retrieve", "description": "Retrieve information from Bedrock Knowledge Base", "value": "retrieve", "category": "AI", "isDefault": false }Champ Description nom
Nom d'affichage affiché dans l'interface utilisateur d'Agent Builder
description
Brève description des fonctionnalités de l'outil
valeur
Le nom exact de l'outil tel que défini dans le package d'outils Strands
category
Catégorie organisationnelle pour le regroupement des outils dans l'interface utilisateur
est par défaut
Si l'outil doit être activé par défaut pour les nouveaux agents
Étape 3 : Configuration des variables d'environnement
De nombreux outils Strands nécessitent des variables d'environnement pour la configuration. Vous pouvez définir ces variables de deux manières :
Option 1 : Configuration directe sur AgentCore Runtime
Mettez à jour l'agent déployé directement sur Amazon Bedrock AgentCore Runtime avec les variables d'environnement requises.
Option 2 : paramètres du modèle dans l'assistant de déploiement
Ajoutez des variables d'environnement lors de l'étape de sélection du modèle dans l'assistant Agent Builder à l'aide de la section Paramètres du modèle. Les variables d'environnement qui suivent la convention de dénomination ENV_<ALL_CAPS_TOOL_NAME>_<env_variable_name> seront automatiquement chargées au moment de l'exécution dans l'environnement d'exécution de l'agent en tant que<env_variable_name>.
Par exemple :
-
ENV_RETRIEVE_KNOWLEDGE_BASE_IDdevientKNOWLEDGE_BASE_ID -
ENV_RETRIEVE_MIN_SCOREdevientMIN_SCORE
Section des paramètres avancés du modèle montrant la configuration ENV_RETRIEVE_KNOWLEDGE_BASE_ID
Reportez-vous à la documentation ou au code source de l'outil spécifique pour identifier les variables d'environnement requises. Pour l'outil de récupération, vous trouverez les options de configuration dans le code source
Étape 4 : Ajouter des autorisations IAM
Ajoutez manuellement les autorisations IAM nécessaires à votre rôle AgentCore d'exécution Runtime pour permettre à l'agent d'utiliser l'outil.
Par exemple, pour utiliser l'outil de récupération avec les bases de connaissances Amazon Bedrock :
-
Accédez à la console IAM dans votre compte AWS.
-
Localisez le rôle AgentCore d'exécution Runtime pour votre agent.
-
Ajoutez l'autorisation suivante :
{ "Effect": "Allow", "Action": "bedrock:Retrieve", "Resource": "arn:aws:bedrock:region:account-id:knowledge-base/knowledge-base-id" }
Console IAM affichant la StrandsRetrieveTool KBAccess politique associée au rôle d' AgentCore exécution Runtime
Les autorisations spécifiques requises varient en fonction de l'outil. Consultez la documentation de l'outil et la documentation du service AWS pour déterminer les autorisations IAM appropriées.
Étape 5 : tester l'agent
Une fois les étapes de configuration terminées, testez votre agent pour vérifier que l'outil fonctionne correctement. Vous devriez voir les appels d'outils dans les journaux d'exécution et les réponses de l'agent.
L'agent a utilisé avec succès l'outil de récupération pour répondre à une question sur les skate parks
Note
Pour une liste complète des outils Strands disponibles et de leurs fonctionnalités, reportez-vous à la documentation des outils communautaires Strands
Élargir les bases de connaissances et les types de mémoires de conversation pris en charge
Pour ajouter vos implémentations de mémoire de conversation ou de base de connaissances, ajoutez les implémentations requises dans le shared dossier, puis modifiez les usines et les énumérations appropriées pour créer une instance de ces classes.
Lorsque vous fournissez la configuration LLM, qui est stockée dans le magasin de paramètres, la mémoire de conversation et la base de connaissances appropriées sont créées pour votre LLM. Par exemple, lorsque le ConversationMemoryType est spécifié en tant que DynamoDB, une instance DynamoDBChatMessageHistory de (disponible shared_components/memory/ddb_enhanced_message_history.py à l'intérieur) est créée. Lorsque le KnowledgeBaseType est spécifié comme Amazon Kendra, une instance de KendraKnowledgeBase (disponible à l'intérieurshared_components/knowledge/kendra_knowledge_base.py) est créée.
Création et déploiement des modifications du code
Créez le programme à l'aide de la npm run build commande. Une fois les erreurs résolues, cdk synth lancez-vous pour générer les fichiers modèles et tous les actifs Lambda.
-
Vous pouvez utiliser le
0—/stage-assets.shscript pour transférer manuellement tous les actifs générés vers le bucket intermédiaire de votre compte. -
Utilisez la commande suivante pour déployer ou mettre à jour la plateforme :
cdk deploy DeploymentPlatformStack --parameters AdminUserEmail='admin-email@amazon.com'Tous CloudFormation les paramètres AWS supplémentaires doivent également être fournis avec le AdminUserEmailparamètre.