Быстро приступайте к работе с помощью приложения для чата с искусственным интеллектом на AWS, которое обеспечивает основу для дальнейшего развития.
Пример простого, но масштабируемого чат-бота, готового к использованию на предприятии, который реализует шаблон расширенной генерации (RAG) без зависимости от каких-либо фреймворков/библиотек Python. Он использует базы знаний Bedrock для приема документов в корзину S3 и хранения индексированных векторов в базе данных Postgres, размещенной в Aurora Serverless. Эта база данных также служит базой данных приложения, в которой хранится такая информация, как история разговоров пользователей. Приложение реализует как веб-графический интерфейс, так и HTTP JSON API и размещается в виде контейнера, работающего на ECS Fargate с интерфейсом ALB. Приложение создано с использованием Flask и HTMX.
Выполните описанный ниже шестиэтапный процесс для развертывания этого решения в вашей учетной записи 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 для хранения состояния terraform (это рекомендуется, поскольку исходный пароль базы данных будет храниться в состоянии). Если у вас уже есть корзина 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
Обратите внимание, что этот сценарий вызывает API-интерфейс bedrock-agent start-ingestion-job
. Это задание необходимо успешно выполнить, прежде чем чат-бот сможет отвечать на вопросы о ваших документах.
open $( terraform output -raw endpoint )
В дополнение к простому графическому интерфейсу HTMX существует API HTTP JSON, который поддерживает следующие действия.
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