This is a test project for AWS AI ChatBot development with RAG using Bedrock, Lambda, DocumentDB.
Presentation PDF file from AWS event is uploaded to the root of repository.
Amazon AWS account with activated access to models in AWS Bedrock service:
- Amazon Titan Embedding G1 - Text
- Anthropic Claude 3 Sonnet
- Install AWS CLI as described here (if not yet installed): https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html
aws --version
to test if AWS CLI installed and its version
- Install AWS CDK CLI (if not yet installed):
aws sso login
to start AWS portal sessionaws sts get-caller-identity
to test if session exists and to get current account numbernpm install -g aws-cdk
to install AWS CDK CLI
- Bootstrap your CDK environment and configure default region to one that has Bedrock service (for example: us-east-1):
cdk bootstrap aws://ACCOUNT-NUMBER/REGION
to bootstrap CDK environment for specific account and region (if not yet bootstraped)aws configure get region
to check currently set regionaws configure set region us-east-1
to set another region (in this example: us-east-1)
- Deploy infrastructure using AWS CDK CLI from ./cdk folder:
npm install
install dependenciesnpx cdk synth
verify and emit the synthesized CloudFormation template (see possible parameters below)npx cdk deploy
deploy this stack to your default AWS account/region (see possible parameters below)npx cdk diff
compare deployed stack with current state Possible parameters for deploying:
upload-documents=true
(default - false) will process files embedding automatically at moment of deployingdeploy-instance=true
(default - false) will deploy EC2 micro instance in VPC to query DocumentDB data for review Sample commands with extra parameters:
npx cdk synth -c upload-documents=true -c deploy-instance=true
npx cdk deploy -c upload-documents=true -c deploy-instance=true
After you are done with this demo, don't forget to remove all deployed infranstructure, by running command:
npx cdk destroy
After successfull deployment with npx cdk deploy
there will be an output like:
AwsAiChatbotStack.websiteDistributionUrl = https://**************.cloudfront.net
Copy and paste this URL into the browser window.
If you didn't choose to upload documents at the moment of deploying, you can upload it manually in S3 to content bucket. Embed lambda function will be immediatelly triggered and documents will be converted into the embedding vectors.
If you chose to deploy monitoring EC2 instance you can connect to it via AWS Console using EC2 Instance Connect Endpoint (to connect to private IP4 address), and then run commands to connect to mongo per instructions provided at DocumentDB cluster page, but instead of mongo
use mongosh
. You can find connection password at AWS Secrets Manager.
This application is only for demo purposes and not for production use. For production use several improvements must be done:
- on AWS level: use separate AWS roles and separate security groups, consider having lambda step functions for main service, add WAF with CloudFront, add Amazon Textract for PDF files processing etc
- on application level: improve error handling, add security hash to prevent unauthorized use, provide a history as context, add filtering by similarity score, supply more than one context chunk, add security guardrails into prompts etc.