今天我将解释如何安全可靠地使用 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中文网其他相关文章!