### 1. 如何调用 API 访问 Amazon Bedrock 上的最强模型 Claude3
近日,Anthropic 最新研发的先进基础模型 Claude 3 Sonnet 重磅登陆 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail)。在基准测试中,Claude 3 展现出遥遥领先的性能,已超越当今市场上所有模型。本次 Anthropic 发布的最新模型一共有三个,他们分别是:Claude 3 Haiku、Claude 3 Sonnet 和 Claude 3 Opus。Claude 3 Sonnet 模型现已在 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 上实现首发。Anthropic 目前的评估表明,
根据 Anthropic 的官方报告"The Claude 3 Model Family: Opus, Sonnet, Haiku"数据显示,Claude 3 模型系列在数学应用题解决(MATH)和多语言数学(MGSM)基准(目前用于大语言模型的关键基准)方面优于同类模型。
![1.png](https://dev-media.amazoncloud.cn/b078e652a56e45ce9c99116625232ff9_1.png "1.png")
那一定会有小伙伴来问了,这么强大的模型我该如何把他集成到我的 web 应用中,利用最强模型的 AI 能力帮自己公司的业务赋能呢?今天小李哥就给大家介绍一下如何调用 API 访问 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail)上的Claude 3.
### 2. 如何调用 API 访问 Amazon Bedrock 上的Claude 3?
声明:[Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 和第三方模型仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您了解行业前沿技术和发展海外业务选择推介该服务。
在应用端调用 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 上的 Claude 3 首先需要大家拥有亚马逊云科技海外区账号。并且已经开通了 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 上的 Claude 3 使用权限。同时拥有账户的 IAM 策略、用户创建权限,access key 创建权限。
1. 开启[Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 上的 Claude 3 使用权限,进入 Bedrock 服务主页,点击"Model Access"
![2.png](https://dev-media.amazoncloud.cn/f95a3afd0ec1499d9605fcd79d4d4aa2_2.png "2.png")
2. 进入后点击右上角“Manage Model Access”
![3.png](https://dev-media.amazoncloud.cn/0539c850739845ca9d1e9a68a3d0c831_3.png "3.png")
3. 选中 Claude 3 模型,点击右下角保存
![4.png](https://dev-media.amazoncloud.cn/7ae4c89551454ec2ad635909dd8e42df_4.png "4.png")
4. 获取 API 访问权限的方法有**两种**,分别是在个人电脑通过 access key访问(只适用于个人开发),另外一种是通过为 [EC2](https://aws.amazon.com/cn/ec2/?trk=cndc-detail) 配置 IAM 角色访问(适用于正式生产环境)。建议通过第二种方式,可以让应用更安全地访问云上服务。
5. 鉴于本文是面向独立开发者测试,我们通过第一种方式访问,大家需要确认自己的个人电脑安装了 as cli,在命令行中输入 “was cli” 确认已经安装
![5.png](https://dev-media.amazoncloud.cn/4b66d0a9d72d47998131900b2055543f_5.png "5.png")
6. 其次大家需要在 IAM 服务中创建基于最小化权限原则的策略,首先我们进入IAM服务,点击创建策略。
![6.png](https://dev-media.amazoncloud.cn/34d4805b3d5949d7b5e1e99f9647a829_6.png "6.png")
7. 首先我们选择 Bedrock 服务作为访问资源,再点击 Next
![7.png](https://dev-media.amazoncloud.cn/e2c6469344b64063856337207536ec0c_7.png "7.png")
8. 添加 API 访问的颗粒度权限,这里我们选择“Invoke Model”操作,允许大家调用大模型生成内容。
![8.png](https://dev-media.amazoncloud.cn/37fd61192eb84c0694ecd4a48bd616c0_8.png "8.png")
9. 点击“Add ARNs”后,我们在第一个框中输入大家所在的区域,如“us-east-1”,并在第二个红框中输入 Claude 3 的模型 ID: “anthropic.claude-3-sonnet-20240229-v1:0”,最后点击添加
![9.png](https://dev-media.amazoncloud.cn/beba637429e24c389d352cc09c6acb56_9.png "9.png")
10. 接下来我们回到授权操作的框中输入 list,选中 ListFoundationModels
![10.png](https://dev-media.amazoncloud.cn/12a7e633ada74c0fa425c61df6e218ff_10.png "10.png")
11. 最后拉到界面的末尾,点击 Next
![11.png](https://dev-media.amazoncloud.cn/f686017ca109497db4a5f3705dbfd576_11.png "11.png")
12. 接下来大家在红框中输入策略的名称,如“bedrock-testing”,再拉到页面底端点击“Create Policy”
![12.png](https://dev-media.amazoncloud.cn/cf192878400742e3a838c35e2fd5f050_12.png "12.png")
13. 接下来大家创建一个用户,用于作为本地访问云端API的实体。
![13.png](https://dev-media.amazoncloud.cn/c70689c0faf941c9a3281241aac83606_13.png "13.png")
14. 给用户起一个名字,并点击 Next。注意这里不需要勾选提供访问控制台权限选项。
![14.png](https://dev-media.amazoncloud.cn/75e336784b0d4d34b090d175c2870031_14.png "14.png")
15. 点击第一个红框“Attach Policies directly”,在勾选刚刚创建建的策略,最后点击 Next。跳到下一页点击“Create User”就完成用户的创建了。
![15.png](https://dev-media.amazoncloud.cn/c263124eeb2f4d55a3f8ef4b67304990_15.png "15.png")
16. 接下来我们进入刚刚创建的用户
![16.png](https://dev-media.amazoncloud.cn/b9b7f81d15a1422293401eb58890f96c_16.png "16.png")
17. 接下来我们点击“security credentials”用于创建访问 API 的 access key
![17.png](https://dev-media.amazoncloud.cn/12a7e93f07574e98a0091c6ab5b1d43f_17.png "17.png")
18. 接下来拖到“Access Key”的部分,点击红框“Create access key”
![18.png](https://dev-media.amazoncloud.cn/dbaa689587a047df981f20a4afbbb754_18.png "18.png")
19. 勾选“Local Code”,再点击右下角的 Next
![19.png](https://dev-media.amazoncloud.cn/747a743603c94a3da7fe9af3ed88b9a6_19.png "19.png")
20. 为 Access Key 添加一个备注,并点击创建
![20.png](https://dev-media.amazoncloud.cn/6969b35690784cdc90d5c7eaeaaec0e8_20.png "20.png")
21. 大家把 access key 以及 secret access key 复制好,粘贴到一个文本文件中,后面会用到(access key 测试结束后一定要记得删除)。大家也可以点击下方把 Access key 下载到本机。
![21.png](https://dev-media.amazoncloud.cn/15e7ec2920b647d8a765ba4a779da6d3_21.png "21.png")
22. 接下来大家回到本地电脑的控制台,输入"aws configure"配置本机访问云端 API 的权限。在弹出的对应4行中分别输入刚复制的“Access key”,“Secret key”,并填写自己用户所在的区域,最后一行留空。每一行输入结束后,按回车跳到下一行。
![22.png](https://dev-media.amazoncloud.cn/1eeb10eeff9b4c359c21412af67dec45_22.png "22.png")
23. 下面就是最激动人心的时刻了,本篇文章会展示如何使用亚马逊云科技 Python Boto3 SDK 问 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 上的 Claude 3 模型。首先大家要在本地安装 Boto3 SDK,命令行输入“pip install boto3”
![23.png](https://dev-media.amazoncloud.cn/248f4089fdd7498b9b54ea3dadd970e1_23.png "23.png")
24. 接下来我们进入 IDE 中创建空的 Python 文件,复制下列代码并运行,查看目前 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 上支持的 Anthropic Claude 系列的模型。因为每一个不同的 Claude 3 模型都有自己单独的模型 ID,ID 很长经常记不住,这个脚本可以帮助我们快速地找到想调用的模型 ID。
```js
import boto3
bedrock = boto3.client(service_name="bedrock")
response = bedrock.list_foundation_models(byProvider="anthropic")
for summary in response["modelSummaries"]:
print(summary["modelId"])
```
25. 运行 Python 程序后,大家就可以找到我们这次要调用的 Claude 3 Sonnet 模型。其他几个是在 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 上可用的 Claude 系列其他模型。
![24.png](https://dev-media.amazoncloud.cn/91556a40e6624e809c897ca3d0ab44a8_24.png "24.png")
26. 接下来我们开始调用 API 访问 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 上的 Claude 3 模型。首先我们展示如何与 Claude 3 对话。我们可以使用 Claude 3 模型的 Message API 和模型对话,同时 Boto3 的指定语法调用 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 上的模型。关于 Message API 部分:
- “max_tokens”表示大模型可输出的最大长度
- “anthropic_version”表示 API 版本,我们填写"bedrock-2023-05-31"
- “messages”是由对话中消息组成的一个数组,每句对话由一个 JSON 对象表示,如果是用户发送的消息,role 则为”user”,如果是大模型的回复,role 则为”assistant”,content的值则表示对话的内容。
对于单个用户提问的代码示例为:
```js
import boto3
import json
bedrock = boto3.client(service_name="bedrock-runtime")
#调用Amazon Bedrock上模型的请求数据格式
body = json.dumps({
"max_tokens": 256,
"messages": [{"role": "user", "content": "Hello"}],
"anthropic_version": "bedrock-2023-05-31"
})
#调用模型生成内容
response = bedrock.invoke_model(body=body, modelId="anthropic.claude-3-sonnet-20240229-v1:0")
#提取API响应中大模型回复部分
response_body = json.loads(response.get("body").read())
print(response_body.get("content"))
```
如果是用户和大模型交互的多轮消息,Message的表示方法则为:
```js
[
{"role": "user", "content": "Hello there."},
{"role": "assistant", "content": "Hi, I'm Claude. How can I help you?"},
{"role": "user", "content": "Can you explain LLMs in plain English?"},
]
```
用该方法大家可以把大模型交互的历史消息记录一起写到单个 API 调用请求中。
27. 大家复制上述代码,粘贴到一个空的 Python 文件中再运行,就可以得到 Claude 3 的对话回复了。
![25.png](https://dev-media.amazoncloud.cn/33ec39bf2a814935aaa8b3185c65ba48_25.png "25.png")
28. Claude 3 模型经过训练,可以理解不同格式的结构化和非结构化数据,不仅是语言,还包括图像、图表、技术示意图等。下面是利用 Claude 3理解图片生成图像描述的 API 调用请求写法。小李哥选取的图片是 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 官方的 Logo。
![26.jpg](https://dev-media.amazoncloud.cn/ebf02e91f07f44b683f37691c6aa7e15_26.jpg "26.jpg")
29. 大家复制上述代码,粘贴到一个空的 Python 文件中再运行,就可以得到 Claude 3 对该图片的描述了。大家需要注意的是,如果是涉及图片处理的任务,Message API 中的 Content 部分要指明消息类型 type 为图片。
```js
import json
import boto3
import base64
bedrock = boto3.client(service_name="bedrock-runtime")
def call_claude_sonet(base64_string):
prompt_config = {
"anthropic_version": "bedrock-2023-05-31",
"max_tokens": 4096,
"messages": [
{
"role": "user",
"content": [
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/png",
"data": base64_string,
},
},
{"type": "text", "text": "Provide a caption for this image"},
],
}
],
}
body = json.dumps(prompt_config)
modelId = "anthropic.claude-3-sonnet-20240229-v1:0"
accept = "application/json"
contentType = "application/json"
response = bedrock.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
if __name__ == "__main__":
image_path = 'bedrock.jpeg'
# 读取图片,转换为Base64
with open(image_path, 'rb') as image_file:
image_data = image_file.read()
base64_string = base64.b64encode(image_data).decode('utf-8')
caption = call_claude_sonet(base64_string)
print(caption)
```
30. 可以看出 Claude 3 精准识别出了这张图片是 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 服务的 Logo,而且描述出了更多位置、颜色、深层含义等细节。
![27.png](https://dev-media.amazoncloud.cn/4fc5fd5d83e44a83bd46ecd3ae06558b_27.png "27.png")
如果小伙伴们没有海外区的账号,或者希望控制台访问 mazon Bedrock 上的Claude 3 服务,别担心,亚马逊云科技开启了限时试用 Claude 3的云上体验活动,让大家分分钟就能用上大模型!
### 3. 如何在亚马逊云科技 Amazon Bedrock 托管服务上试用 Claude 3?
目前,Anthropic 的 Claude 3 Sonnet 模型现已在亚马逊云科技的 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 正式可用,不仅如此,通过 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 访问包括 Claude 3 在内的多种领先模型目前均可试用。
亚马逊云科技体验服务入口如下:云上实验
![image.png](https://dev-media.amazoncloud.cn/aec7b9c692744251802d640e188114e5_image.png "image.png")
*[Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 是一项完全托管的服务,可以帮助您轻松访问各种领先的基础模型。*