Bangun dan jalankan dengan cepat menggunakan aplikasi obrolan AI di AWS yang memberikan landasan untuk dibangun.
Contoh chatbot sederhana namun dapat diskalakan dan siap digunakan untuk perusahaan yang mengimplementasikan pola pengambilan augmented generasi (RAG) tanpa bergantung pada kerangka kerja/pustaka Python apa pun. Ia menggunakan Basis Pengetahuan Batuan Dasar untuk menyerap dokumen dalam bucket S3 dan menyimpan vektor yang diindeks dalam database Postgres yang dihosting di Aurora Tanpa Server. Basis data ini juga berfungsi sebagai basis data aplikasi yang menyimpan informasi seperti riwayat percakapan pengguna. Aplikasi ini mengimplementasikan GUI web serta API HTTP JSON dan dihosting sebagai kontainer yang berjalan di ECS Fargate yang dilengkapi dengan ALB. Aplikasi ini dibuat menggunakan Flask dan HTMX.
Ikuti proses 6 langkah di bawah ini untuk menerapkan solusi ini ke akun AWS Anda.
Ekspor variabel lingkungan yang diperlukan.
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}
Secara opsional, buat bucket s3 untuk menyimpan status terraform (ini disarankan karena kata sandi db awal akan disimpan di status tersebut). Jika Anda sudah memiliki bucket s3, Anda dapat memperbarui variabel BUCKET
dengan nama bucket Anda (misalnya, export BUCKET=my-s3-bucket
).
aws s3 mb s3:// ${BUCKET}
Tetapkan parameter masukan template, seperti name
aplikasi di terraform.tfvars
.
cd iac
cat << EOF > terraform.tfvars
name = "ai-chatbot"
tags = {
app = "ai-chatbot"
}
EOF
Terapkan menggunakan terraform.
terraform init -backend-config= " bucket= ${BUCKET} " -backend-config= " key=ai-chatbot.tfstate "
terraform apply
Kini infrastruktur telah diterapkan, Anda dapat membangun wadah aplikasi dan menerapkannya di atas infrastruktur.
Jika Anda mengubah nama aplikasi dari ai-chatbot
menjadi nama lain, Anda harus meneruskannya ke perintah make menggunakan parameter app
(atau mengubahnya di bagian atas Makefile
).
Sebelum menerapkan, Anda harus mempertimbangkan untuk mengubah sistem dan perintah pengguna agar sesuai dengan kebutuhan spesifik Anda.
Saat pertama kali menerapkan, Anda dapat menjalankan perintah berikut untuk membangun citra dasar dan citra aplikasi secara bersamaan.
cd ../
make baseimage && make deploy
Setelah penerapan awal, Anda dapat mengulangi perubahan kode lebih cepat hanya dengan membangun kembali lapisan kode dan menerapkan ulang.
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
Perhatikan bahwa skrip ini memanggil API bedrock-agent start-ingestion-job
. Pekerjaan ini harus berhasil diselesaikan sebelum chatbot dapat menjawab pertanyaan tentang dokumen Anda.
open $( terraform output -raw endpoint )
Selain GUI HTMX sederhana, ada API HTTP JSON yang mendukung tindakan berikut.
export endpoint= $( terraform output -raw endpoint )
Ajukan pertanyaan dan dapatkan jawaban kembali.
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 "
}
Untuk mengajukan pertanyaan lanjutan sebagai bagian dari percakapan, sertakan id percakapan di URL.
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 "
}
Kembalikan 10 percakapan terbaru
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 "
}
]
Kembalikan informasi tentang percakapan yang ditentukan
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 "
}
Menampilkan 10 percakapan terbaru untuk pengguna
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
Untuk menjalankan aplikasi secara lokal, buat file lokal bernama .env
dengan variabel berikut. Variabel KNOWLEDGE_BASE_ID
berasal dari keluaran Terraform ( cd iac && terraform output
).
POSTGRES_DB=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=xyz
KNOWLEDGE_BASE_ID=
Setelah menyiapkan file .env
, Anda dapat menjalankan aplikasi secara lokal di buruh pelabuhan untuk mengulangi perubahan kode sebelum menerapkan ke AWS. Saat menjalankan aplikasi secara lokal, aplikasi berkomunikasi dengan database postgres lokal dan menggunakan API Basis Pengetahuan Amazon Bedrock jarak jauh. Pastikan Anda memiliki kredensial AWS yang valid. Menjalankan perintah make up
akan memulai instance database postgres dan container web.
make up
Untuk menghentikan lingkungan cukup jalankan:
make down