【Claude3】利用Python中完成对Bedrock上的Claude的API调用

时间:2024-03-17 15:34:25

在这里插入图片描述

文章目录

    • 1. 前期准备工作
    • 2. 安装和配置AWS CLI v2
    • 3. 使用AWS configure命令配置AWS凭据
    • 4. 安装访问Bedrock的SDK
    • 5. 访问Amazon Bedrock UI
    • 6. 订阅Bedrock上的Claude模型
    • 7. 通过CLI命令列出所有可用的Claude模型
    • 8. 向Claude 3 Sonnet on Bedrock生成文本
    • 9. 参考链接

1. 前期准备工作

  • 提前注册准备好一个AWS 海外账号;
  • 设置好一个IAM用户,并赋予相应的访问AWS资源的权限;
  • 为该IAM用户配置一个访问密钥;

2. 安装和配置AWS CLI v2

安装或更新AWS CLI v2。AWS CLI 版本 2 是 AWS CLI 的最新主版本,支持所有最新功能。

# windows系统下,打开CMD命令符提示窗口,输入此串命令,回车,开始安装更新AWS CLI。
msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi

C:\Users\xyb>msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi

C:\Users\xyb>aws --version
aws-cli/2.15.27 Python/3.11.8 Windows/10 exe/AMD64 prompt/off

开始按照指示点击安装即可。

image-20240310103502296

单击“Next”。

image-20240310103536283

因此前已经安装更新过AWS CLI v2,所以显示如下界面,提示改变存储位置修复移除等选项。

image-20240310103725784

此时,完成AWS命令行接口v2安装向导。

image-20240310103733060

最后,执行命令验证AWS CLI V2是否成功安装。

C:\Users\xyb>aws --version
aws-cli/2.15.27 Python/3.11.8 Windows/10 exe/AMD64 prompt/off

3. 使用AWS configure命令配置AWS凭据

在该IAM用户下创建访问密钥。

image-20240310111357557

使用AWS configure命令配置AWS凭据。

C:\Users\xyb>aws configure
AWS Access Key ID [****************WROS]:<xxx>
AWS Secret Access Key [****************IR6n]:<xxxxxx>
Default region name [us-west-2]:<AWS区域>
Default output format [None]:<json>

验证配置好的AWS凭据是否有效。

aws sts get-caller-identity
C:\Users\xyb>aws sts get-caller-identity
{
    "UserId": "AIDAxxxxxx5E4A",
    "Account": "540xxxxxxxx92",
    "Arn": "arn:aws:iam::540xxxxxxxx92:user/xxxxxxxx"
}

4. 安装访问Bedrock的SDK

Anthropic的客户端SDK支持Bedrock。也可以直接使用AWS SDK,如boto3。

pip install boto3>=1.28.59

image-20240310112437544

5. 访问Amazon Bedrock UI

输入https://aws.amazon.com/cn/,登陆到AWS管理控制台。在下方搜索栏中输入Bedrock。导航进入Amazon Bedrock。

image-20240309181857093

此时,来到Amazon Bedrock界面。可以开始开启Claude 模型访问权限。

image-20240310112858333

6. 订阅Bedrock上的Claude模型

先点击1️⃣模型访问权限,再点击2️⃣管理模型访问权限

image-20240310113324823

勾选要使用的Claude模型。

image-20240310113509292

提示:您现在可以访问此模型。只有在 Bedrock 中使用此模型时,才会向您收费。

接着,点击下方的保存更改的按钮。

image-20240310113624172

此刻,Claude 3 Sonnet模型访问请求已提交。访问状态为正在运行。需要等待几分钟的时间。

image-20240309201628522

稍等片刻之后,点击刷新按钮,可以看到该模型的访问状态,已经变成已授予访问权限,可以使用该模型了。

image-20240309201715091

⚠️注意事项⚠️

若在请求访问该模型出现如下报错信息时,可能是因为该AWS账号注册的联系地址信息不支持。需要进行更改,账户信息地址均需要切换成海外地址。

image-20240309202024233

修改地方①:账户的联系地址。依次按照图示,点击操作修改即可。

image-20240309204931607

修改地方①:账户的账单地址。依次按照图示,点击操作修改即可。

image-20240309205349603

7. 通过CLI命令列出所有可用的Claude模型

aws bedrock list-foundation-models --region=us-west-2 --by-provider anthropic --query "modelSummaries[*].modelId"
C:\Users\xyb>aws bedrock list-foundation-models --region=us-west-2 --by-provider anthropic --query "modelSummaries[*].modelId"
[
    "anthropic.claude-instant-v1:2:100k",
    "anthropic.claude-instant-v1",
    "anthropic.claude-v2:0:18k",
    "anthropic.claude-v2:0:100k",
    "anthropic.claude-v2:1:18k",
    "anthropic.claude-v2:1:200k",
    "anthropic.claude-v2:1",
    "anthropic.claude-v2",
    "anthropic.claude-3-sonnet-20240229-v1:0"
]

温馨提示:使用CLI命令列出AWS上所有可用的Claude模型,需要将AWS CLI更新成最新的版本,旧版本会访问失败。

8. 向Claude 3 Sonnet on Bedrock生成文本

import boto3
import json

bedrock = boto3.client(service_name="bedrock-runtime")
body = json.dumps({
  "max_tokens": 256,
  "messages": [{"role": "user", "content": "Hello, world"}],
  "anthropic_version": "bedrock-2023-05-31"
})

response = bedrock.invoke_model(body=body, modelId="anthropic.claude-3-sonnet-20240229-v1:0")

response_body = json.loads(response.get("body").read())
print(response_body.get("content"))

使用Claude模型分析这串代码,效果不错。

这段代码是使用Python和AWS Boto3库来调用Anthropic的Claude AI模型,生成相应的响应内容。让我们逐行解释一下:

  1. import boto3import json分别导入了boto3和json库。boto3是AWS提供的Python SDK,用于与AWS服务进行交互。json库则用于处理JSON数据格式。

  2. bedrock = boto3.client(service_name="bedrock-runtime")创建了一个名为bedrock的Boto3客户端,用于与AWS Bedrock Runtime服务进行交互。Bedrock Runtime是一个托管的服务,用于部署和运行机器学习模型。

  3. body = json.dumps({...})创建了一个JSON字符串作为请求体。这个请求体包含了调用Claude AI模型所需的参数,如最大令牌数(max_tokens)、对话历史(messages)和模型版本(anthropic_version)。

  4. response = bedrock.invoke_model(body=body, modelId="anthropic.claude-3-sonnet-20240229-v1:0")调用了Bedrock Runtime服务的invoke_model方法,传入请求体和要调用的模型ID。模型ID指定了要使用的Claude AI模型的版本。

  5. response_body = json.loads(response.get("body").read())从Bedrock Runtime服务的响应中提取出响应体,并将其从JSON字符串解析为Python字典对象。

  6. print(response_body.get("content"))打印出响应体中的content字段,该字段包含了Claude AI模型生成的响应内容。

总的来说,这段代码首先构建了一个包含对话历史和参数的请求体,然后使用Boto3客户端调用了AWS Bedrock Runtime服务中部署的Claude AI模型。最后,它从服务的响应中提取出模型生成的响应内容并将其打印出来。

image-20240309201737867
image-20240309201804908

9. 参考链接

[1] https://docs.anthropic.com/claude/reference/claude-on-amazon-bedrock

[2] https://xybdiy.blog.csdn.net/article/details/134488239

[3] https://console.anthropic.com/settings/keys

[4] https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/getting-started-install.html

温馨提示:Claude 3模型在Amazon Bedrock限时体验活动即将于3月11日零点正式结束。还没体验的小伙伴们抓紧体验啦~