View a markdown version of this page

Leitfaden zur Integration - Generativer KI-Anwendungsgenerator auf AWS

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Leitfaden zur Integration

Die gesamte Lösung ist so konzipiert, dass sie leicht erweiterbar ist. Die Orchestrierungsebene dieser Lösung basiert auf. LangChain Sie können dieser Lösung jeden Modellanbieter, jede Wissensdatenbank oder jeden beliebigen Typ von Konversationsspeicher hinzufügen, der von LangChain (oder einem Drittanbieter, der LangChain Konnektoren für diese Komponenten bereitstellt) unterstützt wird.

Erweiterung wird unterstützt LLMs

Um einen weiteren Modellanbieter hinzuzufügen, z. B. einen benutzerdefinierten LLM-Anbieter, müssen Sie die folgenden drei Komponenten der Lösung aktualisieren:

  1. Erstellen Sie einen neuen TextUseCase CDK-Stack, der die mit Ihrem benutzerdefinierten LLM-Anbieter konfigurierte Chat-Anwendung bereitstellt:

    1. Klonen Sie das GitHub Repository dieser Lösung und richten Sie Ihre Build-Umgebung ein, indem Sie den Anweisungen in der Datei README.md folgen.

    2. Kopieren Sie die source/infrastructure/lib/bedrock-chat-stack.ts Datei (oder erstellen Sie eine neue), fügen Sie sie in dasselbe Verzeichnis ein und benennen Sie sie um. custom-chat-stack.ts

    3. Benennen Sie die Klasse in der Datei in eine geeignete um, z. CustomLLMChat B.

    4. Sie können diesem Stack ein Secrets Manager Manager-Geheimnis hinzufügen, in dem Ihre Anmeldeinformationen für Ihr benutzerdefiniertes LLM gespeichert werden. Sie können diese Anmeldeinformationen während des Modellaufrufs in der Chat-Lambda-Schicht abrufen, die im nächsten Absatz beschrieben wird.

  2. Erstellen Sie eine Lambda-Schicht, die die Python-Bibliothek des hinzuzufügenden Modellanbieters enthält, und hängen Sie sie an. Für eine Chat-Anwendung für Amazon Bedrock-Anwendungsfälle enthält die langchain-aws Python-Bibliothek die benutzerdefinierten Konnektoren zusätzlich zum LangChain Paket, um eine Verbindung zu den AWS-Modellanbietern (Amazon Bedrock und SageMaker KI), Wissensdatenbanken (Amazon Kendra und Amazon Bedrock Knowledge Bases) und Speichertypen (wie DynamoDB) herzustellen. In ähnlicher Weise haben andere Modellanbieter ihre eigenen Konnektoren. Diese Ebene hilft Ihnen, die Python-Bibliothek dieses Modellanbieters anzuhängen, sodass Sie diese Konnektoren in der Chat-Lambda-Schicht verwenden können, die das LLM aufruft (Schritt 3). In dieser Lösung wird ein benutzerdefinierter Asset-Bundler verwendet, um Lambda-Schichten zu erstellen, die mithilfe von CDK-Aspekten angehängt werden. So erstellen Sie eine neue Ebene für die Bibliothek des Anbieters benutzerdefinierter Modelle:

    1. Navigieren Sie zu der LambdaAspects Klasse in der source/infrastructure/lib/utils/lambda-aspects.ts Datei.

    2. Folgen Sie den Anweisungen zur Erweiterung der Funktionalität der Lambda-Aspects-Klasse in der Datei (z. B. zum Hinzufügen der getOrCreateLangchainLayer Methode). Um diese neue Methode zu verwenden (zum BeispielgetOrCreateCustomLLMLayer), aktualisieren Sie auch die LLM_LIBRARY_LAYER_TYPES Aufzählung in der source/infrastructure/lib/utils/constants.ts Datei.

  3. Erweitern Sie die chat Lambda-Funktion, um einen Builder, einen Client und einen Handler für den neuen Anbieter zu implementieren.

    Die source/lambda/chat enthält die LangChain Verbindungen für verschiedene LLMs sowie die unterstützenden Klassen, um diese LLMs zu erstellen. Diese unterstützenden Klassen folgen den Entwurfsmustern von Builder und Object Oriented, um das LLM zu erstellen.

    Jeder Handler (z. B.bedrock_handler.py) erstellt zuerst einen Client, überprüft die Umgebung auf erforderliche Umgebungsvariablen und ruft dann eine get_model Methode auf, um die LangChain LLM-Klasse abzurufen. Die Methode generate wird dann aufgerufen, um das LLM aufzurufen und seine Antwort abzurufen. LangChain unterstützt derzeit Streaming-Funktionen für Amazon Bedrock, aber nicht SageMaker KI. Je nach Streaming- oder Nicht-Streaming-Funktionalität wird der entsprechende WebSocket Handler (WebsocketStreamingCallbackHandleroderWebsocketHandler) aufgerufen, um die Antwort mithilfe der Methode an die WebSocket Verbindung zurückzuschicken. post_to_connection

    Der clients/builder Ordner enthält die Klassen, die beim Erstellen eines LLM Builders mithilfe des Builder-Musters helfen. Zunächst use_case_config wird a aus einem DynamoDB-Konfigurationsspeicher abgerufen, in dem die Details darüber gespeichert werden, welche Art von Wissensdatenbank, Konversationsspeicher und Modell erstellt werden sollen. Es enthält auch relevante Modelldetails wie Modellparameter und Eingabeaufforderungen. Der Builder hilft Ihnen dann dabei, die Schritte zum Erstellen einer Wissensdatenbank, zum Erstellen eines Konversationsspeichers zur Aufrechterhaltung des Konversationskontextes für LLM, zum Einstellen der entsprechenden LangChain Callbacks für Streaming- und Nicht-Streaming-Fälle und zum Erstellen eines LLM-Modells auf der Grundlage der bereitgestellten Modellkonfigurationen zu befolgen. Die DynamoDB-Konfiguration wird zum Zeitpunkt der Anwendungsfallerstellung gespeichert, wenn Sie einen Anwendungsfall über das Deployment-Dashboard bereitstellen (oder wenn er von den Benutzern in eigenständigen Anwendungsfall-Stack-Bereitstellungen ohne das Deployment-Dashboard bereitgestellt wird).

    Der clients/factories Unterordner hilft bei der Festlegung des geeigneten Konversationsspeichers und der Wissensdatenbankklasse auf der Grundlage der LLM-Konfiguration. Dies ermöglicht eine einfache Erweiterung auf alle anderen Wissensdatenbanken oder Speichertypen, die Ihre Implementierung unterstützen soll.

    Der shared Unterordner enthält spezifische Implementierungen von Knowledge Base und Conversation Memory, die vom Builder innerhalb der Factories instanziiert werden. Es enthält auch Amazon Kendra- und Amazon Bedrock Knowledge Base-Retriever, die innerhalb aufgerufen werden, LangChain um Dokumente für die RAG-Anwendungsfälle abzurufen, sowie Callbacks, die vom LLM-Modell verwendet werden. LangChain

    Die LangChain Implementierungen verwenden LangChain Expression Language (LCEL), um Konversationsketten gemeinsam zu erstellen. RunnableWithMessageHistoryclass wird verwendet, um den Konversationsverlauf mit benutzerdefinierten LCEL-Ketten zu verwalten, sodass Funktionen wie das Zurücksenden von Quelldokumenten und die Verwendung der an die Wissensdatenbank gesendeten umformulierten (oder unmissverständlichen) Frage auch an das LLM gesendet werden können.

    Um Ihre eigene Implementierung eines benutzerdefinierten Anbieters zu erstellen, können Sie:

    1. Kopieren Sie die bedrock_handler.py Datei und erstellen Sie Ihren benutzerdefinierten Handler (z. B.custom_handler.py), der Ihren benutzerdefinierten Client erstellt (z. B.CustomProviderClient) (wie im folgenden Schritt angegeben).

    2. Kopieren Sie bedrock_client.py in den Client-Ordner. Benennen Sie es um in custom_provider_client.py (oder Ihren spezifischen Modellanbieternamen, z. B.CustomProvider). Benennen Sie die darin enthaltene Klasse entsprechend, z. B. CustomProviderClient welche erbtLLMChatClient.

      Sie können die von bereitgestellten Methoden verwenden LLMChatClient oder Ihre eigenen Implementierungen schreiben, um diese zu überschreiben.

      Die get_model Methode erstellt eine CustomProviderBuilder (siehe den folgenden Schritt) und ruft die construct_chat_model Methode auf, die das Chat-Modell mithilfe von Builder-Schritten erstellt. Diese Methode fungiert im Builder-Muster als Director.

    3. Kopieren Sie es clients/builders/bedrock_builder.py und benennen Sie es um custom_provider_builder.py und die darin enthaltene Klasse in die KlasseCustomProviderBuilder, die erbt LLMBuilder (llm_builder.py). Sie können die von bereitgestellten Methoden verwenden LLMBuilder oder Ihre eigenen Implementierungen schreiben, um diese zu überschreiben. Die Builder-Schritte werden nacheinander innerhalb der construct_chat_model Methode des Clients aufgerufen, z. B. set_model_defaultsset_knowledge_base, undset_conversation_memory.

      Die set_llm_model Methode würde das eigentliche LLM-Modell unter Verwendung aller Werte erstellen, die mit den zuvor aufgerufenen Methoden festgelegt wurden. Insbesondere können Sie ein RAG (CustomProviderRetrievalLLM) oder ein LLM ohne RAG (CustomProviderLLM) erstellen, das auf dem basiert, was aus der rag_enabled variable LLM-Konfiguration in DynamoDB abgerufen wurde.

      Diese Konfiguration wird in der Methode in der Klasse abgerufen. retrieve_use_case_config LLMChatClient

    4. Implementieren Sie Ihre CustomProviderLLM oder CustomProviderRetrievalLLM -Implementierung im llm_models Unterordner, je nachdem, ob Sie einen RAG-Anwendungsfall oder einen anderen Anwendungsfall benötigen. Die meisten Funktionen zur Implementierung dieser Modelle werden in ihren jeweiligen RetrievalLLM Klassen für BaseLangChainModel Anwendungsfälle bereitgestellt, die nicht von RAG und RAG stammen.

      Sie können die llm_models/bedrock.py Datei kopieren und die erforderlichen Änderungen vornehmen, um das LangChain Modell aufzurufen, das sich auf Ihren benutzerdefinierten Anbieter bezieht. Amazon Bedrock verwendet beispielsweise eine ChatBedrock Klasse, um ein Chat-Modell mithilfe von LangChain zu erstellen.

      Die Generate-Methode generiert die LLM-Antwort mithilfe der LangChain LCEL-Ketten.

      Sie können die get_clean_model_params Methode auch verwenden, um die Modellparameter gemäß LangChain Ihren Modellanforderungen zu bereinigen.

Erweiterung der unterstützten Tools von Strands

Mit der Lösung können Sie MCP-Server, KI-Agenten und Multi-Agent-Workflows erstellen und bereitstellen. Im Rahmen von Agent Builder können Sie MCP-Server anhängen, um Ihren Agenten zusätzliche Funktionen zu bieten. Zusätzlich zu den MCP-Servern können Sie die integrierten Tools von Strands (dem von der Lösung verwendeten zugrunde liegenden Framework) nutzen.

Die Lösung ist standardmäßig mit den folgenden Strons-Tools vorkonfiguriert:

  • Aktuelle Uhrzeit (standardmäßig aktiviert)

  • Taschenrechner (standardmäßig aktiviert)

  • Umgebung

Auswahl des MCP-Servers und der Tools im Agent Builder-Assistenten mit integrierten Strands Tools

integrierte Strons-Tools

Um Ihre Agenten um zusätzliche Strons-Tools zu erweitern, folgen Sie dem in diesem Abschnitt beschriebenen vierstufigen Prozess.

Schritt 1: Finden Sie das Strans-Tool

Durchsuchen Sie die verfügbaren Strands Tools, um das Tool zu finden, das Sie verwenden möchten. Jedes Tool hat spezifische Funktionen und Konfigurationsanforderungen.

Um beispielsweise Funktionen zum Abrufen der Amazon Bedrock Knowledge Base hinzuzufügen, würden Sie das Abruftool verwenden.

Schritt 2: Aktualisieren Sie den SSM-Parameter

Um ein Tool in der Agent Builder-Bereitstellungsoberfläche verfügbar zu machen, aktualisieren Sie den AWS Systems Manager Parameter Store, der definiert, welche Strons-Tools unterstützt werden.

  1. Navigieren Sie in Ihrem AWS-Konto zum AWS Systems Manager Parameter Store.

  2. Suchen Sie den Parameter: /gaab/<stack-name>/strands-tools

  3. Fügen Sie Ihre Werkzeugkonfiguration mithilfe der folgenden JSON-Struktur am Ende der vorhandenen Liste hinzu:

    { "name": "Bedrock KB Retrieve", "description": "Retrieve information from Bedrock Knowledge Base", "value": "retrieve", "category": "AI", "isDefault": false }
    Feld Description

    name

    Anzeigename, der in der Agent Builder-Benutzeroberfläche angezeigt wird

    description

    Kurze Beschreibung der Funktionen des Tools

    value

    Der genaue Werkzeugname, wie er im Strands Tool-Paket definiert ist

    category

    Organisatorische Kategorie für die Gruppierung von Tools in der Benutzeroberfläche

    ist Standard

    Ob das Tool standardmäßig für neue Agenten aktiviert werden soll

Schritt 3: Umgebungsvariablen konfigurieren

Viele Strands-Tools benötigen Umgebungsvariablen für die Konfiguration. Sie können diese Variablen auf zwei Arten setzen:

Option 1: Direkte Konfiguration zur AgentCore Laufzeit

Aktualisieren Sie den bereitgestellten Agenten direkt auf Amazon Bedrock AgentCore Runtime mit den erforderlichen Umgebungsvariablen.

Option 2: Modellparameter im Bereitstellungsassistenten

Fügen Sie während des Schritts zur Modellauswahl im Agent Builder-Assistenten Umgebungsvariablen hinzu. Verwenden Sie dazu den Abschnitt Modellparameter. Umgebungsvariablen, die der Namenskonvention ENV_<ALL_CAPS_TOOL_NAME>_<env_variable_name> folgen, werden zur Laufzeit automatisch in die Ausführungsumgebung des Agenten geladen als<env_variable_name>.

Beispiel:

  • ENV_RETRIEVE_KNOWLEDGE_BASE_IDwird KNOWLEDGE_BASE_ID

  • ENV_RETRIEVE_MIN_SCOREwird MIN_SCORE

Abschnitt mit erweiterten Modellparametern, der die ENV_RETRIEVE_KNOWLEDGE_BASE_ID-Konfiguration zeigt

Modellparameter env vars

Informationen zu den erforderlichen Umgebungsvariablen finden Sie in der Dokumentation oder im Quellcode des jeweiligen Tools. Für das Tool zum Abrufen finden Sie die Konfigurationsoptionen im Quellcode.

Schritt 4: Fügen Sie IAM-Berechtigungen hinzu

Fügen Sie Ihrer AgentCore Runtime-Ausführungsrolle manuell alle erforderlichen IAM-Berechtigungen hinzu, damit der Agent das Tool verwenden kann.

Um beispielsweise das Abruftool mit Amazon Bedrock Knowledge Bases zu verwenden:

  1. Navigieren Sie in Ihrem AWS-Konto zur IAM-Konsole.

  2. Suchen Sie die AgentCore Runtime-Ausführungsrolle für Ihren Agenten.

  3. Fügen Sie die folgende Berechtigung hinzu:

    { "Effect": "Allow", "Action": "bedrock:Retrieve", "Resource": "arn:aws:bedrock:region:account-id:knowledge-base/knowledge-base-id" }

Die IAM-Konsole zeigt die StrandsRetrieveTool KBAccess Richtlinie an, die der AgentCore Runtime-Ausführungsrolle zugeordnet ist

Aktualisierung der Agentenausführungsrolle (IAM)

Welche spezifischen Berechtigungen erforderlich sind, hängt vom jeweiligen Tool ab. Schlagen Sie in der Dokumentation des Tools und in der AWS-Servicedokumentation nach, um die entsprechenden IAM-Berechtigungen zu ermitteln.

Schritt 5: Testen Sie den Agenten

Nachdem Sie die Konfigurationsschritte abgeschlossen haben, testen Sie Ihren Agenten, um sicherzustellen, dass das Tool ordnungsgemäß funktioniert. Sie sollten die Tool-Aufrufe in den Ausführungsprotokollen und Antworten des Agenten sehen.

Der Agent verwendet erfolgreich das Retrieve-Tool, um eine Frage zu Skateparks zu beantworten

Beispiel für das Abrufen von Strängen
Anmerkung

Eine vollständige Liste der verfügbaren Strands-Tools und ihrer Funktionen finden Sie in der Dokumentation zu den Strands Community Tools.

Erweiterung der unterstützten Wissensdatenbanken und Typen von Konversationsspeichern

Um Ihre Implementierungen von Conversation Memory oder Knowledge Base hinzuzufügen, fügen Sie die erforderlichen Implementierungen im shared Ordner hinzu und bearbeiten Sie dann die Factories und die entsprechenden Aufzählungen, um eine Instanz dieser Klassen zu erstellen.

Wenn Sie die LLM-Konfiguration angeben, die im Parameterspeicher gespeichert ist, werden der entsprechende Konversationsspeicher und die entsprechende Wissensdatenbank für Ihr LLM erstellt. Wenn zum Beispiel für DynamoDB angegeben ConversationMemoryType ist, wird eine Instanz von DynamoDBChatMessageHistory (available insideshared_components/memory/ddb_enhanced_message_history.py) erstellt. Wenn Amazon Kendra angegeben KnowledgeBaseType ist, wird eine Instanz von KendraKnowledgeBase (innerhalb verfügbarshared_components/knowledge/kendra_knowledge_base.py) erstellt.

Erstellung und Bereitstellung der Codeänderungen

Erstellen Sie das Programm mit dem npm run build Befehl. Sobald alle Fehler behoben sind, führen Sie den Befehl aus, cdk synth um die Vorlagendateien und alle Lambda-Assets zu generieren.

  1. Sie können das –0—/stage-assets.sh Skript verwenden, um alle generierten Assets manuell im Staging-Bucket in Ihrem Konto bereitzustellen.

  2. Verwenden Sie den folgenden Befehl, um die Plattform bereitzustellen oder zu aktualisieren:

    cdk deploy DeploymentPlatformStack --parameters AdminUserEmail='admin-email@amazon.com'

    Alle zusätzlichen CloudFormation AWS-Parameter sollten ebenfalls zusammen mit dem AdminUserEmailParameter angegeben werden.