首頁 >後端開發 >Python教學 >使用 Amazon Bedrock 和 Shopify 建立咖啡店代理

使用 Amazon Bedrock 和 Shopify 建立咖啡店代理

Patricia Arquette
Patricia Arquette原創
2024-10-30 18:02:31654瀏覽

今天我將解釋如何安全可靠地使用 Bedrock 工作,同時了解一些關於咖啡的知識。

您將學習如何使用 Python 使用 Amazon Bedrock API 的文字和多模式模型來為您的咖啡館產生名稱、徽標和選單,並建立連接到 Shopify API 來接受訂單的代理。

Shopify(在我看來)是現有的最好的電子商務平台。

就像 AWS 一樣,Shopify 擁有適用於所有內容的 API 和開發人員導向的平台

最後,您將使用 Streamlit 創建一個前端,以提供獨特的用戶體驗並為您的代理賦予生命。

?指數

  • 呼叫基岩 API
  • 建立與 Shopify 互動的 Amazon Bedrock 代理程式

?呼叫 Amazon Bedrock API 為您的咖啡店產生名稱、徽標和選單

開設自助餐廳或為任何企業提出創意的時刻都是依靠生成式人工智慧 (GenAI) 並充分利用它的絕佳機會。

透過 Amazon Bedrock 您可以使用它,但是...該服務是如何使用的?

AWS 中的每項服務都有一個 API,Amazon Bedrock 也不例外。下面我將透過範例解釋如何使用 Amazon Bedrock API 為行動自助餐廳產生名稱和菜單。

我還向您展示如何使用能夠分析影像的多模態模型。

對 Python 腳本進行程式設計以在本地運行或在 Lambda 函數中呼叫 Amazon Bedrock 的說明:

首先,您必須在此處啟用對基岩說明中模型的存取

要求:

  • AWS上的一個帳戶,如果您沒有帳戶,可以在這裡開一個帳戶
  • 此處的 AWS CLI 說明
  • Python 3.11 或更高版本

第 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
            }]
        }
    ]

?建立與 Shopify 互動的 Amazon Bedrock 代理

建立 Amazon Bedrock 代理:

確保您擁有想要使用的基岩模型並啟用了此處的訪問說明,在本例中我們將使用 Claude 3 Haiku 和 Sonnet

然後在AWS控制台中建立Bedrock代理:

1) 前往基岩服務
2) 代理
3)建立代理

Creación de un agente de cafetería con Amazon Bedrock y Shopify

4)為代理程式命名,在我們的例子中為「Pause-Coffee-Agent
5) 描述是可選的。
6) 最重要的步驟之一是選擇使我們的代理人正常工作的基礎模型。如果您想了解如何選擇適合您的用例的最佳模型,請參閱有關 Amazon Bedrock 模型的指南。評價.
7) 下一步是指導您模型的提示,在這裡您必須盡可能精確並發揮您作為提示工程師的技能,如果您不知道從哪裡開始,我建議您訪問本指南將為您正在使用的模型找到最佳指南,另一個非常有用的資源是anthropic 控制台。

Creación de un agente de cafetería con Amazon Bedrock y Shopify

這是我用於範例代理的提示,我建議用英語編寫提示,因為模型是用英語訓練的,有時用訓練源語言編寫有助於避免錯誤行為。

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) 附加配置,您必須允許代理捕獲用戶的輸入,因為他們肯定會缺乏處理訂單的信息,例如:他們需要詢問客戶想要的產品、名稱,除其他外。

Creación de un agente de cafetería con Amazon Bedrock y Shopify

9) 操作群組:操作群組定義代理可以幫助使用者的操作。例如,您可以定義一個表示 TakeOrder 的操作組,該操作組可以具有以下操作

  • 列出產品
  • 處理訂單

要建立每個操作所需的操作組:

  • 名字
  • 參數

要執行的操作群組通常會呼叫 Lambda 函數,從 Bedrock 中您可以:

  • 從 Bedrock 控制台建立 lambda 函數(選擇「快速建立 lambda 函數」)

Creación de un agente de cafetería con Amazon Bedrock y Shopify

  • 選擇此處已建立的 lambda 函數,其中包含事件的說明以及每個操作組的預期回應

如果您選擇從Bedrock 控制台建立lambda 函數,則會在python 中建立一個函數,其中包含基本原始碼,然後您必須對其進行修改,在此儲存庫中的Agents/action_group/lambda.py文件中,您可以修改了範例程式碼以使其與代理程式一起使用。

這些變數將為您提供必要的資訊:

  • function:是呼叫的操作的名稱,在範例中它可以是:get_products(列出產品)和 place_order(在 Shopify 中產生訂單)
  • parameters:是參數的字典。

在下面的範例中,您可以看到有兩個操作:

Creación de un agente de cafetería con Amazon Bedrock y Shopify

Crear agente Paso 6

  • 不需要任何參數的get_products
  • place_order 有 3 個參數:
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 調用代理,當您創建別名時,它將創建一個版本自動代理,或者您可以指向已經存在的版本,具有不同的別名和不同的版本將幫助您控制代理部署過程,例如:

  • 您可以有一個別名“development”,它將進入最新的代理測試
  • 一個「preprod」別名,它將是預生產模式下的代理
  • 別名“prod”,這是即時代理。

然後剩下的就是記下與您想要上線的版本相對應的生產別名。

如何呼叫代理

為此,我在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 用戶端來呼叫代理程式。

我們需要傳遞給它的參數是:

  • 代理 ID
  • 代理別名
  • inputText(提示)
  • sessionId(會話,用於識別對話)

在此範例中,我在這裡定義變數:

print("Haiku")
print(call_text("Estoy buscando armar un local de café al paso, dame 5 nombres para un local.")

設施:

首先,您必須在此處啟用對基岩說明中模型的存取

要求:

  • 此處的 AWS CLI 說明
  • Python 3.11 或更高版本

我建議建立一個虛擬 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/ 查看將呼叫代理程式的前端

Creación de un agente de cafetería con Amazon Bedrock y Shopify

結論

如果您已執行所有步驟:

  • 從 Bedrock Playground 和 Python 使用 Amazon Bedrock API
  • 您已經呼叫了基礎文字和多模式模型
  • 您已經從頭開始建立了一個使用 Shopify API 的代理程式

一些連結供您在 GenerativeAI 中遵循自己的道路

AWS 生成式人工智慧研討會
基岩知識庫
Anthropic Console(用於調試我們的提示)
Community.aws(更多由社群產生並為社群產生的文章)

以上是使用 Amazon Bedrock 和 Shopify 建立咖啡店代理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn