AWS 上的 QnABot 是一種多管道、多語言對話介面(聊天機器人),可回應客戶的問題、答案和回饋。它允許您跨多個管道部署功能齊全的聊天機器人,包括聊天、語音、簡訊和 Amazon Alexa。此解決方案的內容管理環境和聯絡中心整合精靈可讓您設定和自訂環境,該環境具有以下優勢:
透過智慧多部分互動提供個人化教程和問答支持,增強客戶體驗
透過自動化客戶支援工作流程減少呼叫中心等待時間
實施最新的機器學習技術,為聊天機器人創造引人入勝的、類人的交互
使用預設參數部署此解決方案會在您的 AWS 帳戶中部署下列元件(邊框元件是可選的)。
圖 1:AWS 架構上的 QnABot
使用 AWS CloudFormation 範本部署的解決方案元件的進階流程如下:
管理員將解決方案部署到其 AWS 帳戶中,開啟 Content Designer UI 或 Amazon Lex Web 用戶端,並使用 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 中。
聊天機器人的使用者透過 Web 用戶端 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 可以選擇用於建立搜尋查詢並根據傳回的文件摘錄合成回應。
b.如果配置了 Bedrock 知識庫 ID,則Bot Fulfillment
AWS Lambda 函數會將請求轉送至 Bedrock 知識庫。 Bot Fulfillment
AWS Lambda 函數利用 RetrieveAndGenerate API 取得使用者查詢的相關結果、增強基礎模型的提示並回傳回應。
使用者與Bot Fulfillment
功能的互動會產生日誌和指標數據,這些數據會傳送到 Amazon Kinesis Data Firehose,然後傳送到 Amazon S3 以供後續數據分析。 OpenSearch 儀表板可用於查看使用歷史記錄、記錄的話語、無點擊的話語、正面使用者回饋和負面使用者回饋,還提供建立自訂報告的功能。
OpenSearch 儀表板可用於查看使用歷史記錄、記錄的話語、無點擊的話語、正面使用者回饋和負面使用者回饋,還提供建立自訂報告的功能。
請參閱實施指南,以了解有關在 AWS 帳戶中部署 QnABot 的詳細說明。
或者,如果您想在 AWS 上自訂部署 QnABot,請參閱下方的詳細資訊。
導航至 QnABot 的根目錄(克隆此儲存庫後將建立該目錄)。
從 /source 目錄開始。
cd source
安裝虛擬環境:
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> '
(可選)提供用於測試的基岩護欄標識符和版本。如果未設定這些環境變量,則會跳過 test_knowledge_base.py 和 test_llm.py 中的基岩護欄測試。
export BEDROCK_GUARDRAIL_IDENTIFIER= ' <Pre-configurated Guardrail Identifier in your AWS account> '
export BEDROCK_GUARDRAIL_VERSION= ' <Pre-configurated Guardrail Version in your AWS account> '
如果您想在執行測試時啟動瀏覽器,請設定以下環境變數:
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 script 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。
我們不建議使用此版本,因為 testall 功能存在潛在問題,當 Content Designer 沒有問答時,可能會引入儲存在 testall S3 儲存桶中的大量版本。請使用可用的最新版本。
我們不建議使用此版本,因為 testall 功能存在潛在問題,當 Content Designer 沒有問答時,可能會引入儲存在 testall S3 儲存桶中的大量版本。請使用可用的最新版本。
v5.5.0+
。欲了解更多信息,請參見下文。v5.4.X
升級到更高版本的用戶,如果您要從 LLMApi 設定為 SAGEMAKER 的部署進行升級,請在升級前將此值設為 DISABLED。升級後,將此值傳回給 SAGEMAKER。我們不建議使用此版本,因為 testall 功能存在潛在問題,當 Content Designer 沒有問答時,可能會引入儲存在 testall S3 儲存桶中的大量版本。請使用可用的最新版本。
我們不建議使用此版本,因為 testall 功能存在潛在問題,當 Content Designer 沒有問答時,可能會引入儲存在 testall S3 儲存桶中的大量版本。請使用可用的最新版本。
我們不建議使用此版本,因為 testall 功能存在潛在問題,這可能會導致 testall S3 儲存桶中儲存大量版本。請使用可用的最新版本。
我們不建議使用此版本,因為 testall 功能存在潛在問題,這可能會導致 testall S3 儲存桶中儲存大量版本。請使用可用的最新版本。
v5.2.1
解決方案都不再可部署。此資訊按原樣提供,強烈建議您檢查解決方案中使用的框架的棄用日曆和生命週期結束。對於 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
除非適用法律要求或書面同意,否則根據許可證分發的軟體均以「原樣」分發,不帶任何明示或暗示的保證或條件。請參閱許可證,了解許可證下管理權限和限制的特定語言。