Foundational LLM Chat 是一個使用 AWS CDK 和 Converse API 建立的 Chainlit 應用程序,可讓您與 Amazon Bedrock 語言模型進行互動。它提供了一個用戶友好的介面,用於與 Amazon Bedrock LLM 聊天、上傳圖像或文件以及接收多模式回應。該應用程式使用各種服務部署在 AWS 上,例如 Amazon Bedrock、Amazon Elastic Container Service、Amazon Cognito、Amazon CloudFront 等。
此架構圖說明了基礎 LLM 聊天應用程式的 AWS 部署。使用者透過受 Amazon Cognito 身份驗證保護的 Web 介面與應用程式互動。該應用程式使用 Amazon CloudFront 的 CDN 在全球範圍內分發。在特定 AWS 區域內,應用程式使用 Amazon ECS 進行容器化部署跨多個可用區部署。後端與 Amazon Bedrock 整合以利用各種語言模型,使用戶能夠與 AI 助理進行多模式對話。
該應用程式是透過./bin
資料夾中的config.json
檔案進行設定的。關鍵配置選項包括:
default_system_prompt
:此欄位包含聊天機器人將使用的預設系統提示(如果未在bedrock_models
欄位中指定)。它定義了人工智慧助理的初始指令和行為。您可以修改此值以變更助手的角色或初始提示。
max_characters_parameter
:此欄位指定輸入文字中允許的最大字元數。如果設定為字串"None"
,則沒有字元限制。如果需要,您可以變更此值以限制輸入文字長度。
max_content_size_mb_parameter
:此欄位設定輸入內容(例如圖片)的最大大小(以兆位元組為單位)。如果設定為字串"None"
,則沒有大小限制。您可以修改該值來限制輸入內容的最大大小。
default_aws_region
:此欄位指定部署應用程式的 AWS 區域。您也可以為每個 Amazon Bedrock 模型欄位設定區域。
prefix
:此欄位可讓您為應用程式建立的資源名稱設定前綴。如果需要,您可以將其留空或提供自訂前綴。
此欄位包含聊天機器人可以使用的基岩模型的字典。每個模型都由一個鍵(例如,「Sonnet」、「Haiku」)標識,並且該鍵是 Chainlit 聊天設定檔中使用的名稱。每個模型至少具有以下屬性:
id
:Amazon Bedrock 模型的 ID 或 ARN。您可以在 AWS 文件中找到可用的模型 ID。region
:用於存取模型的區域陣列。如果未啟用跨區域推理,則為 1 個;如果未啟用跨區域推理,則為多個。可選配置參數包括:
inference_profile
:跨區域推理的設置prefix
:區域前綴(例如“us”)region
: 主要推理區域system_prompt
: 自訂系統提示符cost
:定價訊息input_1k_price
:1,000 個輸入代幣的成本(以美元為單位)。您可以在 AWS Bedrock 定價頁面上找到不同型號的定價資訊。output_1k_price
:1,000 個輸出代幣的成本(以美元為單位)。vision
[可選] :正確或錯誤。是否為模型啟用了視覺功能。document
[可選] :正確或錯誤。如果為模型啟用了文件功能](https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference.html)。tool
[可選] :正確或錯誤。如果為模型啟用了工具功能](https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference.html)。default
[可選] :true 或 false。預設選擇型號您可以修改bedrock_models
部分以包含其他模型或根據您的要求更新現有模型。
以下是如何檢索型號 ID 和定價資訊的範例:
若要尋找模型 ID 或 ARN,請參閱 AWS Bedrock 模型 ID 文件。例如,Claude 3 Sonnet 模型的 ID 為anthropic.claude-3-sonnet-20240229-v1:0
。
要查找定價信息,請參閱 AWS Bedrock 定價文件。對於 Claude 3 Sonnet 模型,輸入和輸出定價如下:
對config.json
檔案進行所需的變更後,您可以按照自述文件中的說明繼續部署。
這是 json 的範例:
{
"default_system_prompt" : " you are an assistant " ,
"max_characters_parameter" : " None " ,
"max_content_size_mb_parameter" : " None " ,
"default_aws_region" : " us-west-2 " ,
"prefix" : " " ,
"bedrock_models" : {
"Claude Sonnet 3.5 New" : {
"system_prompt" : " you are an assistant " ,
"id" : " us.anthropic.claude-3-5-sonnet-20241022-v2:0 " ,
"inference_profile" : {
"prefix" : " us " ,
"region" : " us-west-2 "
},
"region" : [ " us-east-1 " , " us-west-2 " , " us-east-2 " ],
"cost" : {
"input_1k_price" : 0.003 ,
"output_1k_price" : 0.015
},
"default" : true ,
"vision" : true ,
"document" : true ,
"tool" : true
},
"Meta Llama 3.2 90B Vision Instruct" : {
"id" : " us.meta.llama3-2-90b-instruct-v1:0 " ,
"inference_profile" : {
"prefix" : " us " ,
"region" : " us-west-2 "
},
"region" : [ " us-east-1 " , " us-west-2 " ],
"cost" : {
"input_1k_price" : 0.002 ,
"output_1k_price" : 0.002
},
"vision" : true ,
"document" : true ,
"tool" : true
},
"Mistral Large 2" : {
"id" : " mistral.mistral-large-2407-v1:0 " ,
"cost" : {
"input_1k_price" : 0.003 ,
"output_1k_price" : 0.009
},
"vision" : false ,
"document" : true ,
"tool" : true
}
}
}
該應用程式利用 Amazon Bedrock Prompt Manager 來:
目前該應用程式支援 2 種自動變數替換:
%Y-%m-%d
;%Y-%m-%d %H:%M:%S UTC
您可以編輯chainlit_image/foundational-llm-chat_app/massages_utils.py
中的extract_and_process_prompt
函數以新增更多直接替換。
該應用程式使用 Amazon Bedrock 的 Converse API,提供:
所有系統提示均透過 Amazon Bedrock Prompt Manager 進行儲存和管理,提供:
當使用系統提示配置語言模型的行為時,考慮安全影響並採取措施防止潛在的誤用或漏洞至關重要。一個重大風險是提示注入,其中惡意輸入可能以意想不到的方式操縱系統提示,可能導致有害或有偏見的輸出。
以下指南是一個很好的起點:緩解越獄和提示注入。
提示工程是指精心設計提示或指令來指導語言模型產生所需輸出的實踐。有效的提示工程對於確保語言模型理解並適當地回應給定的上下文和任務至關重要。
以下課程旨在讓您全面逐步了解如何使用 Bedrock:使用 Anthropic Claude v3 進行提示工程,在 Claude 中設計最佳提示。
本指南透過一系列課程和練習涵蓋了快速工程的各種技術和最佳實踐,分為三個級別:初級、中級和高級。
透過遵循本指南中概述的原則和技術,您可以增強語言模型應用程式的效能和可靠性,確保 AI 助理產生更相關、更連貫和情境感知的回應。
我們建議使用 AWS Cloud9 進行部署。如果您想使用 Cloud9 部署解決方案,則在繼續之前需要滿足以下條件:
m5.large
作為實例類型。Amazon Linux 2023
作為平台。 如果您決定不使用 AWS Cloud9,請驗證您的環境是否符合以下先決條件:
驗證您的環境是否符合以下先決條件:
你有:
AWS 帳號
允許您建立 AWS 範例中包含的資源的存取策略
控制台和編程訪問
NodeJS 已安裝
nvm
您可以在繼續之前執行以下命令 nvm install --lts
NPM 已安裝
nvm
您可以在繼續之前執行以下命令 nvm install-latest-npm
AWS CLI 已安裝並設定為與您的 AWS 帳戶一起使用
已安裝 AWS CDK CLI
安裝了 Finch 或安裝了 Docker
在部署區域中啟用 Amazon Bedrock 模型存取:如何啟用 Amazon Bedrock 模型存取。
至少啟用以下一項:
克隆儲存庫,開啟資料夾,安裝依賴項:
git clone https://github.com/aws-samples/foundational-llm-chat.git
cd foundational-llm-chat
npm install
[僅當您之前在部署區域中沒有這樣做時才可選]引導 CDK 環境:
cdk bootstrap
建置並部署堆疊:
cdk deploy --region YOUR_DEPLOY_REGION
其中 YOUR_DEPLOY_REGION 是您要部署應用程式的 AWS 區域。例如: us-west-2
。
如果您使用 Finch 而不是 Docker,請在命令開頭新增CDK_DOCKER=finch
如下例所示:
CDK_DOCKER=finch cdk deploy --region us-west-2
這將在 AWS 上建立所有必要的資源,包括 ECS 叢集、Cognito 使用者池、CloudFront 分配等。
部署完成後,CloudFront 分發 URL 將顯示在終端機中。使用此 URL 存取 Foundational-llm-chat 應用程式。
部署後你會得到類似這樣的資訊:
✅ Foundational-LLM-ChatStack
Deployment time: 465.09s
Outputs:
FoundationalLlmChatStack.CognitoUserPool = ID
FoundationalLlmChatStack.NetworkingFoundationalLlmChatChatbotStack = CLOUDFRONT_DISTRIBUTION_ADDRESS
FoundationalLlmChatStack.ecsApplicationFoundationalLlmChatServiceLoadBalancer = ECS_LOAD_BALANCER
FoundationalLlmChatStack.ecsApplicationFoundationalLlmChatServiceServiceURL = ECS_LOAD_BALANCER_ADDRESS
Stack ARN: ARN
Total time: 469.14s
Amazon CloudFront 指派如以下行所示: FoundationalLlmChatStack.NetworkingFoundationalLlmChat = CLOUDFRONT_DISTRIBUTION_ADDRESS
foundational-llm-chat-user-pool
使用者池。開啟此使用者池並建立使用者並驗證電子郵件地址;為了避免產生不必要的成本,建議您在使用完本範例建立的資源後清理並刪除它們。請依照以下步驟刪除堆疊和關聯的資源:
Foundational-LLM-ChatStack
的堆疊。這將刪除整個堆疊,包括 ECS 叢集、Cognito 使用者池、CloudFront 分配以及所有其他關聯資源。
或者,您可以使用 AWS CDK 從命令列刪除堆疊:
cdk destroy --region YOUR_DEPLOY_REGION
將YOUR_DEPLOY_REGION
替換為您部署應用程式的 AWS 區域。
請注意,刪除堆疊不會自動刪除部署期間建立的 CloudWatch 日誌和 Amazon ECS 任務定義。如果您不再需要這些資源,您可能需要手動刪除它們,以避免產生額外費用。
雖然目前的架構為部署基礎 LLM 聊天應用程式提供了一個良好的起點,但對於生產就緒部署還有其他注意事項:
在目前架構中,CloudFront 發行版和應用程式負載平衡器 (ALB) 之間的通訊透過 HTTP 進行。對於生產部署,強烈建議使用 HTTPS (TLS/SSL) 進行安全通訊:
在兩個層級(ALB 和 ECS 任務)啟用具有 TLS 終止的 HTTPS 可確保端對端加密並增強應用程式的安全性。
此 AWS 範例僅用於演示和教育目的。如果沒有進一步修改和強化,它不是為生產用途而設計的。將此應用程式部署到生產環境之前,根據您的特定要求和最佳實踐進行徹底的測試、安全評估和最佳化至關重要。
claude 的系統提示可以直接從 Anthropic 文件中取得:系統提示
歡迎貢獻!請遵循通常的 Git 工作流程:
該庫根據 MIT-0 許可證獲得許可。請參閱許可證文件。
在將此範例中的內容用於生產目的之前,您應該考慮進行自己的獨立評估。這可能包括(除其他外)根據您的特定品質控制實踐和標準測試、保護和優化此範例中提供的內容。