今天我將解釋如何安全可靠地使用 Bedrock 工作,同時了解一些關於咖啡的知識。
您將學習如何使用 Python 使用 Amazon Bedrock API 的文字和多模式模型來為您的咖啡館產生名稱、徽標和選單,並建立連接到 Shopify API 來接受訂單的代理。
Shopify(在我看來)是現有的最好的電子商務平台。
就像 AWS 一樣,Shopify 擁有適用於所有內容的 API 和開發人員導向的平台
最後,您將使用 Streamlit 創建一個前端,以提供獨特的用戶體驗並為您的代理賦予生命。
開設自助餐廳或為任何企業提出創意的時刻都是依靠生成式人工智慧 (GenAI) 並充分利用它的絕佳機會。
透過 Amazon Bedrock 您可以使用它,但是...該服務是如何使用的?
AWS 中的每項服務都有一個 API,Amazon Bedrock 也不例外。下面我將透過範例解釋如何使用 Amazon Bedrock API 為行動自助餐廳產生名稱和菜單。
我還向您展示如何使用能夠分析影像的多模態模型。
對 Python 腳本進行程式設計以在本地運行或在 Lambda 函數中呼叫 Amazon Bedrock 的說明:
首先,您必須在此處啟用對基岩說明中模型的存取
要求:
第 1 步)建立虛擬 Python 環境 此處說明
在此儲存庫的 bedrock_examples 資料夾中,您將找到下面用於呼叫基礎模型的不同範例。
在提示資料夾中,您將找到範例提示,您將能夠使用它來產生名稱、選單和提示以傳遞給圖像生成模型,您可以在Amazon Bedrock 遊樂場中調用該模型,也可以透過從Python 呼叫API。
步驟 2) 安裝要求
pip install -r requirements.txt
步驟 3) 配置 Boto3 有關 boto3 的更多資訊
在這裡,我配置 AWS 客戶端,告訴它使用我電腦上安裝的 genaiday 配置文件,並調用 bedrock-runtime 客戶端,這將允許我調用基礎模型。
#Cambiar la region y el perfil de AWS aws = boto3.session.Session(profile_name='genaiday', region_name=region) client = aws.client('bedrock-runtime')
步驟 4) 範例:呼叫文字模型
此函數呼叫方法invoke_model,我傳遞使用者指示的提示並回傳回應
最重要的部分是發送的訊息:
pip install -r requirements.txt
#Cambiar la region y el perfil de AWS aws = boto3.session.Session(profile_name='genaiday', region_name=region) client = aws.client('bedrock-runtime')
範例:
{ "role": "user", "content": [{ "type": "text", "text": prompt }] }
步驟 5) 範例:呼叫多模式模型。
這裡的過程類似,只是你需要添加發送文件的mime類型,為此有一個函數可以根據文件名獲取mimetype
def call_text(prompt,modelId="anthropic.claude-3-haiku-20240307-v1:0"): #esta función es para llamar un modelo de texto config = { "anthropic_version": "bedrock-2023-05-31", "max_tokens": 4096, "messages": [ { "role": "user", "content": [{ "type": "text", "text": prompt }] } ] } body = json.dumps(config) modelId = modelId accept = "application/json" contentType = "application/json" response = client.invoke_model( body=body, modelId=modelId, accept=accept, contentType=contentType) response_body = json.loads(response.get("body").read()) results = response_body.get("content")[0].get("text") return results
然後要呼叫模型,訊息必須如下:
print("Haiku") print(call_text("Estoy buscando armar un local de café al paso, dame 5 nombres para un local.")
模型的呼叫如下圖所示:
def read_mime_type(file_path): # Este hack es para versiones de python anteriores a 3.13 # Esta función lee el mime type de un archivo mimetypes.add_type('image/webp', '.webp') mime_type = mimetypes.guess_type(file_path) return mime_type[0]
範例:
"messages": [ { "role": "user", "content": [ { "type": "image", "source": { "type": "base64", "media_type": read_mime_type(file), "data": base64.b64encode(open(file, "rb").read()).decode("utf-8") } }, { "type": "text", "text": caption }] } ]
建立 Amazon Bedrock 代理:
確保您擁有想要使用的基岩模型並啟用了此處的訪問說明,在本例中我們將使用 Claude 3 Haiku 和 Sonnet
然後在AWS控制台中建立Bedrock代理:
1) 前往基岩服務
2) 代理
3)建立代理
4)為代理程式命名,在我們的例子中為「Pause-Coffee-Agent
5) 描述是可選的。
6) 最重要的步驟之一是選擇使我們的代理人正常工作的基礎模型。如果您想了解如何選擇適合您的用例的最佳模型,請參閱有關 Amazon Bedrock 模型的指南。評價.
7) 下一步是指導您模型的提示,在這裡您必須盡可能精確並發揮您作為提示工程師的技能,如果您不知道從哪裡開始,我建議您訪問本指南將為您正在使用的模型找到最佳指南,另一個非常有用的資源是anthropic 控制台。
這是我用於範例代理的提示,我建議用英語編寫提示,因為模型是用英語訓練的,有時用訓練源語言編寫有助於避免錯誤行為。
def call_multimodal(file,caption,modelId="anthropic.claude-3-haiku-20240307-v1:0"): #esta funcion es para llamar a un modelo multimodal con una imagen y un texto config = { "anthropic_version": "bedrock-2023-05-31", "max_tokens": 4096, "messages": [ { "role": "user", "content": [ { "type": "image", "source": { "type": "base64", "media_type": read_mime_type(file), "data": base64.b64encode(open(file, "rb").read()).decode("utf-8") } }, { "type": "text", "text": caption }] } ] } body = json.dumps(config) modelId = modelId accept = "application/json" contentType = "application/json" response = client.invoke_model( body=body, modelId=modelId, accept=accept, contentType=contentType) response_body = json.loads(response.get("body").read()) results = response_body.get("content")[0].get("text") return results
8) 附加配置,您必須允許代理捕獲用戶的輸入,因為他們肯定會缺乏處理訂單的信息,例如:他們需要詢問客戶想要的產品、名稱,除其他外。
9) 操作群組:操作群組定義代理可以幫助使用者的操作。例如,您可以定義一個表示 TakeOrder 的操作組,該操作組可以具有以下操作
要建立每個操作所需的操作組:
要執行的操作群組通常會呼叫 Lambda 函數,從 Bedrock 中您可以:
如果您選擇從Bedrock 控制台建立lambda 函數,則會在python 中建立一個函數,其中包含基本原始碼,然後您必須對其進行修改,在此儲存庫中的Agents/action_group/lambda.py文件中,您可以修改了範例程式碼以使其與代理程式一起使用。
這些變數將為您提供必要的資訊:
在下面的範例中,您可以看到有兩個操作:
Parametro | Descripcion | Tipo | Obligatorio |
---|---|---|---|
customerEmail | Email of the customer | string | False |
customerName | Name of the customer | string | True |
products | SKUs and quantities to add to the cart in the format [{ variantId: variantId, quantity: QUANTITY }] | array | True |
例如,當您在 lambda 函數中呼叫 get_products 函數時,它的處理方式如下:
定義了一個 get_products 函數,它將負責查詢 Shopify API(出於教育目的,我們傳回所有產品)
如果您希望在 Shopify 中使用此功能,您必須將以下變數替換為您商店的變數:
pip install -r requirements.txt
#Cambiar la region y el perfil de AWS aws = boto3.session.Session(profile_name='genaiday', region_name=region) client = aws.client('bedrock-runtime')
然後在 lambda 函數的處理程序中,驗證被呼叫函數的名稱,並以 action_group 所需的格式回傳回應:
{ "role": "user", "content": [{ "type": "text", "text": prompt }] }
上面的程式碼片段是此處找到的 lambda 函數的一部分
10) 按“儲存並退出”,代理就可以進行測試了。
接下來是測試代理並驗證它是否有效,從Bedrock 中您可以測試代理,如果在對話過程中您單擊“查看跟踪或顯示跟踪”,它將向您顯示推理過程,這就是您應該特別注意並在提示中進行您認為必要的調整,或者如果您發現您選擇的模型無法按您的預期工作,請尋找其他模型。
一旦您對代理感到滿意,您就可以創建一個別名,別名是一個ID,通過它您將能夠從Amazon Bedrock API 調用代理,當您創建別名時,它將創建一個版本自動代理,或者您可以指向已經存在的版本,具有不同的別名和不同的版本將幫助您控制代理部署過程,例如:
然後剩下的就是記下與您想要上線的版本相對應的生產別名。
如何呼叫代理
為此,我在agents/frontend資料夾中留下了一個名為agent.py的檔案。
此開發使用 Streamlit,一個強大的框架來製作範例機器學習應用程式
呼叫代理程式的程式碼部分如下:
def call_text(prompt,modelId="anthropic.claude-3-haiku-20240307-v1:0"): #esta función es para llamar un modelo de texto config = { "anthropic_version": "bedrock-2023-05-31", "max_tokens": 4096, "messages": [ { "role": "user", "content": [{ "type": "text", "text": prompt }] } ] } body = json.dumps(config) modelId = modelId accept = "application/json" contentType = "application/json" response = client.invoke_model( body=body, modelId=modelId, accept=accept, contentType=contentType) response_body = json.loads(response.get("body").read()) results = response_body.get("content")[0].get("text") return results
我們使用 boto3 來使用 AWS API,我們呼叫 bedrock-agent-runtime 用戶端來呼叫代理程式。
我們需要傳遞給它的參數是:
在此範例中,我在這裡定義變數:
print("Haiku") print(call_text("Estoy buscando armar un local de café al paso, dame 5 nombres para un local.")
首先,您必須在此處啟用對基岩說明中模型的存取
要求:
我建議建立一個虛擬 Python 環境 說明請參考此處
pip install -r requirements.txt
#Cambiar la region y el perfil de AWS aws = boto3.session.Session(profile_name='genaiday', region_name=region) client = aws.client('bedrock-runtime')
這將開始在連接埠 8501 上執行 Streamlit,您可以存取以下 URL:http://localhost:8501/ 查看將呼叫代理程式的前端
如果您已執行所有步驟:
一些連結供您在 GenerativeAI 中遵循自己的道路
AWS 生成式人工智慧研討會
基岩知識庫
Anthropic Console(用於調試我們的提示)
Community.aws(更多由社群產生並為社群產生的文章)
以上是使用 Amazon Bedrock 和 Shopify 建立咖啡店代理的詳細內容。更多資訊請關注PHP中文網其他相關文章!