首页  >  文章  >  后端开发  >  使用 Amazon Bedrock 和 Shopify 创建咖啡店代理

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

Patricia Arquette
Patricia Arquette原创
2024-10-30 18:02:31568浏览

今天我将解释如何安全可靠地使用 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