Póngase en marcha rápidamente con una aplicación de chat de IA en AWS que proporciona una base sobre la que construir.
Un ejemplo de un chatbot simple, pero escalable y listo para la empresa que implementa el patrón de generación aumentada de recuperación (RAG) sin depender de ningún marco o biblioteca de Python. Utiliza Bedrock Knowledge Bases para ingerir documentos en un depósito S3 y almacenar los vectores indexados en una base de datos Postgres alojada en Aurora Serverless. Esta base de datos también sirve como base de datos de la aplicación y almacena información como el historial de conversaciones del usuario. La aplicación implementa tanto una GUI web como una API HTTP JSON y está alojada como un contenedor que se ejecuta en ECS Fargate con un ALB. La aplicación está construida con Flask y HTMX.
Siga el proceso de 6 pasos a continuación para implementar esta solución en su cuenta de AWS.
Exporte las variables de entorno requeridas.
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, cree un depósito s3 para almacenar el estado de terraform (esto se recomienda ya que la contraseña inicial de la base de datos se almacenará en el estado). Si ya tiene un depósito s3, puede actualizar la variable BUCKET
con el nombre de su depósito (por ejemplo, export BUCKET=my-s3-bucket
).
aws s3 mb s3:// ${BUCKET}
Establezca los parámetros de entrada de la plantilla, como name
de la aplicación en terraform.tfvars
.
cd iac
cat << EOF > terraform.tfvars
name = "ai-chatbot"
tags = {
app = "ai-chatbot"
}
EOF
Implementar usando terraform.
terraform init -backend-config= " bucket= ${BUCKET} " -backend-config= " key=ai-chatbot.tfstate "
terraform apply
Ahora que se ha implementado la infraestructura, puede crear el contenedor de la aplicación e implementarlo encima de la infraestructura.
Si cambió el nombre de la aplicación de ai-chatbot
a otro, deberá pasarlo al comando make usando el parámetro app
(o cambiarlo en la parte superior de Makefile
).
Antes de la implementación, debería considerar cambiar el sistema y las indicaciones del usuario para que coincidan con sus requisitos específicos.
La primera vez que implemente, puede ejecutar lo siguiente para crear la imagen base y la imagen de la aplicación juntas.
cd ../
make baseimage && make deploy
Después de la implementación inicial, puede iterar los cambios de código más rápido simplemente reconstruyendo las capas de código y volviendo a implementarlas.
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
Tenga en cuenta que este script llama a la API bedrock-agent start-ingestion-job
. Este trabajo deberá completarse con éxito antes de que el chatbot pueda responder preguntas sobre sus documentos.
open $( terraform output -raw endpoint )
Además de la sencilla GUI HTMX, existe una API HTTP JSON que admite las siguientes acciones.
export endpoint= $( terraform output -raw endpoint )
Haga una pregunta y obtenga una respuesta.
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 hacer una pregunta de seguimiento como parte de una conversación, incluya la identificación de la conversación en la 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 "
}
Devolver las últimas 10 conversaciones
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 "
}
]
Devolver información sobre la conversación 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 "
}
Devolver las últimas 10 conversaciones de un usuario
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 ejecutar la aplicación localmente, cree un archivo local llamado .env
con las siguientes variables. La variable KNOWLEDGE_BASE_ID
proviene de la salida de Terraform ( cd iac && terraform output
).
POSTGRES_DB=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=xyz
KNOWLEDGE_BASE_ID=
Después de configurar su archivo .env
, puede ejecutar la aplicación localmente en la ventana acoplable para iterar los cambios de código antes de implementarla en AWS. Cuando se ejecuta la aplicación localmente, se comunica con una base de datos local de Postgres y utiliza la API remota de la base de conocimientos de Amazon Bedrock. Asegúrese de tener credenciales de AWS válidas. Al ejecutar el comando make up
se iniciará una instancia de base de datos postgres y un contenedor web.
make up
Para detener el entorno simplemente ejecute:
make down