소개
전제조건
대상 기술 스택
전개
유용한 CDK 명령
코드 구조
자신의 데이터로 챗봇을 맞춤화하세요
이 GenAI ChatBot 애플리케이션은 KnowledgeBase, 에이전트 및 추가 AWS 서버리스 GenAI 솔루션이 포함된 Amazon Bedrock을 사용하여 구축되었습니다. 제공된 솔루션은 EC2 인스턴스에 대한 이해와 EC2 인스턴스 가격을 활용하는 Chatbot을 보여줍니다. 이 챗봇은 자연어를 Amazon Athena 쿼리로 변환하고 복잡한 데이터 세트를 처리 및 활용하는 Amazon Bedrock의 기능을 보여주는 역할을 합니다. LLamaIndex와 같은 오픈 소스 도구는 데이터 처리 및 검색을 위한 시스템 기능을 강화하는 데 활용됩니다. 솔루션에서는 여러 AWS 리소스의 통합도 강조됩니다. 이러한 리소스는 스토리지용 Amazon S3, RAG(검색 증강 생성)를 용이하게 하는 Amazon Bedrock KnowledgeBase, 데이터 소스 전반에 걸쳐 다단계 작업을 실행하는 Amazon Bedrock 에이전트, 데이터 준비를 위한 AWS Glue, 효율적인 쿼리 실행을 위한 Amazon Athena, 컨테이너를 관리하고, Amazon ECS는 컨테이너를 감독합니다. 이러한 리소스를 결합하여 활용하면 Chatbot이 데이터베이스와 문서에서 콘텐츠를 효율적으로 검색하고 관리할 수 있으므로 고급 Chatbot 애플리케이션 개발에서 Amazon Bedrock의 기능을 입증할 수 있습니다.
도커
AWS CDK 도구 키트 2.114.1+가 설치 및 구성되었습니다. 자세한 내용은 AWS CDK 설명서의 AWS CDK 시작하기를 참조하세요.
Python 3.11+, 설치 및 구성. 자세한 내용은 Python 설명서의 초보자 가이드/다운로드를 참조하세요.
활성 AWS 계정
us-east-1 또는 us-west-2에서 AWS CDK를 사용하여 부트스트랩된 AWS 계정. Bedrock 서비스에서 Claude 모델 및 Titan Embedding 모델 액세스를 활성화합니다.
아마존 기반암
Amazon OpenSearch 서버리스
아마존 ECS
AWS 글루
AWS 람다
아마존 S3
아마존 아테나
탄력적 로드 밸런서
앱을 로컬에서 실행하려면 먼저 다음을 포함하는 'code/streamlit-app' 폴더에 .env 파일을 추가하세요.
ACCOUNT_ID = <귀하의 계정 ID>AWS_REGION = <귀하의 지역>LAMBDA_FUNCTION_NAME = InvokeAgentLambda # 응답을 위해 streamlit이 호출하는 람다 함수에 대한 선택 이름을 설정합니다. 현재 에이전트를 호출합니다.
cdk.json
파일은 CDK 도구 키트에 앱 실행 방법을 알려줍니다.
이 프로젝트는 표준 Python 프로젝트처럼 설정됩니다. 또한 초기화 프로세스는 이 프로젝트 내에 .venv
디렉터리에 저장된 virtualenv를 생성합니다. virtualenv를 생성하려면 venv
패키지에 액세스할 수 있는 경로에 python3
(또는 Windows용 python
) 실행 파일이 있다고 가정합니다. 어떤 이유로든 virtualenv 자동 생성에 실패하면 virtualenv를 수동으로 생성할 수 있습니다.
MacOS 및 Linux에서 virtualenv를 수동으로 생성하려면:
$ python3 -m venv .venv
init 프로세스가 완료되고 virtualenv가 생성되면 다음 단계를 사용하여 virtualenv를 활성화할 수 있습니다.
$ 소스 .venv/bin/activate
Windows 플랫폼인 경우 다음과 같이 virtualenv를 활성화합니다.
% .venvScriptsactivate.bat
virtualenv가 활성화되면 필요한 종속성을 설치할 수 있습니다.
$ pip 설치 -r 요구사항.txt
다른 CDK 라이브러리와 같은 추가 종속성을 추가하려면 setup.py
파일에 추가하고 pip install -r requirements.txt
명령을 다시 실행하세요.
이제 이 코드에 대한 CloudFormation 템플릿을 합성할 수 있습니다.
$ CDK 신디사이저
다른 CDK 라이브러리와 같은 추가 종속성을 추가하려면 setup.py
파일에 추가하고 pip install -r requirements.txt
명령을 다시 실행하세요.
특정 계정 및 지역에서 처음으로 CDK를 실행하는 경우 부트스트랩을 수행해야 합니다.
$ CDK 부트스트랩
부트스트랩이 완료되면 CDK 배포를 진행할 수 있습니다.
$ CDK 배포
처음 배포하는 경우 ECS(Amazon Elastic Container Service)에서 여러 Docker 이미지를 빌드하는 데 약 30~45분 정도 걸릴 수 있습니다. 완료될 때까지 기다려 주시기 바랍니다. 그 후, 일반적으로 약 5~8분 정도 소요되는 챗봇 스택 배포가 시작됩니다.
배포 프로세스가 완료되면 터미널에 CDK 출력이 표시되고 CloudFormation 콘솔에서도 상태를 확인할 수 있습니다.
AWS 콘솔에서 또는 CloudFormation의 chatbot-stack 출력에 나열된 스트림라이트 앱 URL을 통해 에이전트를 테스트할 수 있습니다.
향후 비용을 피하기 위해 사용을 마친 CDK를 삭제하려면 콘솔을 통해 삭제하거나 터미널에서 다음 명령을 실행하면 됩니다.
$ CDK 파괴
CDK에서 생성된 S3 버킷을 수동으로 삭제해야 할 수도 있습니다. 비용이 발생하지 않도록 생성된 리소스를 모두 삭제하시기 바랍니다.
cdk ls
앱의 모든 스택을 나열합니다.
cdk synth
합성된 CloudFormation 템플릿을 내보냅니다.
cdk deploy
이 스택을 기본 AWS 계정/지역에 배포
cdk diff
배포된 스택을 현재 상태와 비교
cdk docs
열기 CDK 문서
cdk destroy
하나 이상의 지정된 스택을 파괴합니다.
code # Root folder for code for this solution ├── lambdas # Root folder for all lambda functions │ ├── action-lambda # Lambda function that acts as an action for the Amazon Bedrock Agent │ ├── create-index-lambda # Lambda function that create Amazon Opensearch serverless index as Amazon Bedrock Knowlege base's vector database │ ├── invoke-lambda # Lambda function that invokes Amazon Bedrock Agent, which is called diretly from the streamlit app │ └── update-lambda # Lambda function that update/delete resources after AWS resources deployed via AWS CDK. ├── layers # Root folder for all lambda layers │ ├── boto3_layer # Boto3 layer that is shared across all lambdas │ └── opensearch_layer # opensearh layer that installs all dependencies for create Amazon Opensearch serverless index. ├── streamlit-app # Steamlit app that interacts with the Amazon Bedrock Agent └── code_stack.py # Amazon CDK stack that deploys all AWS resources
솔루션 배포를 위해 사용자 정의 데이터를 통합하려면 요구 사항에 맞게 구성된 다음 구조적 지침을 따르십시오.
assets/knowledgebase_data_source/
디렉토리를 찾으십시오.
데이터세트를 이 폴더 안에 넣으세요.
cdk.json
파일에 액세스합니다.
context/configure/paths/knowledgebase_file_name
필드로 이동하여 그에 따라 업데이트하십시오.
또한 cdk.json
파일의 bedrock_instructions/knowledgebase_instruction
필드를 수정하여 새 데이터세트의 뉘앙스와 컨텍스트를 정확하게 반영하세요.
assets/data_query_data_source/
디렉터리 내에서 tabular_data와 같은 하위 디렉터리를 만듭니다.
새로 생성된 하위 폴더에 구조화된 데이터 세트(허용되는 형식에는 CSV , JSON , ORC 및 Parquet 포함)를 저장합니다.
기존 데이터베이스 에 연결하는 경우 code/lambda/action-lambda/build_query_engine.py
에서 create_sql_engine()
함수를 업데이트하여 데이터베이스에 연결하세요.
새 데이터 경로에 맞게 cdk.json
파일의 context/configure/paths/athena_table_data_prefix
필드를 업데이트합니다.
데이터세트에 해당하는 SQL 예제에 새 텍스트를 통합하여 code/lambda/action-lambda/dynamic_examples.csv
수정하세요.
새로운 표 형식 데이터의 속성을 반영하도록 code/lambda/action-lambda/prompt_templates.py
수정하세요.
cdk.json
파일의 context/configure/bedrock_instructions/action_group_description
필드를 수정하여 데이터 세트에 맞게 조정된 작업 람다의 목적과 기능을 설명합니다.
assets/agent_api_schema/artifacts_schema.json
파일에 작업 람다의 새로운 기능을 반영합니다.
cdk.json
파일의 context/configure/bedrock_instructions/agent_instruction section
아래에 새로 통합된 데이터를 고려하여 Amazon Bedrock 에이전트의 의도된 기능과 설계 목적에 대한 포괄적인 설명을 제공합니다.
이러한 단계는 원활하고 효율적인 통합 프로세스를 보장하여 맞춤형 데이터를 사용하여 솔루션을 효과적으로 배포할 수 있도록 설계되었습니다.