Mit einer KI-Chat-Anwendung auf AWS, die eine Grundlage bietet, auf der Sie aufbauen können, können Sie schnell loslegen.
Ein Beispiel für einen einfachen, aber skalierbaren, unternehmenstauglichen Chatbot, der das RAG-Muster (Retrieval Augmented Generation) implementiert, ohne eine Abhängigkeit von Python-Frameworks/-Bibliotheken einzugehen. Es nutzt Bedrock Knowledge Bases, um Dokumente in einem S3-Bucket aufzunehmen und die indizierten Vektoren in einer Postgres-Datenbank zu speichern, die in Aurora Serverless gehostet wird. Diese Datenbank dient auch als Anwendungsdatenbank, in der Informationen wie der Verlauf der Benutzergespräche gespeichert werden. Die App implementiert sowohl eine Web-GUI als auch eine HTTP-JSON-API und wird als Container gehostet, der auf ECS Fargate mit einem ALB ausgeführt wird. Die App wird mit Flask und HTMX erstellt.
Befolgen Sie den folgenden 6-Schritte-Prozess, um diese Lösung in Ihrem AWS-Konto bereitzustellen.
Exportieren Sie erforderliche Umgebungsvariablen.
export AWS_REGION= $( aws configure get region || echo " us-east-1 " )
export ACCOUNT= $( aws sts get-caller-identity --query Account --output text )
export BUCKET=tf-state- ${ACCOUNT}
Erstellen Sie optional einen S3-Bucket zum Speichern des Terraform-Status (dies wird empfohlen, da das anfängliche Datenbankkennwort im Status gespeichert wird). Wenn Sie bereits über einen S3-Bucket verfügen, können Sie die BUCKET
Variable mit dem Namen Ihres Buckets aktualisieren (z. B. export BUCKET=my-s3-bucket
).
aws s3 mb s3:// ${BUCKET}
Legen Sie Vorlageneingabeparameter fest, z. B. den App- name
in terraform.tfvars
.
cd iac
cat << EOF > terraform.tfvars
name = "ai-chatbot"
tags = {
app = "ai-chatbot"
}
EOF
Bereitstellung mit Terraform.
terraform init -backend-config= " bucket= ${BUCKET} " -backend-config= " key=ai-chatbot.tfstate "
terraform apply
Nachdem die Infrastruktur nun bereitgestellt wurde, können Sie den App-Container erstellen und ihn auf der Infrastruktur bereitstellen.
Wenn Sie den App-Namen von ai-chatbot
in einen anderen Namen geändert haben, müssen Sie diesen mithilfe des app
Parameters an den make-Befehl übergeben (oder ihn oben in Makefile
ändern).
Vor der Bereitstellung sollten Sie erwägen, das System und die Benutzeraufforderungen an Ihre spezifischen Anforderungen anzupassen.
Bei der ersten Bereitstellung können Sie Folgendes ausführen, um das Basis-Image und das App-Image zusammen zu erstellen.
cd ../
make baseimage && make deploy
Nach der ersten Bereitstellung können Sie Codeänderungen schneller iterieren, indem Sie nur die Codeebenen neu erstellen und erneut bereitstellen.
make deploy
# OR
# make deploy app=my-cool-chatbot
cd iac
export DOCS_BUCKET= $( terraform output -raw s3_bucket_name )
aws s3 cp /path/to/docs/ s3:// ${DOCS_BUCKET} / --recursive
cd iac
make sync
Beachten Sie, dass dieses Skript die bedrock-agent start-ingestion-job
aufruft. Dieser Job muss erfolgreich abgeschlossen werden, bevor der Chatbot Fragen zu Ihren Dokumenten beantworten kann.
open $( terraform output -raw endpoint )
Zusätzlich zur einfachen HTMX-GUI gibt es eine HTTP-JSON-API, die die folgenden Aktionen unterstützt.
export endpoint= $( terraform output -raw endpoint )
Stellen Sie eine Frage und erhalten Sie eine Antwort.
curl -s -X POST -H " Content-Type: application/json " $endpoint /api/ask
-d ' { "question": "Who are you?" } ' | jq
{
"answer" : " ... " ,
"conversationId" : " 46ac5045-49b4-487c-b3a0-64d82462ad76 "
}
Um im Rahmen einer Konversation eine Folgefrage zu stellen, geben Sie die Konversations-ID in die URL ein.
curl -s -X POST -H " Content-Type: application/json " $endpoint /api/ask/46ac5045-49b4-487c-b3a0-64d82462ad76 -d ' { "question": What are you capable of?" } ' | jq
{
"answer" : " ... " ,
"conversationId" : " 46ac5045-49b4-487c-b3a0-64d82462ad76 "
}
Gibt die letzten 10 Gespräche zurück
curl -s $endpoint /api/conversations | jq
[
{
"conversationId" : " d61e143c-a32d-4b4f-aa4e-a0fe94082e77 " ,
"created" : " 2024-04-10T22:04:36.813819+00:00 " ,
"questions" : [
{
"a" : " ... " ,
"created" : " 2024-04-10 22:04:40.657402+00:00 " ,
"q" : " ... "
}
],
"userId" : " 1 "
},
{
"conversationId" : " aaddc6aa-7c51-4b0a-800d-53e72b05524f " ,
"created" : " 2024-04-10T22:01:16.071982+00:00 " ,
"questions" : [
{
"a" : " ... " ,
"created" : " 2024-04-10 22:01:18.500971+00:00 " ,
"q" : " ... "
},
{
"a" : " ... " ,
"created" : " 2024-04-10 22:01:27.328482+00:00 " ,
"q" : " ... "
}
],
"userId" : " 1 "
}
]
Gibt Informationen zur angegebenen Konversation zurück
curl -s $endpoint /api/conversations/d61e143c-a32d-4b4f-aa4e-a0fe94082e77 | jq
{
"conversationId" : " d61e143c-a32d-4b4f-aa4e-a0fe94082e77 " ,
"created" : " 2024-04-10T22:04:36.813819+00:00 " ,
"questions" : [
{
"a" : " ... " ,
"created" : " 2024-04-10 22:04:40.657402+00:00 " ,
"q" : " ... "
}
],
"userId" : " 1 "
}
Gibt die letzten 10 Konversationen für einen Benutzer zurück
curl -s $endpoint /api/conversations/users/1 | jq
[
{
"conversationId" : " d61e143c-a32d-4b4f-aa4e-a0fe94082e77 " ,
"created" : " 2024-04-10T22:04:36.813819+00:00 " ,
"questions" : [
{
"a" : " ... " ,
"created" : " 2024-04-10 22:04:40.657402+00:00 " ,
"q" : " ... "
}
],
"userId" : " 1 "
},
{
"conversationId" : " aaddc6aa-7c51-4b0a-800d-53e72b05524f " ,
"created" : " 2024-04-10T22:01:16.071982+00:00 " ,
"questions" : [
{
"a" : " ... " ,
"created" : " 2024-04-10 22:01:18.500971+00:00 " ,
"q" : " ... "
},
{
"a" : " ... " ,
"created" : " 2024-04-10 22:01:27.328482+00:00 " ,
"q" : " ... "
}
],
"userId" : " 1 "
}
]
Choose a make command to run
init run this once to initialize a new python project
install install project dependencies
start run local project
baseimage build base image
deploy build and deploy container
up run the app locally using docker compose
down stop the app
start-docker run local project using docker compose
Um die App lokal auszuführen, erstellen Sie eine lokale Datei namens .env
mit den folgenden Variablen. Die Variable KNOWLEDGE_BASE_ID
stammt aus der Terraform-Ausgabe ( cd iac && terraform output
).
POSTGRES_DB=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=xyz
KNOWLEDGE_BASE_ID=
Nachdem Sie Ihre .env
Datei eingerichtet haben, können Sie die App lokal in Docker ausführen, um Codeänderungen zu iterieren, bevor Sie sie in AWS bereitstellen. Wenn die App lokal ausgeführt wird, kommuniziert sie mit einer lokalen Postgres-Datenbank und verwendet die Remote-API der Amazon Bedrock Knowledge Base. Stellen Sie sicher, dass Sie über gültige AWS-Anmeldeinformationen verfügen. Durch Ausführen des make up
-Befehls werden eine Postgres-Datenbankinstanz und ein Webcontainer gestartet.
make up
Um die Umgebung zu stoppen, führen Sie einfach Folgendes aus:
make down