เริ่มต้นและดำเนินการอย่างรวดเร็วด้วยแอปพลิเคชันแชท AI บน AWS ที่ให้รากฐานในการต่อยอด
ตัวอย่างของแชทบอตที่พร้อมใช้งานระดับองค์กรที่เรียบง่าย แต่ปรับขนาดได้ ซึ่งใช้รูปแบบการเรียกข้อมูลแบบ Augmented Generation (RAG) โดยไม่ต้องพึ่งพาเฟรมเวิร์ก/ไลบรารีของ Python ใช้ฐานความรู้ Bedrock เพื่อนำเข้าเอกสารในบัคเก็ต S3 และจัดเก็บเวกเตอร์ที่จัดทำดัชนีไว้ในฐานข้อมูล Postgres ที่โฮสต์ใน Aurora Serverless ฐานข้อมูลนี้ยังทำหน้าที่เป็นฐานข้อมูลแอปพลิเคชันที่จัดเก็บข้อมูล เช่น ประวัติการสนทนาของผู้ใช้ แอปนี้ใช้ทั้งเว็บ GUI และ HTTP JSON API และโฮสต์เป็นคอนเทนเนอร์ที่ทำงานบน ECS Fargate ซึ่งมี ALB อยู่ด้านหน้า แอปนี้สร้างขึ้นโดยใช้ Flask และ HTMX
ปฏิบัติตามกระบวนการ 6 ขั้นตอนด้านล่างเพื่อปรับใช้โซลูชันนี้ในบัญชี AWS ของคุณ
ส่งออกตัวแปรสภาพแวดล้อมที่จำเป็น
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}
หรือสร้างบัคเก็ต s3 เพื่อจัดเก็บสถานะพื้นผิว (แนะนำเนื่องจากรหัสผ่าน db เริ่มต้นจะถูกจัดเก็บไว้ในสถานะ) หากคุณมีบัคเก็ต s3 อยู่แล้ว คุณสามารถอัปเดตตัวแปร BUCKET
ด้วยชื่อบัคเก็ตของคุณได้ (เช่น export BUCKET=my-s3-bucket
)
aws s3 mb s3:// ${BUCKET}
ตั้งค่าพารามิเตอร์อินพุตเทมเพลต เช่น name
แอปใน terraform.tfvars
cd iac
cat << EOF > terraform.tfvars
name = "ai-chatbot"
tags = {
app = "ai-chatbot"
}
EOF
ปรับใช้โดยใช้ Terraform
terraform init -backend-config= " bucket= ${BUCKET} " -backend-config= " key=ai-chatbot.tfstate "
terraform apply
เมื่อโครงสร้างพื้นฐานถูกปรับใช้แล้ว คุณสามารถสร้างคอนเทนเนอร์ของแอปและปรับใช้บนโครงสร้างพื้นฐานได้
หากคุณเปลี่ยนชื่อแอปจาก ai-chatbot
เป็นชื่ออื่น คุณจะต้องส่งต่อไปยังคำสั่ง make โดยใช้พารามิเตอร์ app
(หรือเปลี่ยนที่ด้านบนของ Makefile
)
ก่อนใช้งาน คุณควรพิจารณาเปลี่ยนระบบและพร้อมท์ผู้ใช้เพื่อให้ตรงกับความต้องการเฉพาะของคุณ
ครั้งแรกที่คุณปรับใช้ คุณสามารถเรียกใช้สิ่งต่อไปนี้เพื่อสร้างอิมเมจพื้นฐานและอิมเมจของแอปร่วมกัน
cd ../
make baseimage && make deploy
หลังจากการปรับใช้ครั้งแรก คุณสามารถวนซ้ำการเปลี่ยนแปลงโค้ดได้เร็วขึ้นโดยการสร้างเลเยอร์โค้ดใหม่และปรับใช้ใหม่เท่านั้น
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
โปรดทราบว่าสคริปต์นี้เรียก bedrock-agent start-ingestion-job
API งานนี้จะต้องเสร็จสิ้นก่อนที่แชทบอทจะสามารถตอบคำถามเกี่ยวกับเอกสารของคุณได้
open $( terraform output -raw endpoint )
นอกจาก HTMX GUI แบบธรรมดาแล้ว ยังมี HTTP JSON API ที่รองรับการดำเนินการต่อไปนี้
export endpoint= $( terraform output -raw endpoint )
ถามคำถามและรับคำตอบกลับ
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 "
}
หากต้องการถามคำถามติดตามผลโดยเป็นส่วนหนึ่งของการสนทนา ให้รวมรหัสการสนทนาใน 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 "
}
ส่งคืนการสนทนา 10 รายการล่าสุด
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 "
}
]
ส่งกลับข้อมูลเกี่ยวกับการสนทนาที่ระบุ
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 "
}
ส่งคืนการสนทนา 10 รายการล่าสุดสำหรับผู้ใช้
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
หากต้องการเรียกใช้แอปในเครื่อง ให้สร้างไฟล์ในเครื่องชื่อ .env
พร้อมด้วยตัวแปรต่อไปนี้ ตัวแปร KNOWLEDGE_BASE_ID
มาจากเอาต์พุต Terraform ( cd iac && terraform output
)
POSTGRES_DB=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=xyz
KNOWLEDGE_BASE_ID=
หลังจากตั้งค่าไฟล์ .env
แล้ว คุณสามารถเรียกใช้แอปภายในเครื่องด้วย Docker เพื่อวนซ้ำการเปลี่ยนแปลงโค้ดก่อนที่จะปรับใช้กับ AWS เมื่อเรียกใช้แอปในเครื่อง แอปจะพูดคุยกับฐานข้อมูล postgres ในเครื่อง และใช้ API ฐานความรู้ Amazon Bedrock ระยะไกล ตรวจสอบให้แน่ใจว่าคุณมีข้อมูลรับรอง AWS ที่ถูกต้อง การรันคำสั่ง make up
จะเริ่มอินสแตนซ์ฐานข้อมูล postgres และเว็บคอนเทนเนอร์
make up
หากต้องการหยุดสภาพแวดล้อมเพียงแค่เรียกใช้:
make down