Comece a trabalhar rapidamente com um aplicativo de bate-papo de IA na AWS que fornece uma base para o desenvolvimento.
Um exemplo de chatbot simples, mas escalável e pronto para empresas que implementa o padrão de geração aumentada de recuperação (RAG) sem depender de nenhuma estrutura/biblioteca Python. Ele usa bases de conhecimento Bedrock para ingerir documentos em um bucket S3 e armazenar os vetores indexados em um banco de dados Postgres hospedado no Aurora Serverless. Esse banco de dados também serve como banco de dados do aplicativo, armazenando informações como o histórico de conversas do usuário. O aplicativo implementa uma GUI da web, bem como uma API HTTP JSON e é hospedado como um contêiner em execução no ECS Fargate com um ALB. O aplicativo é construído usando Flask e HTMX.
Siga o processo de 6 etapas abaixo para implantar esta solução em sua conta AWS.
Exporte variáveis de ambiente necessárias.
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}
Opcionalmente, crie um bucket s3 para armazenar o estado do terraform (isso é recomendado, pois a senha inicial do banco de dados será armazenada no estado). Se você já possui um bucket s3, poderá atualizar a variável BUCKET
com o nome do seu bucket (por exemplo, export BUCKET=my-s3-bucket
).
aws s3 mb s3:// ${BUCKET}
Defina parâmetros de entrada do modelo, como name
do aplicativo em terraform.tfvars
.
cd iac
cat << EOF > terraform.tfvars
name = "ai-chatbot"
tags = {
app = "ai-chatbot"
}
EOF
Implante usando terraform.
terraform init -backend-config= " bucket= ${BUCKET} " -backend-config= " key=ai-chatbot.tfstate "
terraform apply
Agora que a infraestrutura foi implantada, você pode criar o contêiner do aplicativo e implantá-lo na infraestrutura.
Se você alterou o nome do aplicativo de ai-chatbot
para outro nome, você precisará passar isso para o comando make usando o parâmetro app
(ou alterá-lo na parte superior do Makefile
).
Antes da implantação, você deve considerar alterar o sistema e os prompts do usuário para atender aos seus requisitos específicos.
Na primeira vez que você implantar, você pode executar o seguinte para criar a imagem base e a imagem do aplicativo juntas.
cd ../
make baseimage && make deploy
Após a implantação inicial, você pode iterar as alterações de código mais rapidamente reconstruindo apenas as camadas de código e reimplantando.
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
Observe que esse script chama a API bedrock-agent start-ingestion-job
. Este trabalho precisará ser concluído com êxito antes que o chatbot possa responder a perguntas sobre seus documentos.
open $( terraform output -raw endpoint )
Além da GUI HTMX simples, há uma API HTTP JSON que oferece suporte às seguintes ações.
export endpoint= $( terraform output -raw endpoint )
Faça uma pergunta e receba uma resposta.
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 "
}
Para fazer uma pergunta de acompanhamento como parte de uma conversa, inclua o ID da conversa no 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 "
}
Retornar as últimas 10 conversas
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 "
}
]
Retornar informações sobre a conversa especificada
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 "
}
Retornar as últimas 10 conversas de um usuário
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
Para executar o aplicativo localmente, crie um arquivo local denominado .env
com as seguintes variáveis. A variável KNOWLEDGE_BASE_ID
vem da saída do Terraform ( cd iac && terraform output
).
POSTGRES_DB=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=xyz
KNOWLEDGE_BASE_ID=
Depois de configurar seu arquivo .env
, você pode executar o aplicativo localmente no docker para iterar nas alterações de código antes de implantar na AWS. Ao executar o aplicativo localmente, ele se comunica com um banco de dados postgres local e usa a API remota da base de conhecimento do Amazon Bedrock. Certifique-se de ter credenciais válidas da AWS. A execução do comando make up
iniciará uma instância de banco de dados postgres e um contêiner da web.
make up
Para parar o ambiente simplesmente execute:
make down