구축 기반을 제공하는 AWS에서 AI 채팅 애플리케이션을 빠르게 시작하고 실행하세요.
Python 프레임워크/라이브러리에 의존하지 않고 검색 증강 생성(RAG) 패턴을 구현하는 간단하면서도 확장 가능한 엔터프라이즈 지원 챗봇의 예입니다. Bedrock 기술 자료를 사용하여 S3 버킷에 문서를 수집하고 Aurora Serverless에서 호스팅되는 Postgres 데이터베이스에 인덱싱된 벡터를 저장합니다. 이 데이터베이스는 사용자 대화 이력 등의 정보를 저장하는 애플리케이션 데이터베이스 역할도 합니다. 이 앱은 웹 GUI와 HTTP JSON API를 모두 구현하고 ALB가 있는 ECS Fargate에서 실행되는 컨테이너로 호스팅됩니다. 이 앱은 Flask와 HTMX를 사용하여 구축되었습니다.
이 솔루션을 AWS 계정에 배포하려면 아래 6단계 프로세스를 따르십시오.
필수 환경 변수를 내보냅니다.
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}
선택적으로 Terraform 상태를 저장할 s3 버킷을 생성합니다(초기 db 비밀번호가 상태에 저장되므로 권장됩니다). s3 버킷이 이미 있는 경우 버킷 이름으로 BUCKET
변수를 업데이트할 수 있습니다(예: export BUCKET=my-s3-bucket
).
aws s3 mb s3:// ${BUCKET}
terraform.tfvars
의 앱 name
과 같은 템플릿 입력 매개변수를 설정합니다.
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
에서 다른 이름으로 변경한 경우 app
매개변수를 사용하여 make 명령에 해당 이름을 전달해야 합니다(또는 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에 대화 ID를 포함하세요.
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 데이터베이스와 통신하고 원격 Amazon Bedrock Knowledge Base API를 사용합니다. 유효한 AWS 자격 증명이 있는지 확인하십시오. make up
명령을 실행하면 postgres 데이터베이스 인스턴스와 웹 컨테이너가 시작됩니다.
make up
환경을 중지하려면 다음을 실행하세요.
make down