隨著生成式人工智慧革命化各行業,開發人員越來越尋求將大型語言模型(LLMs)高效整合到其應用程序中的方法。Amazon Bedrock 是一個強大的解決方案。它提供了一個完全托管的服務,通過統一的 API 提供對各種基礎模型的訪問。本指南將探討 Amazon Bedrock 的主要優勢,如何將不同的 LLM 模型整合到您的項目中,如何簡化應用程序使用的各種 LLM 提示的管理,以及考慮用於生產使用的最佳實踐。
Amazon Bedrock 的主要優勢
Amazon Bedrock 通過提供啟動所需的所有基本功能,簡化了將 LLMs 整合到任何應用程序中的初始過程。
簡化訪問領先模型
Bedrock 提供對來自行業領先公司(如 AI21 Labs、Anthropic、Cohere、Meta、Mistral AI、Stability AI 和 Amazon)的多樣化高性能基礎模型的訪問。這種多樣性使開發人員能夠選擇最適合其用例的模型,並根據需要切換模型,而無需管理多個供應商關係或 API。
完全托管和無伺服器
作為一項完全托管的服務,Bedrock 消除了對基礎設施管理的需求。這使開發人員能夠專注於構建應用程序,而不必擔心基礎設施設置、模型部署和擴展的底層複雜性。
企業級安全和隱私
Bedrock 提供內建的安全功能,確保數據永遠不會離開您的 AWS 環境,並在傳輸和靜態狀態下均進行加密。它還支持遵循各種標準,包括 ISO、SOC 和 HIPAA。
保持最新的基礎設施改進
Bedrock 定期推出新功能,推動 LLM 應用的邊界,並幾乎不需要任何設置。例如,它最近推出了一個 優化的推理模式,提高了 LLM 推理的延遲,而不妥協準確性。
開始使用 Bedrock
在本節中,我們將使用 AWS SDK for Python 在您的本地機器上構建一個小應用,提供一個實用指南來開始使用 Amazon Bedrock。這將幫助您理解使用 Bedrock 的實際方面以及如何將其整合到您的項目中。
先決條件
- 您擁有 AWS 帳戶。
- 您已安裝 Python。如果尚未安裝,請按照 此指南 進行安裝。
- 您已正確安裝和配置 Python AWS SDK (Boto3)。建議創建一個 Boto3 可以使用的 AWS IAM 用戶。詳細說明請參見 Boto3 快速入門指南。
- 如果使用IAM用户,请确保向其添加
AmazonBedrockFullAccess
策略。您可以使用AWS控制台附加策略。 - 按照此指南的步骤请求访问Bedrock上的一个或多个模型。
1. 创建Bedrock客户端
在AWS CDK中,Bedrock有多个可用的客户端。Bedrock
客户端可让您与服务进行交互,创建和管理模型,而BedrockRuntime
客户端则使您能够调用现有模型。在本教程中,我们将使用一个现成的基础模型,因此我们将只使用BedrockRuntime
客户端。
import boto3
import json
# Create a Bedrock client
bedrock = boto3.client(service_name='bedrock-runtime', region_name='us-east-1')
2. 调用模型
在这个例子中,我使用了Amazon Nova Micro模型(具有modelId amazon.nova-micro-v1:0
),这是Bedrock中最便宜的模型之一。我们将提供一个简单的提示,要求模型为我们写一首诗,并设置参数来控制输出的长度和模型应提供的创意水平(称为“温度”)。请随意尝试不同的提示和调整参数,看看它们如何影响输出。
import boto3
import json
# Create a Bedrock client
bedrock = boto3.client(service_name='bedrock-runtime', region_name='us-east-1')
# Select a model (Feel free to play around with different models)
modelId = 'amazon.nova-micro-v1:0'
# Configure the request with the prompt and inference parameters
body = json.dumps({
"schemaVersion": "messages-v1",
"messages": [{"role": "user", "content": [{"text": "Write a short poem about a software development hero."}]}],
"inferenceConfig": {
"max_new_tokens": 200, # Adjust for shorter or longer outputs.
"temperature": 0.7 # Increase for more creativity, decrease for more predictability
}
})
# Make the request to Bedrock
response = bedrock.invoke_model(body=body, modelId=modelId)
# Process the response
response_body = json.loads(response.get('body').read())
print(response_body)
我们也可以尝试使用Anthropic的Haiku等另一个模型,如下所示。
import boto3
import json
# Create a Bedrock client
bedrock = boto3.client(service_name='bedrock-runtime', region_name='us-east-1')
# Select a model (Feel free to play around with different models)
modelId = 'anthropic.claude-3-haiku-20240307-v1:0'
# Configure the request with the prompt and inference parameters
body = json.dumps({
"anthropic_version": "bedrock-2023-05-31",
"messages": [{"role": "user", "content": [{"type": "text", "text": "Write a short poem about a software development hero."}]}],
"max_tokens": 200, # Adjust for shorter or longer outputs.
"temperature": 0.7 # Increase for more creativity, decrease for more predictability
})
# Make the request to Bedrock
response = bedrock.invoke_model(body=body, modelId=modelId)
# Process the response
response_body = json.loads(response.get('body').read())
print(response_body)
請注意,不同模型之間的請求/回應結構略有不同。這是一個我們將在下一部分使用預定義提示模板來解決的缺點。要嘗試其他模型,您可以在 Bedrock 控制台的“模型目錄”頁面中查找每個模型的modelId
和示例 API 請求,並相應地調整代碼。一些模型還有由 AWS 撰寫的詳細指南,您可以在此處找到。
3. 使用提示管理
Bedrock 提供了一個方便的工具來創建和實驗預定義的提示模板。您可以在提示管理控制台中創建預定義的模板,而不是每次需要時在代碼中定義提示和特定參數,例如令牌長度或溫度。您指定將在運行時注入的輸入變量,設置所有必需的推理參數,並發布您的提示的版本。完成後,您的應用代碼可以調用所需版本的提示模板。
使用預定義提示的主要優勢:
- 隨著應用程序的增長和對於各種用例使用不同的提示、參數和模型,有助於使應用程序保持有組織性。
- 如果同一提示在多個位置中使用,有助於提示重複使用。
- 將 LLM 推理的細節從我們的應用程式代碼中抽象出來。
- 允許提示工程師在控制台上進行提示優化,而無需觸碰實際應用程式代碼。
- 它允許輕鬆進行實驗,利用不同版本的提示。您可以調整提示輸入,參數如溫度,甚至模型本身。
現在讓我們試試這個:
- 前往Bedrock控制台,並在左側面板上點擊“提示管理”。
- 點擊“創建提示”,並為您的新提示命名
- 輸入我們要發送到LLM的文本,以及一個佔位符變量。我使用了
寫一首關於{{主題}}的短詩
。 - 在配置部分,指定您想使用的模型,並設置與之前使用的相同參數的值,例如“溫度”和“最大標記”。如果您喜歡,您可以將默認值保留不變。
- 是時候測試了!在頁面底部,為您的測試變量提供一個值。我使用了“軟體開發英雄”。然後,點擊右側的“運行”按鈕,查看輸出是否滿意。
供參考,這裡是我的配置和結果。
我們需要發布一個新的提示版本才能在應用程序中使用此提示。要這樣做,請點擊頂部的“創建版本”按鈕。這將創建您當前配置的快照。如果您想玩弄它,您可以繼續編輯並創建更多版本。
發布後,我們需要找到提示版本的ARN(Amazon資源名稱),方法是轉到您的提示頁面並點擊新創建的版本。
複製此特定提示版本的ARN以在代碼中使用。
一旦我們有了 ARN,我們就可以更新我們的代碼以調用這個預定義的提示。我們只需要提示版本的 ARN 和我們注入其中的任何變量的值。
import boto3
import json
# Create a Bedrock client
bedrock = boto3.client(service_name='bedrock-runtime', region_name='us-east-1')
# Select your prompt identifier and version
promptArn = "<ARN from the specific prompt version>"
# Define any required prompt variables
body = json.dumps({
"promptVariables": {
"topic":{"text":"software development hero"}
}
})
# Make the request to Bedrock
response = bedrock.invoke_model(modelId=promptArn, body=body)
# Process the response
response_body = json.loads(response.get('body').read())
print(response_body)
正如您所看到的,通過將 LLM 推斷的細節抽象化並促進可重用性,這簡化了我們的應用代碼。請隨意在您的提示中嘗試不同的參數,創建不同的版本,並在應用中使用它們。您可以將此擴展為一個簡單的命令行應用程序,該應用程序接受用戶輸入並根據該主題撰寫一首短詩。
下一步和最佳實踐
一旦您熟悉使用 Bedrock 將 LLM 集成到您的應用程序中,請探索一些實用考慮因素和最佳實踐,使您的應用程序準備好投入生產使用。
提示工程
您用於調用模型的提示可能會使或斷掉您的應用程序。提示工程是創建和優化指令以從 LLM 獲得所需輸出的過程。通過上述探索的預定義提示模板,熟練的提示工程師可以開始進行提示工程,而不會干擾您的應用程序的軟體開發過程。您可能需要調整提示以特定於您想使用的模型。熟悉與每個模型提供者特定的提示技術。Bedrock 提供了一些常見大型模型的指南。
模型選擇
作出正確的模型選擇是在滿足應用需求和承擔成本之間取得平衡。功能更強大的模型往往更昂貴。並非所有的使用情況都需要最強大的模型,而最便宜的模型可能並不總是提供您所需的性能。使用模型評估功能快速評估和比較不同模型的輸出,以確定哪一個最符合您的需求。Bedrock提供多種選項來上傳測試數據集,並配置如何評估各個使用情況的模型準確性。
微調並擴展您的模型與RAG和代理
如果現成的模型不夠滿足您的需求,Bedrock提供了調整模型以適應您特定使用情況的選項。創建您的訓練數據,上傳至S3,並使用Bedrock控制台啟動微調作業。您還可以使用檢索增強生成(RAG)等技術擴展您的模型,以提高特定使用情況的性能。連接現有的數據來源,Bedrock將使這些數據對模型可用以增強其知識。Bedrock還提供了創建代理的能力,以規劃和執行使用現有公司系統和數據來源的複雜多步任務。
安全和防護措施
使用護欄,可以確保您的生成應用程序優雅地避免敏感話題(例如種族主義、色情內容和粗口),並且生成的內容被紮實地基礎以防止幻覺。這個功能對於維護應用程序的道德和專業標準至關重要。利用Bedrock內置的安全功能並將其與現有的AWS安全控制整合。
成本優化
在廣泛推出應用程序或功能之前,請考慮Bedrock推理和擴展(如RAG)將產生的成本。
- 如果您能預測您的流量模式,請考慮使用預留吞吐量以實現更高效和具有成本效益的模型推理。
- 如果您的應用程序由多個功能組成,您可以為每個功能使用不同的模型和提示來基於個別情況優化成本。
- 重新檢查您的模型選擇以及為每個推理提供的提示大小。Bedrock通常按“每令牌”計價,因此較長的提示和較大的輸出將產生更多成本。
結論
Amazon Bedrock是將LLM集成到應用程序中的強大靈活平台。它提供訪問許多模型,簡化開發,並提供強大的自定義和安全功能。因此,開發人員可以利用生成式AI的威力,同時專注於為用戶創造價值。本文展示了如何開始進行基本Bedrock集成並保持我們的提示有組織。
隨著人工智慧的發展,開發人員應該及時了解亞馬遜 Bedrock 中最新功能和最佳實踐,以構建他們的人工智慧應用程序。
Source:
https://dzone.com/articles/amazon-bedrock-prompts-llm-integration-guide