QnABot on AWS는 고객의 질문, 답변 및 피드백에 응답하는 다중 채널, 다중 언어 대화 인터페이스(챗봇)입니다. 채팅, 음성, SMS 및 Amazon Alexa를 포함한 여러 채널에 걸쳐 완전한 기능을 갖춘 챗봇을 배포할 수 있습니다. 솔루션의 컨텐츠 관리 환경과 컨택 센터 통합 마법사를 사용하면 다음과 같은 이점을 제공하는 환경을 설정하고 사용자 정의할 수 있습니다.
지능적인 다중 부분 상호 작용을 통해 개인화된 튜토리얼과 질문 및 답변 지원을 제공하여 고객 경험을 향상시킵니다.
고객 지원 워크플로를 자동화하여 콜센터 대기 시간을 줄입니다.
최신 기계 학습 기술을 구현하여 챗봇을 위한 매력적인 인간과 같은 상호 작용을 생성합니다.
기본 매개변수를 사용하여 이 솔루션을 배포하면 AWS 계정에 다음 구성 요소가 배포됩니다(경계 구성 요소는 선택 사항).
그림 1: AWS 아키텍처의 QnABot
AWS CloudFormation 템플릿을 사용하여 배포된 솔루션 구성 요소에 대한 대략적인 프로세스 흐름은 다음과 같습니다.
관리자는 AWS 계정에 솔루션을 배포하고, Content Designer UI 또는 Amazon Lex 웹 클라이언트를 열고, Amazon Cognito를 사용하여 인증합니다.
인증 후 Amazon API Gateway 및 Amazon S3는 콘텐츠 디자이너 UI의 콘텐츠를 제공합니다.
관리자는 콘텐츠 디자이너에서 질문과 답변을 구성하고 UI는 질문과 답변을 저장하기 위해 Amazon API Gateway에 요청을 보냅니다.
Content Designer
AWS Lambda 함수는 Amazon OpenSearch Service의 입력을 문제 은행 인덱스에 저장합니다. 텍스트 임베딩을 사용하는 경우 이러한 요청은 먼저 Amazon Bedrock 또는 Amazon SageMaker에서 호스팅되는 LLM 모델을 통과하여 임베딩을 생성한 후 OpenSearch의 문제 은행에 저장됩니다. 또한 Content Designer
AWS Systems Manager Parameter Store에 기본 및 사용자 지정 구성 설정을 저장합니다.
챗봇 사용자는 웹 클라이언트 UI, Amazon Alexa 또는 Amazon Connect를 통해 Amazon Lex와 상호 작용합니다.
Amazon Lex는 요청을 Bot Fulfillment
AWS Lambda 함수로 전달합니다. 사용자는 Amazon Alexa 장치를 통해 이 Lambda 함수에 요청을 보낼 수도 있습니다.
사용자 및 채팅 정보는 이전 질문 및 답변 컨텍스트와 후속 질문을 명확하게 구분하기 위해 Amazon DynamoDB에 저장됩니다.
Bot Fulfillment
AWS Lambda 함수는 사용자 입력을 받아 Amazon Comprehend 및 Amazon Translate(필요한 경우)를 사용하여 비모국어 요청을 배포 중에 사용자가 선택한 모국어로 번역한 다음 Amazon OpenSearch Service에서 답변을 찾습니다. . 텍스트 생성 및 텍스트 임베딩과 같은 LLM 기능을 사용하는 경우 이러한 요청은 먼저 Amazon Bedrock 또는 Amazon SageMaker에서 호스팅되는 다양한 LLM 모델을 통과하여 OpenSearch의 문제 은행에 저장된 것과 비교할 검색어 및 임베딩을 생성합니다.
OpenSearch 문제 은행에서 일치 항목이 반환되지 않으면 Bot 이행 Lambda 함수는 다음과 같이 요청을 전달합니다.
에이. Amazon Kendra 인덱스가 대체용으로 구성된 경우 OpenSearch 문제 은행에서 일치 항목이 반환되지 않으면 Bot Fulfillment
AWS Lambda 함수가 요청을 Kendra로 전달합니다. 텍스트 생성 LLM은 선택적으로 검색 쿼리를 생성하고 반환된 문서 발췌문에서 응답을 합성하는 데 사용될 수 있습니다.
비. Bedrock Knowledge Base ID가 구성된 경우 Bot Fulfillment
AWS Lambda 함수는 요청을 Bedrock Knowledge Base로 전달합니다. Bot Fulfillment
AWS Lambda 함수는 RetrieveAndGenerate API를 활용하여 사용자 쿼리에 대한 관련 결과를 가져오고, 기본 모델의 프롬프트를 강화하고, 응답을 반환합니다.
Bot Fulfillment
기능과의 사용자 상호 작용은 로그 및 지표 데이터를 생성하며, 이 데이터는 Amazon Kinesis Data Firehose로 전송된 후 나중에 데이터 분석을 위해 Amazon S3로 전송됩니다. OpenSearch 대시보드는 사용 내역, 기록된 발화, 히트 없음 발화, 긍정적인 사용자 피드백 및 부정적인 사용자 피드백을 보는 데 사용할 수 있으며 사용자 정의 보고서를 생성하는 기능도 제공합니다.
OpenSearch 대시보드를 사용하면 사용 내역, 기록된 발화, 히트 없음 발화, 긍정적인 사용자 피드백 및 부정적인 사용자 피드백을 볼 수 있으며 사용자 정의 보고서를 생성하는 기능도 제공합니다.
AWS 계정에 QnABot를 배포하는 방법에 대한 자세한 지침은 구현 안내서를 참조하세요.
또는 AWS에 QnABot을 사용자 지정 배포하려면 아래 세부 정보를 참조하세요.
QnABot의 루트 디렉터리로 이동합니다(이 저장소를 복제하면 디렉터리가 생성됩니다).
/source 디렉터리에서 시작합니다.
cd source
virtualenv를 설치합니다:
pip3 install virtualenv
QnABot의 node.js 모듈을 설치합니다.
npm install
다음으로 구성 파일을 설정합니다.
npm run config
이제 다음 매개변수에 대해 config.json
편집합니다.
매개변수 | 설명 |
---|---|
지역 | 스택을 시작할 AWS 리전 |
윤곽 | 사용할 AWS 자격 증명 프로필 |
네임스페이스 | dev, test 및/또는 prod와 같은 템플릿을 실행하기 위한 논리적 네임스페이스 |
개발자이메일(필수) | 자동화된 스택 시작에서 관리자를 생성할 때 사용할 이메일 |
그런 다음 다음 명령을 사용하여 CloudFormation 템플릿을 시작하고 Lambda 코드 및 CloudFormation 템플릿에 사용할 S3 버킷을 생성합니다. 이 템플릿이 완료될 때까지 기다립니다(명령줄 또는 AWS CloudFormation 콘솔에서 진행 상황을 볼 수 있음).
npm run bootstrap
마지막으로 다음 명령을 사용하여 템플릿을 시작하여 AWS 계정에 QnABot를 배포합니다. 스택이 완료되면 디자이너 UI에 로그인할 수 있습니다(URL은 템플릿의 출력입니다). config.json에 있는 이메일의 임시 비밀번호:
npm run up
기존 스택이 있는 경우 다음을 실행하여 스택을 업데이트할 수 있습니다.
npm run update
단위 테스트를 실행하려면 루트 폴더에서 다음 명령을 실행하십시오.
npm test
/website 또는 /templates 디렉터리를 수정할 때 테스트 스냅샷을 업데이트하려면 다음 명령을 실행합니다.
npm run test:update:snapshot
참고: 회귀 테스트를 실행하면 콘텐츠 디자이너에서 콘텐츠와 설정이 생성, 수정 및 삭제됩니다. 콘텐츠 및 설정의 손실이나 수정이 허용되는 비프로덕션 봇에서만 회귀 테스트를 실행하세요.
그러면 계정에 배포된 QnABot 배포에 대한 통합 테스트가 실행됩니다. 테스트를 실행하기 전에 위 단계에 따라 버전을 빌드 및 배포하거나 QnABot 랜딩 페이지의 템플릿을 사용하여 배포합니다. QnABot를 시작합니다.
cd .nightswatch
brew install python@3
brew install geckodriver
brew install --cask chromedriver
pip3 install virtualenv
python3 -m virtualenv venv
source ./venv/bin/activate
pip install -r requirements.txt
테스트 중인 QnA Bot 배포를 가리키도록 다음 환경 변수를 설정합니다.
export CURRENT_STACK_REGION= ' <QNA BOT Region> '
export CURRENT_STACK_NAME= ' <QNA BOT Cloudformation Stack Name> '
export EMAIL= ' <admin user e-mail>
선택적으로 관리자가 테스트할 사용자 이름과 비밀번호를 제공하십시오. 이러한 환경 변수가 설정되지 않은 경우 초기 테스트 중에 기본 'QnaAdmin' 사용자가 생성됩니다. 특정 테스트를 실행하려면 기본 사용자가 초기 테스트에서만 생성되므로 사용자 이름을 제공하십시오.
export USER= ' <QNA BOT existing admin user> '
export PASSWORD= ' <QNA BOT existing admin password> '
선택적으로 테스트할 Bedrock Guardrails 식별자 및 버전을 제공합니다. 이러한 환경 변수가 설정되지 않은 경우 test_knowledge_base.py 및 test_llm.py의 Bedrock Guardrails 테스트를 건너뜁니다.
export BEDROCK_GUARDRAIL_IDENTIFIER= ' <Pre-configurated Guardrail Identifier in your AWS account> '
export BEDROCK_GUARDRAIL_VERSION= ' <Pre-configurated Guardrail Version in your AWS account> '
테스트를 실행하는 동안 브라우저를 시작하려면 아래 env 변수도 설정하세요.
export HEADLESS_BROWSER= ' false '
각 테스트의 시작 및 종료 시간을 확인하려면 다음 단계를 따르세요.
export TIMESTAMPS= ' true '
테스트에 특정 AWS 프로필을 사용하려는 경우. 설정하지 않으면 회귀 테스트는 실행 중인 현재 AWS 세션을 사용합니다.
export TEST_ACCOUNT_PROFILE_NAMES= ' <AWS profile name> '
cd functional
pytest -v
사용자 정의 QnABot 출시에 관심이 있는 고급 사용자는 외부 사용자가 사용할 수 있는 배포 아티팩트를 게시하기 위해 다음 지침을 사용할 수 있습니다.
템플릿을 호스팅할 S3 버킷을 생성합니다(아래 $DIST_OUTPUT_BUCKET 참조). 또한 사용자가 배포할 각 지역에 대한 지역 버킷이 필요합니다. 지역 버킷 이름은 $DIST_OUTPUT_BUCKET-$AWS_REGION이어야 합니다. 대상 사용자에게 버킷에 대한 적절한 액세스 권한을 제공해야 합니다. 버킷 보안 및 액세스 제어 모범 사례는 아래 링크를 참조하세요.
참고: 모든 버킷에는 버전 관리가 활성화되어 있어야 합니다. 그렇지 않으면 스택 배포에 실패합니다.
사용자 정의 QnABot에 대해 다음 환경 변수를 설정합니다.
export DIST_OUTPUT_BUCKET= ' <name of the bucket to upload artifacts to> '
export SOLUTION_NAME= ' <name of your custom bot> '
export VERSION= ' <bot version> '
export AWS_REGIONS=( " us-east-1 " " us-west-2 " " ap-southeast-1 " " ap-southeast-2 " " ca-central-1 " " eu-west-1 " " ap-northeast-1 " " eu-central-1 " " eu-west-2 " " ap-northeast-2 " )
위의 변수는 봇이 호스팅될 버킷 URL 경로를 결정합니다. AWS_REGIONS 배열은 QnABot가 지원하는 모든 지역의 목록입니다. 봇 버전이 특정 지역에 배포되지 않는 경우 필요에 따라 목록을 수정할 수 있습니다.
다음 명령을 실행하여 현재 로컬 버전을 지정된 버킷에 업로드합니다.
cd deployment
./build-s3-dist.sh $DIST_OUTPUT_BUCKET $SOLUTION_NAME $VERSION
aws s3 cp global-s3-assets/ s3:// $DIST_OUTPUT_BUCKET / $SOLUTION_NAME / $VERSION / --recursive --acl bucket-owner-full-control
아직 존재하지 않는 경우 각 지역에 대해 S3 버킷을 생성합니다. 이러한 버킷은 공용으로 구성해야 합니다.
for region in " ${AWS_REGIONS[@]} " ;
do
if aws s3api head-bucket --bucket " $DIST_OUTPUT_BUCKET - $region " 2> /dev/null
then
echo " Bucket exists: s3:// $DIST_OUTPUT_BUCKET - $region "
else
aws s3api create-bucket --bucket " $DIST_OUTPUT_BUCKET - $region "
echo " Created bucket: s3:// $DIST_OUTPUT_BUCKET - $region "
fi
done
각 지역에 대해 아래 명령을 실행합니다.
for region in " ${AWS_REGIONS[@]} " ;
do
if aws s3api head-bucket --bucket " $DIST_OUTPUT_BUCKET - $region " 2> /dev/null
then
aws s3 cp regional-s3-assets/ s3:// $DIST_OUTPUT_BUCKET - $region / $SOLUTION_NAME / $VERSION / --recursive --acl bucket-owner-full-control
else
echo " Bucket not found: s3:// $DIST_OUTPUT_BUCKET - $region "
fi
done
모든 지역에 대해 다음 URL에서 템플릿을 배포할 수 있습니다.
echo https:// $DIST_OUTPUT_BUCKET .s3.amazonaws.com/ $SOLUTION_NAME / $VERSION /qnabot-on-aws-main.template
개발 모드에서 Webpack을 실행하려면 다음 사항을 확인하세요.
QnABot의 루트 디렉터리로 이동합니다(이 저장소를 복제하면 디렉터리가 생성됩니다).
npm install
다음으로 npm 스크립트 dev mode
에서 package.json에 있는 환경 변수 ASSET_BUCKET_NAME
할당합니다. 이는 QnABot이 ./website 자산을 로드하는 버킷의 이름이며 일반적으로 <stack-name>-bucket-<randomly-generated-chars>로 명명됩니다.
올바르게 설정되면 실행하십시오.
npm run dev-mode
그러면 Webpack을 개발 모드로 설정하고 ./website/build의 자산을 ASSET_BUCKET_NAME
에 업로드해야 합니다. 또한 ./website의 변경 사항을 감시하고 자산이 변경되면 버킷에 자산을 다시 로드합니다.
현재 지원되는 유일한 브라우저는 다음과 같습니다.
자세한 내용은 LICENSE.txt 파일을 참조하세요.
각 버전의 새로운 기능에 대한 자세한 내용은 CHANGELOG.md 파일을 참조하세요.
QnABot 기능을 안내하는 워크숍도 제공됩니다.
QnABot은 수년에 걸쳐 발전하면서 지원이 들어오고 나갈 수 있는 다양한 서비스와 기능을 활용하게 됩니다. 이 섹션은 퍼블릭 및 VPC CloudFormation 템플릿에 대한 링크와 함께 배포 가능한 솔루션 버전에 대한 참조 역할을 합니다.
참고: 배포 가능한 솔루션 버전은 AWS 계정에 QnABot 버전을 배포하는 기능을 의미합니다. QnABot에 대해 적극적으로 지원되는 버전은 최신 버전의 QnABot에서만 사용할 수 있습니다.
콘텐츠 디자이너에 Q&A가 없을 때 testall S3 버킷에 저장된 많은 버전이 발생할 수 있는 testall 기능의 잠재적인 문제로 인해 이 버전을 사용하지 않는 것이 좋습니다. 사용 가능한 최신 버전을 사용하시기 바랍니다.
콘텐츠 디자이너에 Q&A가 없을 때 testall S3 버킷에 저장된 많은 버전이 발생할 수 있는 testall 기능의 잠재적인 문제로 인해 이 버전을 사용하지 않는 것이 좋습니다. 사용 가능한 최신 버전을 사용하시기 바랍니다.
v5.5.0+
버전을 사용하거나 버전으로 업그레이드하는 것이 좋습니다. 자세한 내용은 아래를 참조하세요.v5.4.X
에서 이후 버전으로 업그레이드하는 경우, LLMApi가 SAGEMAKER로 설정된 배포에서 업그레이드하는 경우 업그레이드하기 전에 이 값을 DISABLED로 설정하세요. 업그레이드한 후 이 값을 SAGEMAKER에 다시 반환하세요.콘텐츠 디자이너에 Q&A가 없을 때 testall S3 버킷에 저장된 많은 버전이 발생할 수 있는 testall 기능의 잠재적인 문제로 인해 이 버전을 사용하지 않는 것이 좋습니다. 사용 가능한 최신 버전을 사용하시기 바랍니다.
콘텐츠 디자이너에 Q&A가 없을 때 testall S3 버킷에 저장된 많은 버전이 발생할 수 있는 testall 기능의 잠재적인 문제로 인해 이 버전을 사용하지 않는 것이 좋습니다. 사용 가능한 최신 버전을 사용하시기 바랍니다.
testall S3 버킷에 저장된 많은 버전을 도입할 수 있는 testall 기능의 잠재적인 문제로 인해 이 버전을 사용하지 않는 것이 좋습니다. 사용 가능한 최신 버전을 사용하시기 바랍니다.
testall S3 버킷에 저장된 많은 버전을 도입할 수 있는 testall 기능의 잠재적인 문제로 인해 이 버전을 사용하지 않는 것이 좋습니다. 사용 가능한 최신 버전을 사용하시기 바랍니다.
v5.2.1
미만의 모든 솔루션은 Lambda 런타임 지원 중단으로 인해 더 이상 배포할 수 없습니다. 이 정보는 있는 그대로 제공되며 솔루션에 사용되는 프레임워크의 지원 중단 일정과 수명 종료를 확인하는 것이 좋습니다.QnABot의 경우 가장 일반적인 이유는 AWS Lambda 런타임이 더 이상 사용되지 않기 때문입니다. Lambda 런타임이 더 이상 사용되지 않는 것으로 표시되면 고객은 더 이상 AWS 계정에서 새로운 Lambda 함수를 생성할 수 없습니다. 이는 해당 런타임을 사용하는 이전 버전의 솔루션이 배포되지 않음을 의미합니다. 문제를 조사하고 버그 보고서를 재현하기 위해 유사한 환경을 배포할 수 없기 때문에 커뮤니티에서 지원을 제공하기가 어렵습니다.
현재 기존 배포가 작동 중이라면 업데이트할 필요가 없습니다. 그러나 프로덕션 배포를 테스트하고 지원되는 버전으로 마이그레이션하기 위한 계획을 세우는 것이 좋습니다 . 배포가 멀어질 latest
불안정성을 경험할 위험이 커집니다(특히 배포와 관련하여).
그리고 처음으로 솔루션을 시작하려는 경우 항상 최신 버전을 사용하는 것이 좋습니다. QnABot의 가장 안전하고 안정적이며 기능이 풍부한 버전입니다!
대부분의 경우 간단한 업데이트 스택 작업을 통해 새 배포에서 데이터를 유지하면서 인스턴스를 최신 버전으로 마이그레이션할 수 있습니다.
참고:
v5.4.X
에서 이후 버전으로 업그레이드하는 경우, LLMapi가 SAGEMAKER로 설정된 배포에서 업그레이드하는 경우 업그레이드하기 전에 이 값을 DISABLED로 설정하세요. 업그레이드한 후 이 값을 SAGEMAKER에 다시 반환하세요.
팀에서는 모든 업그레이드(특히 부/주 버전 간)를 먼저 비프로덕션 인스턴스에서 테스트하여 회귀를 확인할 것을 강력히 권장합니다. 배포를 사용자 정의로 수정했거나, 외부 서비스와 통합했거나, 여러 버전 사이를 이동하는 경우 이는 매우 중요합니다.
취할 수 있는 몇 가지 추가 예방 조치는 다음과 같습니다.
Export Settings
클릭)이 솔루션은 익명화된 운영 지표를 수집하여 AWS가 솔루션의 품질과 기능을 개선하는 데 도움을 줍니다. 이 기능을 비활성화하는 방법을 포함한 자세한 내용은 구현 가이드를 참조하세요.
저작권 Amazon.com, Inc. 또는 그 계열사. 모든 권리 보유.
Apache 라이센스 버전 2.0("라이센스")에 따라 라이센스가 부여되었습니다. 라이센스를 준수하는 경우를 제외하고는 이 파일을 사용할 수 없습니다. 다음에서 라이센스 사본을 얻을 수 있습니다.
http://www.apache.org/licenses/LICENSE-2.0
해당 법률에서 요구하거나 서면으로 동의하지 않는 한, 라이선스에 따라 배포되는 소프트웨어는 명시적이든 묵시적이든 어떠한 종류의 보증이나 조건 없이 "있는 그대로" 배포됩니다. 라이선스에 따른 허가 및 제한 사항을 관리하는 특정 언어는 라이선스를 참조하세요.