使用Python SDK在亚马逊云科技上调用AI模型构建生成式AI应用

发布于:2025-03-19 ⋅ 阅读:(18) ⋅ 点赞:(0)

Amazon Bedrock是一项全托管的亚马逊云科技服务,提供来自AI21 Labs、Anthropic、Cohere、Meta、Mistral AI、Stability AI和Amazon等领先AI公司的高性能基础模型(FMs),并通过单一、标准化的API提供构建生成式AI应用所需的各种能力、功能,同时确保AI应用的安全性、隐私性和负责任的AI准则。借助Amazon Bedrock大家可以根据业务场景测试和评估全球领先的AI基础模型,利用微调和检索增强生成(RAG)等技术进行模型私有化定制,并构建能够集成企业内部系统和数据源执行业务任务的智能代理。由于Amazon Bedrock是无服务器服务,大家无需管理任何基础设施,可以利用已有的亚马逊云科技服务,安全地集成和部署生成式AI功能到应用程序中。

在本文中,我们将演示如何使用AWS SDK for Python (叫Boto3) 与我们的AI应用集成,并通过代码形式调用Amazon Bedrock上的AI基础模型。

解决方案概述

该解决方案使用Boto3 SDK编写的Python脚本,调用Amazon Bedrock上的Anthropic Claude 3 Sonnet模型。该模型根据我们提供的提示词生成输出。以下架构图展示了解决方案的整体流程。

实验前提条件

在大家调用Amazon Bedrock API之前,请大家确保具备以下条件:

  • 具备访问Amazon Bedrock的亚马逊云科技海外区账户
  • 已安装AWS CLI
  • 已创建用于Amazon Bedrock API调用的IAM用户,并为其分配适当权限
  • 拥有IAM用户的访问密钥和私有秘钥,以配置AWS CLI的访问权限
  • 拥有Amazon Bedrock上的AI基础模型的访问权限
  • 已安装最新版本的Boto3库
  • 开发环境(IDE)中已安装和配置Python 3.8或更高版本的Python

开始实验部署

如果满足实验的前提条件,大家就可以开始使用Amazon Bedrock。以下是具体的代码调用步骤:

1. 导入所需库

import boto3
import json

2. 配置Boto3客户端加载Amazon Bedrock运行环境,并指定调用区域

# Set up the Amazon Bedrock client
bedrock_client = boto3.client(
    	service_name="bedrock-runtime",
    region_name="us-east-1"
)

3. 指明要调用的模型

在本实验中,我们使用Amazon Bedrock上的Anthropic Claude 3 Sonnet模型:

# Define the model ID
model_id = "anthropic.claude-3-sonnet-20240229-v1:0"

4. 设置提示词

此提示词是用户与AI模型交互时提供的输入信息。在生成式AI应用中,提示词工程(prompt engineering) 技术可以提升AI基础模型的性能并优化输出效果。

# Prepare the input prompt.
prompt = "Hello, how are you?"

5. 定义API请求体

在调用Amazon Bedrock模型之前,我们需要定义一个请求体,该请求体包含用于引导模型生成输出的指令和相关参数。请求体结构因所选模型而异。在本示例中我们将针对Anthropic Claude 3 Sonnet模型定义请求体。可以将该请求体视为模型调用的模板,我们需要填入必要的上下文和参数,以便根据我们的提示词生成所需的文本。

请求体中的关键元素

  • anthropic_version – 指定Amazon Bedrock所使用的Anthropic模型版本
  • max_tokens – 设定生成文本的最大token数量。Token是大型语言模型(LLM)处理和生成文字的最小文本单元,包括单词、标点符号和子词等
  • temperature – 控制生成文本的随机性。较高的值会产生更具创造性和不可预测的输出,而较低的值则会使结果更加保守和一致
  • top_k – 设定在AI模型生成过程中没次考虑的最可能的候选词的数量,概率从高到低排序
  • top_p – 影响采样概率分布,较高的值倾向于选择更常见的词,较低的值则允许更具多样性的选择
  • messages – 包含一系列大模型将会处理的消息,在一个数组中存储
  • role – 定义一个消息是由谁发送的(即用户和系统回复)
  • content – 存储实际消息内容的提示文本,在如下的示例中,content部分存储了用户的提示词。

6. 请求体参数示例

payload = {
    "anthropic_version": "bedrock-2023-05-31",
    "max_tokens": 2048,
    "temperature": 0.9,
    "top_k": 250,
    "top_p": 1,
    "messages": [
        {
            "role": "user",
            "content": [
                {
                    "type": "text",
                    "text": prompt
                }
            ]
        }
    ]
}

7. 调用Amazon Bedrock API

完成API调用参数设置和AI模型选择后,大家可以通过API的形式调用Amazon Bedrock。此时需要提供要调用的AI模型ID及已定义的请求体信息:

# Invoke the Amazon Bedrock model
response = bedrock_client.invoke_model(
    modelId=model_id,
    body=json.dumps(payload)
)

8. 获取并展示返回结果

请求处理完成后,可以提取并打印出Amazon Bedrock生成的文本输出。

# Process the response
result = json.loads(response["body"].read())
generated_text = "".join([output["text"] for output in result["content"]])
print(f"Response: {generated_text}")

9. 完整的代码示例

以下是完整脚本示例:

import boto3
import json

# Set up the Amazon Bedrock client
bedrock_client = boto3.client(
    service_name="bedrock-runtime",
    region_name="us-east-1"
)

# Define the model ID
model_id = "anthropic.claude-3-sonnet-20240229-v1:0"

# Prepare the input prompt
prompt = "Hello, how are you?"

# Create the request payload
payload = {
    "anthropic_version": "bedrock-2023-05-31",
    "max_tokens": 2048,
    "temperature": 0.9,
    "top_k": 250,
    "top_p": 1,
    "messages": [
        {
            "role": "user",
            "content": [
                {
                    "type": "text",
                    "text": prompt
                }
            ]
        }
    ]
}

# Invoke the Amazon Bedrock model
response = bedrock_client.invoke_model(
    modelId=model_id,
    body=json.dumps(payload)
)

# Process the response
result = json.loads(response["body"].read())
generated_text = "".join([output["text"] for output in result["content"]])
print(f"Response: {generated_text}")

我们通过输入提示词问题 "Hello, how are you?"来调用模型,大模型将返回以下的示例结果:

清理资源

使用完Amazon Bedrock后,我们要清理刚创建的云资源,例如IAM用户和Amazon CloudWatch日志,以避免意料之外的云服务费用。具体的费用取决于我们AI模型使用频率、所选模型的价格以及脚本运行时的计算资源消耗。有关详细信息,请参阅Amazon Bedrock定价页面了解优化成本的方法,例如选择合适的模型、优化提示词以及监控AI模型资源、输入/输出Tokens使用量。

结论

在本文中,我们演示了如何使用Python Boto3 SDK与Amazon Bedrock的AI基础模型进行编程交互的方案。我们探讨了如何调用特定AI基础模型并输出其生成的文本,展示了开发者如何将这些模型集成到AI应用程序中,目前Amazon Bedrock上的AI模型可以应用到多种应用场景,包括:

  • 文本生成 – 生成诗歌、剧本、音乐作品,甚至不同编程语言的代码
  • 代码补全 – 通过现有的代码片段补全代码,提高开发效率
  • 数据摘要 – 从大型数据集中提取关键业务信息并生成总结分析
  • 对话式AI – 构建能够进行自然语言交互的聊天机器人和AI虚拟助手

希望未来大家可以继续探索如何利用生成式AI重塑各个行业。通过试用不同AI模型和API,我们可以比较不同模型的输出效果。最后找到最适合大家业务需求的模型,并以本文介绍的脚本为基础,在大家的AI解决方案中进一步创建智能代理和集成AI基础模型。


网站公告

今日签到

点亮在社区的每一天
去签到