Foundational LLM Chat ist eine Chainlit-Anwendung, die mit AWS CDK und Converse API erstellt wurde und Ihnen die Interaktion mit dem Amazon Bedrock-Sprachmodell ermöglicht. Es bietet eine benutzerfreundliche Oberfläche zum Chatten mit Amazon Bedrock LLMs, zum Hochladen von Bildern oder Dokumenten und zum Empfangen multimodaler Antworten. Die Anwendung wird auf AWS mithilfe verschiedener Dienste wie Amazon Bedrock, Amazon Elastic Container Service, Amazon Cognito, Amazon CloudFront und mehr bereitgestellt.
Das Architekturdiagramm veranschaulicht die AWS-Bereitstellung der Foundational LLM Chat-Anwendung. Benutzer interagieren mit der Anwendung über eine Webschnittstelle, die durch die Amazon Cognito-Authentifizierung gesichert ist. Die Anwendung wird weltweit über das CDN von Amazon CloudFront verteilt. Innerhalb einer bestimmten AWS-Region wird die Anwendung über mehrere Availability Zones mithilfe von Amazon ECS für die Containerbereitstellung bereitgestellt. Das Backend lässt sich in Amazon Bedrock integrieren, um verschiedene Sprachmodelle zu nutzen und Benutzern die Teilnahme an multimodalen Gesprächen mit dem KI-Assistenten zu ermöglichen.
Die Anwendung wird über eine config.json
Datei im Ordner ./bin
konfiguriert. Zu den wichtigsten Konfigurationsoptionen gehören:
default_system_prompt
: Dieses Feld enthält die Standard-Systemeingabeaufforderung, die vom Chatbot verwendet wird, wenn nicht unten im Feld bedrock_models
angegeben. Es definiert die anfänglichen Anweisungen und das Verhalten des KI-Assistenten. Sie können diesen Wert ändern, um die Persona oder die anfängliche Eingabeaufforderung des Assistenten zu ändern.
max_characters_parameter
: Dieses Feld gibt die maximal zulässige Anzahl von Zeichen im Eingabetext an. Bei Festlegung auf die Zeichenfolge "None"
gibt es keine Zeichenbeschränkung. Sie können diesen Wert bei Bedarf ändern, um die Länge des Eingabetextes zu begrenzen.
max_content_size_mb_parameter
: Dieses Feld legt die maximale Größe des Eingabeinhalts (z. B. Bilder) in Megabyte fest. Wenn die Zeichenfolge "None"
festgelegt ist, gibt es keine Größenbeschränkung. Sie können diesen Wert ändern, um die maximale Größe des Eingabeinhalts einzuschränken.
default_aws_region
: Dieses Feld gibt die AWS-Region an, in der die Anwendung bereitgestellt wird. Sie können die Region auch für jedes Amazon Bedrock-Modellfeld festlegen.
prefix
: In diesem Feld können Sie ein Präfix für von der Anwendung erstellte Ressourcennamen festlegen. Sie können es leer lassen oder bei Bedarf ein benutzerdefiniertes Präfix angeben.
Dieses Feld enthält ein Wörterbuch von Bedrock-Modellen, die der Chatbot verwenden kann. Jedes Modell wird durch einen Schlüssel identifiziert (z. B. „Sonnet“, „Haiku“) und der Schlüssel ist der im Chainlit-Chatprofil verwendete Name. Jedes Modell verfügt mindestens über die folgenden Eigenschaften:
id
: Die ID oder ARN des Amazon Bedrock-Modells. Die verfügbaren Modell-IDs finden Sie in der AWS-Dokumentation.region
: ein Array von Regionen, die für den Zugriff auf das Modell verwendet werden. Eine, wenn Sie die regionsübergreifende Inferenz nicht aktiviert haben, mehrere für die regionsübergreifende Inferenz.Zu den optionalen Konfigurationsparametern gehören:
inference_profile
: Einstellungen für die regionsübergreifende Inferenzprefix
: Regionspräfix (z. B. „us“)region
: Primäre Inferenzregionsystem_prompt
: Benutzerdefinierte Systemaufforderungcost
: Preisinformationeninput_1k_price
: Die Kosten (in USD) für 1.000 Eingabe-Tokens. Preisinformationen für verschiedene Modelle finden Sie auf der Preisseite von AWS Bedrock.output_1k_price
: Die Kosten (in USD) für 1.000 Ausgabe-Tokens.vision
[optional] : wahr oder falsch. Wenn Vision-Funktionen für das Modell aktiviert sind.document
[optional] : wahr oder falsch. Wenn Dokumentfunktionen aktiviert sind](https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference.html) für das Modell.tool
[optional] : wahr oder falsch. Wenn die Tools-Funktionen für das Modell aktiviert sind.default
[optional] : wahr oder falsch. Das standardmäßig ausgewählte Modell Sie können den Abschnitt bedrock_models
ändern, um zusätzliche Modelle aufzunehmen oder die vorhandenen Modelle entsprechend Ihren Anforderungen zu aktualisieren.
Hier ist ein Beispiel dafür, wie Sie die Modell-ID und Preisinformationen abrufen:
Informationen zum Ermitteln der Modell-ID oder des ARN finden Sie in der Dokumentation zu AWS Bedrock-Modell-IDs. Die ID für das Modell Claude 3 Sonnet lautet beispielsweise anthropic.claude-3-sonnet-20240229-v1:0
.
Preisinformationen finden Sie in der Preisdokumentation zu AWS Bedrock. Für das Claude 3 Sonnet-Modell gelten folgende Input- und Output-Preise:
Nachdem Sie die gewünschten Änderungen an der Datei config.json
vorgenommen haben, können Sie mit der Bereitstellung fortfahren, wie in der README-Datei beschrieben.
Hier ein Beispiel für den 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
}
}
}
Die Anwendung nutzt Amazon Bedrock Prompt Manager für:
Derzeit unterstützt die Anwendung zwei automatische Variablenersetzungen:
%Y-%m-%d
des Tages ersetzt;%Y-%m-%d %H:%M:%S UTC
ersetzt Sie können die Funktion extract_and_process_prompt
in chainlit_image/foundational-llm-chat_app/massages_utils.py
bearbeiten, um weitere direkte Ersetzungen hinzuzufügen.
Die Anwendung nutzt die Converse-API von Amazon Bedrock und bietet Folgendes:
Alle Systemaufforderungen werden über den Amazon Bedrock Prompt Manager gespeichert und verwaltet und bieten Folgendes:
Bei der Verwendung von Systemaufforderungen zum Konfigurieren des Verhaltens von Sprachmodellen ist es wichtig, Auswirkungen auf die Sicherheit zu berücksichtigen und Maßnahmen zu ergreifen, um potenziellen Missbrauch oder Schwachstellen zu verhindern. Ein erhebliches Risiko ist die Prompt-Injection , bei der böswillige Eingaben die Systemeingabeaufforderung auf unbeabsichtigte Weise manipulieren und möglicherweise zu schädlichen oder verzerrten Ausgaben führen können.
Ein guter Ausgangspunkt ist der folgende Leitfaden: Jailbreaks abschwächen und sofortige Injektionen durchführen.
Unter Prompt Engineering versteht man die sorgfältige Erstellung von Eingabeaufforderungen oder Anweisungen, um Sprachmodelle bei der Generierung der gewünschten Ausgaben anzuleiten. Effektives Prompt Engineering ist von entscheidender Bedeutung, um sicherzustellen, dass Sprachmodelle den gegebenen Kontext und die gegebene Aufgabe verstehen und angemessen darauf reagieren.
Der folgende Kurs soll Ihnen ein umfassendes, schrittweises Verständnis dafür vermitteln, wie Sie mit Bedrock optimale Eingabeaufforderungen in Claude entwickeln: Prompt Engineering mit Anthropic Claude v3.
Dieser Leitfaden behandelt verschiedene Techniken und Best Practices für Prompt Engineering anhand einer Reihe von Lektionen und Übungen, die in drei Stufen unterteilt sind: Anfänger, Mittelstufe und Fortgeschrittene.
Indem Sie die in diesem Leitfaden beschriebenen Prinzipien und Techniken befolgen, können Sie die Leistung und Zuverlässigkeit Ihrer Sprachmodellanwendungen verbessern und sicherstellen, dass der KI-Assistent relevantere, kohärentere und kontextbewusstere Antworten generiert.
Wir empfehlen die Bereitstellung mit AWS Cloud9. Wenn Sie Cloud9 zum Bereitstellen der Lösung verwenden möchten, benötigen Sie Folgendes, bevor Sie fortfahren:
m5.large
aus.Amazon Linux 2023
als Plattform. Wenn Sie sich entschieden haben, AWS Cloud9 nicht zu verwenden, stellen Sie sicher, dass Ihre Umgebung die folgenden Voraussetzungen erfüllt:
Stellen Sie sicher, dass Ihre Umgebung die folgenden Voraussetzungen erfüllt:
Du hast:
Ein AWS-Konto
Eine Zugriffsrichtlinie, die es Ihnen ermöglicht, im AWS-Beispiel enthaltene Ressourcen zu erstellen
Sowohl Konsolen- als auch Programmzugriff
NodeJS ist installiert
nvm
verwenden, können Sie Folgendes ausführen, bevor Sie fortfahren nvm install --lts
NPM ist installiert
nvm
verwenden, können Sie Folgendes ausführen, bevor Sie fortfahren nvm install-latest-npm
AWS CLI installiert und für die Verwendung mit Ihrem AWS-Konto konfiguriert
AWS CDK CLI installiert
Finch installiert oder Docker installiert
Aktivieren Sie den Zugriff auf Amazon Bedrock-Modelle in der Bereitstellungsregion: So aktivieren Sie den Zugriff auf Amazon Bedrock-Modelle.
Aktivieren Sie mindestens eines von:
Klonen Sie das Repository, öffnen Sie den Ordner, installieren Sie Abhängigkeiten:
git clone https://github.com/aws-samples/foundational-llm-chat.git
cd foundational-llm-chat
npm install
[Nur optional, wenn Sie dies noch nicht in der Bereitstellungsregion getan haben] Bootstrap der CDK-Umgebung:
cdk bootstrap
Erstellen Sie den Stack und stellen Sie ihn bereit:
cdk deploy --region YOUR_DEPLOY_REGION
Dabei ist YOUR_DEPLOY_REGION die AWS-Region, in der Sie die Anwendung bereitstellen möchten. Zum Beispiel: us-west-2
.
Wenn Sie Finch anstelle von Docker verwenden, fügen Sie bitte CDK_DOCKER=finch
am Anfang des Befehls hinzu, wie im folgenden Beispiel:
CDK_DOCKER=finch cdk deploy --region us-west-2
Dadurch werden alle erforderlichen Ressourcen auf AWS erstellt, einschließlich des ECS-Clusters, des Cognito-Benutzerpools, der CloudFront-Verteilung und mehr.
Nach Abschluss der Bereitstellung wird die CloudFront-Verteilungs-URL im Terminal angezeigt. Verwenden Sie diese URL, um auf die Anwendung „foundational-llm-chat“ zuzugreifen.
Nach der Bereitstellung erhalten Sie etwas Ähnliches:
✅ 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
Die Amazon CloudFront-Verteilung wird in der folgenden Zeile angezeigt: FoundationalLlmChatStack.NetworkingFoundationalLlmChat = CLOUDFRONT_DISTRIBUTION_ADDRESS
foundational-llm-chat-user-pool
. Öffnen Sie diesen Benutzerpool und erstellen Sie einen Benutzer, indem Sie auch die E-Mail-Adresse überprüfen.Um unnötige Kosten zu vermeiden, wird empfohlen, die von diesem Beispiel erstellten Ressourcen zu bereinigen und zu löschen, wenn Sie sie nicht mehr verwenden. Befolgen Sie diese Schritte, um den Stack und die zugehörigen Ressourcen zu löschen:
Foundational-LLM-ChatStack
.Dadurch wird der gesamte Stack gelöscht, einschließlich des ECS-Clusters, des Cognito-Benutzerpools, der CloudFront-Verteilung und aller anderen zugehörigen Ressourcen.
Alternativ können Sie das AWS CDK verwenden, um den Stack über die Befehlszeile zu löschen:
cdk destroy --region YOUR_DEPLOY_REGION
Ersetzen Sie YOUR_DEPLOY_REGION
durch die AWS-Region, in der Sie die Anwendung bereitgestellt haben.
Beachten Sie, dass durch das Löschen des Stacks nicht automatisch die CloudWatch-Protokolle und die Amazon ECS-Aufgabendefinition gelöscht werden, die während der Bereitstellung erstellt wurden. Möglicherweise möchten Sie diese Ressourcen manuell löschen, wenn Sie sie nicht mehr benötigen, um zusätzliche Kosten zu vermeiden.
Während die aktuelle Architektur einen guten Ausgangspunkt für die Bereitstellung der Foundational LLM Chat-Anwendung bietet, gibt es zusätzliche Überlegungen für eine produktionsbereite Bereitstellung:
In der aktuellen Architektur erfolgt die Kommunikation zwischen der CloudFront-Verteilung und dem Application Load Balancer (ALB) über HTTP. Für eine Produktionsbereitstellung wird dringend empfohlen, HTTPS (TLS/SSL) für die sichere Kommunikation zu verwenden:
Durch die Aktivierung von HTTPS mit TLS-Terminierung auf beiden Ebenen (ALB- und ECS-Aufgaben) wird eine Ende-zu-Ende-Verschlüsselung gewährleistet und die Sicherheit der Anwendung erhöht.
Dieses AWS-Beispiel ist nur für Demonstrations- und Bildungszwecke gedacht. Ohne weitere Modifikationen und Härtung ist es nicht für den Produktionseinsatz konzipiert. Bevor Sie diese Anwendung in einer Produktionsumgebung bereitstellen, ist es wichtig, gründliche Tests, Sicherheitsbewertungen und Optimierungen basierend auf Ihren spezifischen Anforderungen und Best Practices durchzuführen.
Systemaufforderungen für Claude können direkt aus der Anthropic-Dokumentation hier abgerufen werden: Systemaufforderungen
Beiträge sind willkommen! Bitte befolgen Sie den üblichen Git-Workflow:
Diese Bibliothek ist unter der MIT-0-Lizenz lizenziert. Siehe die LICENSE-Datei.
Sie sollten eine eigene unabhängige Bewertung in Betracht ziehen, bevor Sie den Inhalt dieses Beispiels für Produktionszwecke verwenden. Dies kann (unter anderem) das Testen, Sichern und Optimieren der in diesem Beispiel bereitgestellten Inhalte auf der Grundlage Ihrer spezifischen Qualitätskontrollpraktiken und -standards umfassen.