近日,Anthropic 最新研发的先进基础模型 Claude 3 Sonnet 重磅登陆 Amazon Bedrock。在基准测试中,Claude 3 展现出遥遥领先的性能,已超越当今市场上所有模型。本次Anthropic发布的最新模型一共有三个,他们分别是:Claude 3 Haiku、Claude 3 Sonnet 和 Claude 3 Opus。期中Claude 3 Sonnet 模型现已在 Amazon Bedrock 上实现首发。根据Anthropic的官方报告"The Claude 3 Model Family: Opus, Sonnet, Haiku"的数据显示,Claude 3 模型系列在数学应用题解决(MATH)和多语言数学(MGSM)基准(目前用于大语言模型的关键基准)方面优于同类模型。
回到本次教程,在体验过控制台上的Claude 3模型后。小伙伴们一定会问了,我该如何把这次发布的强力大模型集成到我的web应用中?如何在亚马逊云科技上利用Claude 3的AI能力帮公司的业务赋能呢?今天小李哥这次就为大家介绍如何调用API访问Amazon Bedrock上的Claude 3。本次我会举两个例子,分别是调用Amazon Bedrock上的Claude 3模型的API的文字对话测试,以及图片理解测试。
2. 如何调用API访问Amazon Bedrock上的Claude 3?
声明:Amazon Bedrock和第三方模型仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您了解行业前沿技术和发展海外业务选择推介该服务。
测试事先准备:在应用端通过API调用Amazon Bedrock上的Claude 3需要大家满足以下条件:
- 拥有亚马逊云科技海外区账号。
- 账号开通了Amazon Bedrock上的Claude 3模型访问。
- 拥有管理IAM策略、用户,以及生成access key的权限。
- 本机下载了aws cli命令行工具。
下面请跟着小李哥一起创建API请求来访问Amazon Bedrock上的Claude 3大模型。
- 开启Amazon Bedrock上的Claude 3使用权限,进入Bedrock服务主页,点击”Model Access”。
- 进入后点击右上角“Manage Model Access”。
- 找到Anthropic模型系列,点击右侧按键“Submit use case details“。
- 填写以下的表格,用于申请使用Claude 3模型。按照图片中的要求填写下图表格,完成后点击右下角的“Submit“提交。审核会在5分钟内完成。
- 如果大家提交模型访问申请后,遇到了以下报错则是因为根据Anthropic(Claude模型)的服务地区条款,Anthropic的服务区域不包括中国大陆和香港。解决办法在下一步。
- 通过实测,这样可以通过设置AWS海外区的账号,用上Amazon Bedrock上的Claude 3:前提是大家使用模型的业务场景不能在大陆和香港地区。
账号的支付信息也需要设置在中国大陆及香港地区之外。包括了这三个信息:
1)Billing Address
2)Billing Country Code
3)Billing Contact address
如果是Organization下关联的Payer账户,也是同理。
下图举例的是独立账户修改Billing Address地址到海外的步骤。
13. 大家点击控制台右上角自己的用户名,展开后再点击“Billing“选项。
14. 再点击左边栏中的“Payment Preferences”(左侧红框),点击右上角的“Edit” (右侧红框),再将“Billing address”部分(中间的红框),改成一个Anthropic目前提供服务的地区地址(中国大陆及香港地区之外,如美国)就大功告成啦。
- 在申请审核成功后,再次进入“Manage Model Access“界面,就可以看到Claude 3模型前面的框可以被勾选了。选中Claude 3模型,点击右下角保存。
- 下一步我们需要获取API访问云端模型的权限,方法主要有两种。分别是在个人电脑通过access key访问(只适用于个人开发),另外一种是通过为EC2配置IAM角色访问(适用于正式生产环境)。建议通过第二种方式,可以让应用更安全地访问云上服务。
- 鉴于本文是面向独立开发者的教程,我们通过第一种方式访问,大家需要确认自己的个人电脑安装了aws cli,在命令行中输入 “aws cli” 确认已经安装。
- 其次大家需要在IAM服务中创建基于最小化权限原则的策略,首先我们进入IAM服务,点击创建策略。
- 首先我们选择Bedrock服务作为访问资源,再点击Next。
- 添加API访问的细颗粒度权限,这里我们选择“Invoke Model”操作,允许大家调用大模型生成所需内容。
- 点击“Add ARNs”后,我们在第一个框中输入大家账户所在的区域,如“us-east-1”,并在第二个红框中输入Claude 3的模型ID: “anthropic.claude-3-sonnet-20240229-v1:0”,最后点击添加。
- 接下来我们回到授权操作框中输入list,选中ListFoundationModels。
- 最后拉到界面的末尾,点击Next。
- 接下来大家在红框中为策略起一个名称,如“bedrock-testing”,再拉到页面底端点击“Create Policy”(未在图片中显示)。
- 接下来大家创建一个用户,用于作为本地访问云端API的实体。
- 给这个用户起一个名字,并点击Next。注意这里不需要勾选允许控制台访问选项。
- 点击第一个红框“Attach Policies directly”,勾选在第12步创建的策略,最后点击Next。跳到下一页后,再点击“Create User”就完成用户创建了。
- 接下来我们进入刚刚创建的用户。
- 点击 “security credentials”,用于创建API访问云端服务的access key。
- 接下来拖到“Access Key”部分,点击红框“Create access key”。
- 勾选“Local Code”选项,再点击右下角的Next。
- 为Access Key添加一个备注,并点击创建。
- 大家需要把access key以及secret access key复制好,粘贴到一个文本文件中,后面会用到这两个key(access key测试结束后一定要记得删除)。大家也可以点击下方的”Download .csv file”把两个access key下载到本地。
- 接下来大家回到本地电脑的命令行控制台,输入”aws configure”配置本机访问云端API的Access Key。在弹出的输入框(共4行)中分别输入刚复制的“Access key”,“Secret access key”,并填写自己账户所在的区域,把最后一行留空。每一行输入结束后,按回车跳到下一行。
- 下面就是最激动人心的时刻了,本篇文章会展示如何使用亚马逊云科技Python Boto3 SDK访问Amazon Bedrock上的Claude 3模型。首先大家要在本地安装Boto3 SDK,在命令行输入“pip install boto3”进行安装。
- 接下来我们进入自己常用的IDE中,创建一个空的Python文件,复制下列代码并运行,这个脚本可以查看目前Amazon Bedrock上支持的Anthropic Claude系列的模型。因为每一个不同的Claude 3模型都有自己单独的模型ID,ID很长经常记不住,这个脚本可以帮助我们快速地找到想调用的模型ID。
import boto3
bedrock = boto3.client(service_name="bedrock")
response = bedrock.list_foundation_models(byProvider="anthropic")
for summary in response["modelSummaries"]:
print(summary["modelId"])
- 运行Python程序后,大家就可以找到我们这次要调用的Claude 3 Sonnet模型。其他几个是其他在Amazon Bedrock上可用的Claude系列模型。大家仍可在云上实验室中体验。
- 接下来我们开始展示如何调用API访问Amazon Bedrock上的Claude 3模型。
首先我们展示的是与Claude 3对话的场景。我们需要先使用Claude 3模型提供的标准Message API定义请求的输入内容,再利用Boto3的指定语法调用Amazon Bedrock上托管的Claude 3模型和模型对话。关于Message API部分的参数解释为:
-“max_tokens”表示大模型可输出的最大长度
-“anthropic_version”表示API版本,我们填写"bedrock-2023-05-31"
-“messages”是对话消息组成的一个数组,每句对话由一个JSON对象表示,如果是用户发送的消息,role则为”user”,如果是大模型的回复,role则为”assistant”,content的键值则表示对话的内容。
对于用户向Claude 3提问单个问题的代码示例为:
import boto3
import json
bedrock = boto3.client(service_name="bedrock-runtime")
#调用Claude 3模型的标准Message API
body = json.dumps({
"max_tokens": 256,
"messages": [{"role": "user", "content": "Hello"}],
"anthropic_version": "bedrock-2023-05-31"
})
#调用Amazon Bendrcok上的Claude 3模型生成内容
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的表示方法则为:
[
{"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调用的请求中。
- 大家复制上述代码,粘贴到一个空的Python文件中再运行,就可以得到Claude 3的对话回复了。
- Claude 3 模型经过训练,可以理解不同格式的结构化和非结构化数据,不仅是语言,还包括图像、图表、技术示意图等。下面展示是通过API调用Claude 3模型,让大模型理解图片后生成关于图像文字描述。小李哥选取的图片是Amazon Bedrock官方的Logo。
- 大家复制上述代码,粘贴到一个空的Python文件中再运行,就可以得到Claude 3对该图片的描述了。大家需要注意的是,如果是涉及的是图片处理任务,Message API中的Content部分要指明消息类型type为图片,输入的数据是图片的Base64编码。
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", #API请求的内容类型是图片
"source": {
"type": "base64", #API输入的数据是图片的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)
- 可以看出Claude 3精准识别出了这张图片是Amazon Bedrock服务的Logo,而且描述出了更多关于Logo位置、颜色、以及背后深层含义等细节。
在未来的文章中,小李哥会继续带领大家探索Amazon Bedrock的更多功能,如“如何在Amazon Bedrock上构建安全合规、负责任的大模型“,”如何评估Amazon Bedrock上的自定义训练模型“,”如何在Amazon Bedrock上训练自定义模型“,“如何利用Amazon Bedrock构建企业知识库”等,敬请期待。