Dieses Projekt dient Entwicklern als Grundlage für die Ausweitung ihrer Anwendungsfälle auf verschiedene große Sprachmodelle (LLMs) mithilfe von Amazon Bedrock-Agenten. Ziel ist es, das Potenzial der Nutzung mehrerer Modelle auf Bedrock aufzuzeigen, um verkettete Antworten zu erstellen, die sich an verschiedene Szenarien anpassen. Neben der Generierung textbasierter Ausgaben unterstützt diese App auch die Erstellung und Untersuchung von Bildern mithilfe von Bildgenerierungs- und Text-zu-Bild-Modellen. Diese erweiterte Funktionalität erhöht die Vielseitigkeit der Anwendung und macht sie für kreativere und visuellere Anwendungsfälle geeignet.
Für diejenigen, die einen Infrastructure-as-Code (IaC)-Ansatz bevorzugen, bieten wir auch eine AWS CloudFormation-Vorlage an, die die Kernkomponenten wie einen Amazon Bedrock-Agenten, einen S3-Bucket und eine Lambda-Funktion einrichtet. Wenn Sie dieses Projekt lieber über AWS CloudFormation bereitstellen möchten, lesen Sie bitte den Workshop-Leitfaden hier.
Alternativ führt Sie diese README-Datei Schritt für Schritt durch den Prozess zur manuellen Einrichtung und Konfiguration von Amazon Bedrock-Agenten über die AWS-Konsole und gibt Ihnen so die Flexibilität, mit den neuesten Modellen zu experimentieren und das Potenzial von Bedrock-Agenten voll auszuschöpfen.
Der allgemeine Überblick über die Lösung lautet wie folgt:
Einrichtung von Agent und Umgebung: Die Lösung beginnt mit der Konfiguration eines Amazon Bedrock-Agenten, einer AWS Lambda-Funktion und eines Amazon S3-Buckets. Dieser Schritt legt die Grundlage für die Modellinteraktion und Datenverarbeitung fest und bereitet das System auf den Empfang und die Verarbeitung von Eingabeaufforderungen einer Front-End-Anwendung vor. Eingabeaufforderungsverarbeitung und Modellinferenz: Wenn eine Eingabeaufforderung von der Front-End-Anwendung empfangen wird, wertet der Bedrock-Agent die Eingabeaufforderung aus und sendet sie zusammen mit der angegebenen Modell-ID mithilfe des Aktionsgruppenmechanismus an die Lambda-Funktion. Dieser Schritt nutzt das API-Schema der Aktionsgruppe für eine präzise Parameterverarbeitung und erleichtert so eine effektive Modellinferenz basierend auf der Eingabeaufforderung. Datenverarbeitung und Antwortgenerierung: Bei Aufgaben, die eine Bild-zu-Text- oder Text-zu-Bild-Konvertierung beinhalten, interagiert die Lambda-Funktion mit dem S3-Bucket, um notwendige Lese- oder Schreibvorgänge für Bilder durchzuführen. Dieser Schritt stellt die dynamische Handhabung von Multimedia-Inhalten sicher und gipfelt in der Generierung von Antworten oder Transformationen, die durch die anfängliche Eingabeaufforderung vorgegeben werden.
In den folgenden Abschnitten führen wir Sie durch:
AWS SAM (Serverless Application Model) ist ein Open-Source-Framework, das Sie beim Erstellen serverloser Anwendungen auf AWS unterstützt. Es vereinfacht die Bereitstellung, Verwaltung und Überwachung serverloser Ressourcen wie AWS Lambda, Amazon API Gateway, Amazon DynamoDB und mehr. Hier finden Sie eine umfassende Anleitung zum Einrichten und Verwenden von AWS SAM.
Das Framework vereinfacht den Prozess der Erstellung, Bereitstellung und Verwaltung serverloser Anwendungen, indem es die Komplexität der Cloud-Infrastruktur abstrahiert. Es bietet eine einheitliche Möglichkeit, Ihre serverlosen Ressourcen mithilfe einer Konfigurationsdatei und einer Reihe von Befehlen zu definieren und zu verwalten.
Erstellen Sie ein neues serverloses Projekt mit einer Python-Vorlage. Führen Sie in Ihrem Terminal Folgendes aus: cd infer-models Führen Sie dann serverlos aus
Dadurch wird der interaktive Projekterstellungsprozess des Serverless Framework gestartet. Ihnen werden mehrere Optionen angezeigt: Wählen Sie „Neue Serverless-App erstellen“. Wählen Sie die Vorlage „aws-python3“ aus und geben Sie „infer-models“ als Namen für Ihr Projekt an.
Dadurch wird ein neues Verzeichnis namens infer-models mit einer grundlegenden serverlosen Projektstruktur und einer Python-Vorlage erstellt.
Möglicherweise werden Sie auch aufgefordert, sich anzumelden/registrieren. Wählen Sie die Option „Anmelden/Registrieren“. Dadurch wird ein Browserfenster geöffnet, in dem Sie ein neues Konto erstellen oder sich anmelden können, falls Sie bereits eines haben. Nachdem Sie sich angemeldet oder ein Konto erstellt haben, wählen Sie die Option „Framework Open Source“, die kostenlos genutzt werden kann.
Wenn die Bereitstellung Ihres Stacks fehlschlägt, kommentieren Sie bitte Zeile 2 der serverless.yml-Datei aus
Nachdem Sie den Serverless-Befehl ausgeführt und die Eingabeaufforderungen befolgt haben, wird ein neues Verzeichnis mit dem Projektnamen (z. B. infer-models) erstellt, das die Boilerplate-Struktur und die Konfigurationsdateien für das Serverless-Projekt enthält.
Jetzt installieren wir das Serverless-Python-Requirements-Plugin: Das Serverless-Python-Requirements-Plugin hilft bei der Verwaltung von Python-Abhängigkeiten für Ihr Serverless-Projekt. Installieren Sie es, indem Sie Folgendes ausführen:
npm install serverless-python-requirements –save-dev
3.) npx sls deploy
(Bevor Sie den obigen Befehl ausführen, muss die Docker-Engine installiert und ausgeführt werden. Weitere Informationen finden Sie hier.)
(Dadurch wird die AWS Lambda-Funktion gepackt und bereitgestellt.)
Überprüfen Sie die Bereitstellung in CloudFormation in der AWS-Konsole
Wir müssen die Grundagentenberechtigungen bereitstellen, um die Lambda-Funktion aufzurufen. Öffnen Sie die Lambda-Funktion und scrollen Sie nach unten, um die Registerkarte „Konfiguration“ auszuwählen. Wählen Sie links Berechtigungen aus. Scrollen Sie nach unten zu „Ressourcenbasierte Richtlinienanweisungen“ und wählen Sie „Berechtigungen hinzufügen“ aus.
Wählen Sie in der Mitte den AWS-Service für Ihre Richtlinienerklärung aus. Wählen Sie „Andere“ für Ihren Dienst und geben Sie „allow-agent“ für die StatementID ein. Geben Sie als Auftraggeber bedrock.amazonaws.com ein.
Geben Sie arn:aws:bedrock:us-west-2:{aws-account-id}:agent/*
. Bitte beachten Sie, dass AWS die geringste Berechtigung empfiehlt, sodass nur der zugelassene Agent diese Lambda-Funktion aufrufen kann. Ein * am Ende des ARN gewährt jedem Agenten im Konto Zugriff zum Aufrufen dieses Lambda. Idealerweise würden wir dies nicht in einer Produktionsumgebung verwenden. Wählen Sie abschließend für die Aktion „lambda:InvokeFunction“ und dann „Speichern“ aus.
Um die Schlussfolgerung zu erleichtern, erhöhen wir die CPU/den Speicher der Lambda-Funktion. Wir werden auch das Timeout erhöhen, um der Funktion genügend Zeit zu geben, den Aufruf abzuschließen. Wählen Sie links „Allgemeine Konfiguration“ und rechts „Bearbeiten“ aus.
Ändern Sie den Speicher auf 2048 MB und das Timeout auf 1 Minute . Scrollen Sie nach unten und wählen Sie Speichern.
Agents
aus. Geben Sie einen Agentennamen ein, z. B. Multi-Model-Agent, und erstellen Sie dann den Agenten. You are a research agent that interacts with various large language models. You pass the model ID and prompt from requests to large language models to create and store images. Then, the LLM will return a presigned URL to the image similar to the URL example provided. You also call LLMS for text and code generation, summarization, problem solving, text-to-sql, response comparisons and ratings. Remeber. you use other large language models for inference. Do not decide when to provide your own response, unless asked.
Stellen Sie anschließend sicher, dass Sie nach oben scrollen und die Schaltfläche „Speichern“ auswählen, bevor Sie mit dem nächsten Schritt fortfahren.
Als Nächstes fügen wir eine Aktionsgruppe hinzu. Scrollen Sie nach unten zu Action groups
und wählen Sie dann Hinzufügen aus. Rufen Sie die Aktionsgruppe call-model
auf.
Wählen Sie für den Gruppentyp „Aktion“ die Option „Mit API-Schemas definieren“ aus
Im nächsten Abschnitt wählen wir eine vorhandene Lambda-Funktion infer-models-dev-inferModel aus.
Für das API-Schema wählen wir Define with in-line OpenAPI schema editor
aus. Kopieren Sie das Schema von unten und fügen Sie es in den Inline-OpenAPI-Schema- Editor ein. Wählen Sie dann „Hinzufügen“ aus: (This API schema is needed so that the bedrock agent knows the format structure and parameters required for the action group to interact with the Lambda function.)
{
"openapi": "3.0.0",
"info": {
"title": "Model Inference API",
"description": "API for inferring a model with a prompt, and model ID.",
"version": "1.0.0"
},
"paths": {
"/callModel": {
"post": {
"description": "Call a model with a prompt, model ID, and an optional image",
"parameters": [
{
"name": "modelId",
"in": "query",
"description": "The ID of the model to call",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "prompt",
"in": "query",
"description": "The prompt to provide to the model",
"required": true,
"schema": {
"type": "string"
}
}
],
"requestBody": {
"required": true,
"content": {
"multipart/form-data": {
"schema": {
"type": "object",
"properties": {
"modelId": {
"type": "string",
"description": "The ID of the model to call"
},
"prompt": {
"type": "string",
"description": "The prompt to provide to the model"
},
"image": {
"type": "string",
"format": "binary",
"description": "An optional image to provide to the model"
}
},
"required": ["modelId", "prompt"]
}
}
}
},
"responses": {
"200": {
"description": "Successful response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"result": {
"type": "string",
"description": "The result of calling the model with the provided prompt and optional image"
}
}
}
}
}
}
}
}
}
}
}
Orchestration
“ die Option Override orchestration template defaults
. Here is an example of what a url response to access an image should look like:
URL Generated to access the image:
https://bedrock-agent-images.s3.amazonaws.com/generated_pic.png?AWSAccessKeyId=123xyz&Signature=rlF0gN%2BuaTHzuEDfELz8GOwJacA%3D&x-amz-security-token=IQoJb3JpZ2msqKr6cs7sTNRG145hKcxCUngJtRcQ%2FzsvDvt0QUSyl7xgp8yldZJu5Jg%3D%3D&Expires=1712628409
Diese Eingabeaufforderung hilft dem Agenten, ein Beispiel für die Formatierung der Antwort einer vorsignierten URL bereitzustellen, nachdem ein Bild im S3-Bucket generiert wurde. Darüber hinaus besteht die Möglichkeit, eine benutzerdefinierte Parser-Lambda-Funktion für eine detailliertere Formatierung zu verwenden.
Scrollen Sie nach unten und wählen Sie die Schaltfläche Save and exit
.
Stellen Sie anschließend sicher, dass Sie oben erneut auf die Schaltfläche Save and exit
und dann rechts oben auf der Benutzeroberfläche des Testagenten auf die Schaltfläche „Vorbereiten“ klicken. Dadurch können wir die neuesten Änderungen testen.
(Bevor Sie fortfahren, stellen Sie bitte sicher, dass Sie alle Modelle über die Amazon Bedrock-Konsole aktivieren, mit denen Sie Tests durchführen möchten.)
Um mit dem Testen zu beginnen, bereiten Sie den Agenten vor, indem Sie auf der Agent-Builder-Seite auf die Schaltfläche „Vorbereiten“ klicken
Auf der rechten Seite sollten Sie eine Option zum Testen des Agenten mit einem Benutzereingabefeld sehen. Nachfolgend finden Sie einige Eingabeaufforderungen, die Sie testen können. Wir empfehlen Ihnen jedoch, kreativ zu werden und Variationen von Eingabeaufforderungen auszuprobieren.
Eine Sache, die Sie vor dem Test beachten sollten. Wenn Sie Text-zu-Bild oder Bild-zu-Text umwandeln, verweist der Projektcode statisch auf dieselbe PNG-Datei. Im Idealfall kann dieser Schritt dynamischer gestaltet werden.
Use model amazon.titan-image-generator-v1 and create me an image of a woman in a boat on a river.
Use model anthropic.claude-3-haiku-20240307-v1:0 and describe to me the image that is uploaded. The model function will have the information needed to provide a response. So, dont ask about the image.
Use model stability.stable-diffusion-xl-v1. Create an image of an astronaut riding a horse in the desert.
Use model meta.llama3-70b-instruct-v1:0. You are a gifted copywriter, with special expertise in writing Google ads. You are tasked to write a persuasive and personalized Google ad based on a company name and a short description. You need to write the Headline and the content of the Ad itself. For example: Company: Upwork Description: Freelancer marketplace Headline: Upwork: Hire The Best - Trust Your Job To True Experts Ad: Connect your business to Expert professionals & agencies with specialized talent. Post a job today to access Upwork's talent pool of quality professionals & agencies. Grow your team fast. 90% of customers rehire. Trusted by 5M+ businesses. Secure payments. - Write a persuasive and personalized Google ad for the following company. Company: Click Description: SEO services
(Wenn Sie eine Benutzeroberfläche für dieses Projekt einrichten möchten, fahren Sie mit Schritt 6 fort.)
Für diesen Schritt benötigen Sie neben der agent ID
auch eine agent alias ID
. Gehen Sie zur Bedrock-Verwaltungskonsole und wählen Sie dann Ihren Multi-Modell-Agenten aus. Kopieren Sie die Agent ID
oben rechts im Abschnitt Agent overview
. Scrollen Sie dann nach unten zu „Aliase“ und wählen Sie „Erstellen“ aus. Benennen Sie den Alias a1
und erstellen Sie dann den Agenten. Speichern Sie die generierte Alias-ID , NICHT den Aliasnamen.
Navigieren Sie nun zurück zu der IDE, mit der Sie das Projekt geöffnet haben.
Navigieren Sie zum Verzeichnis streamlit_app :
Konfiguration aktualisieren :
Öffnen Sie die Datei invoke_agent.py .
Aktualisieren Sie in Zeile 19 und 20 die Variablen agentId
und agentAliasId
mit den entsprechenden Werten und speichern Sie sie dann.
Streamlit installieren (falls noch nicht installiert):
Führen Sie den folgenden Befehl aus, um alle erforderlichen Abhängigkeiten zu installieren:
pip install streamlit boto3 pandas
Führen Sie die Streamlit-App aus :
streamlit_app
den folgenden Befehl aus: streamlit run app.py
Denken Sie daran, dass Sie jedes verfügbare Modell von Amazon Bedrock verwenden können und nicht auf die obige Liste beschränkt sind. Wenn eine Modell-ID nicht aufgeführt ist, sehen Sie sich bitte die neuesten verfügbaren Modelle (IDs) auf der Dokumentationsseite von Amazon Bedrock hier an.
Sie können das bereitgestellte Projekt nutzen, um diese Lösung zu optimieren und mit Ihren eigenen Datensätzen und Anwendungsfällen zu vergleichen. Entdecken Sie verschiedene Modellkombinationen, erweitern Sie die Grenzen des Möglichen und treiben Sie Innovationen in der sich ständig weiterentwickelnden Landschaft der generativen KI voran.
Weitere Informationen finden Sie unter BEITRAGEN.
Diese Bibliothek ist unter der MIT-0-Lizenz lizenziert. Siehe die LICENSE-Datei.