生成式 AI 和大模型在 2024 年现已进入落地实践阶段。因而,围绕开发者在生成式应用程序开发中的首要痛点和需求,咱们组织了这个 “Amazon Bedrock 实践” 的系列,希望能够协助开发者高效地上手生成式 AI 和大模型的应用开发,本篇为第一篇。
亚马逊云科技开发者社区为开发者们供给全球的开发技能资源。这儿有技能文档、开发事例、技能专栏、训练视频、活动与竞赛等。协助我国开发者对接世界最前沿技能,观念,和项目,并将我国优异开发者或技能推荐给全球云社区。假如你还没有重视/保藏,看到这儿请必定不要仓促划过,点这儿让它成为你的技能宝库!
Amazon Bedrock 是亚马逊云科技供给的一项服务,能够让开发者轻松运用称为根底模型(Foundation Model)的强壮 AI 模型。以下是其关键功用概述:
- 拜访高功能根底模型: Amazon Bedrock 供给对由领先 AI 公司和亚马逊本身开发的各种根底模型的拜访权限。这些根底模型在许多数据上进行训练,能够履行各种使命,包括文本生成、图画辨认和代码完结等
- 共同的 API: 开发者能够通过单个 API 与一切可用的根底模型进行交互,简化了在应用程序中运用根底模型的杂乱进程,这消除了为每个根底模型学习不同 API 的必要性
- 轻松集成: Amazon Bedrock 是一项彻底保管的服务,这意味着亚马逊云科技会担任管理底层根底设施,使开发者能够专心于构建应用程序,而无需担心服务器设置和维护
- 安全性和隐私性: Amazon Bedrock 供给了相关的功用来协助开发者构建安全和私密的 AI 应用程序,开发者能够操控对根底模型和数据的拜访,从而维护开发者的数据隐私
- 专心于生成式 AI: 虽然根底模型能够履行各种使命,但 Amazon Bedrock 特别重视生成式 AI 应用程序,这些应用程序运用 AI 创立新内容,例如文本、图画或代码等
总体而言,Amazon Bedrock 是一个功用强壮的东西,适用于希望利用尖端 AI 模型的功用的开发人员,而无需管理底层根底设施的杂乱性。
本文首要以 Claude 3 模型为例,讨论怎么运用 Amazon Bedrock 构建不同事务场景的生成式 AI 应用程序。本文首要包括四部分内容:
- 在 Amazon Bedrock 中设置和获取模型拜访权限
- 在 Amazon Bedrock 操控台中运用模型
- 调用 Amazon Bedrock API 来运用模型
- Amazon Bedrock 参考资料
本篇讨论的 Anthropic Claude 3 模型,目前仅在亚马逊云科技的海外账户可用。
在 Amazon Bedrock 中设置和获取模型拜访权限
首要咱们需求在 Amazon Bedrock 中,获取特定模型的拜访权限。以下将以 Claude 3 模型为例,逐步辅导开发者们装备和获取模型的拜访权限。
第一步:进入到 Amazon Bedrock 的 UI 操控台。 点击 Get started:
在这儿咱们能够看到 Amazon Bedrock 支撑多个根底模型(foundation model),其间包括 Amazon Titan,Claude,Jurassic,Command,Mistral,Stable Diffusion 以及 Llama2。如下图所示:
承认右上角区域,若已是 Oregon,这一步跳过。若不是,请在右上角挑选 Oregon,挑选 us-west-2:
左边的导航栏中点击 Model access,如下图所示:
若已有相应模型权限,即模型后边是 Access granted,可跳过这一步。否则,点击 Manage model access:
点击“Submit use case details” 来请求拜访相关模型。假如你有详细的运用场景事例,你能够简述你的运用场景。对于一般测验,你可参考下图填写相关内容。在这个弹出的窗口里填写完结后,点击“Submit”提交:
成功提交之后,挑选左上角的 CheckBox 选中一切 model,之后点击“Request model access”:
假如你现已完结提交并现已取得模型的拜访权,你会看到如下图所示:
接下来,咱们先探究在操控台运用 Playgrounds 的方法,测验 Claude 3 模型。
首要,在左边的导航栏中点击 “Playgrounds – Chat” 进入谈天界面:
点击 Select model 来挑选咱们要运用的根底模型
咱们挑选 Anthropic 的 Claude 3 模型(Sonnet v1 或许 Haiku v 1)来体验其强壮的推理能力和中文处理能力,点击“Apply”:
能够调整右侧的参数,然后就能够在谈天窗口中输入提示词和上传图片,回车或点击 “Run” 按钮获取模型输出。如下图所示:
至此,咱们现已彻底了解了怎么在 Amazon Bedrock 中,获取 Claude 3 模型的拜访权限。
鄙人一节里,咱们将通过几种实践场景,详细诠释怎么在操控台运用 Claude 3 模型。
在Amazon Bedrock 操控台中运用模型
本节将以 Claude 3 模型为例,阐述怎么在Amazon Bedrock 操控台中运用模型。
翻译场景
首要咱们测验下 Claude 3 模型的翻译场景。
测验的内容节选自了 3 月初 NVIDIA CEO (Jensen Huang) 在 Stanford University 的访谈视频。假如你是 AI 和机器学习职业的开发者、工程师、数据科学家等,该视频十分值得观看。在这个一小时左右的视频中,Jensen 在共享他眼中 AI 的未来之外,也共享了他对创业、人生挑选、以及人类未来命运等经历和精彩观念,这些经历和观念主张,对从事该领域的年轻人十分有学习含义。
视频在 B 站上的链接如下:www.bilibili.com/video/BV15S… (有中文字幕)
回到咱们这个用 Claude 3 测验翻译场景的比如。
咱们先在 Amazon Bedrock Playground 中,输入以下提示词(prompt)。其间“<org></org>
”定义的英文脚本,节选自以上访谈视频的内容:
你是一个协助翻译剧本的助理。 你的使命是将中的英文源文本翻译成中文。翻译时,请遵守以下规矩:
1/ 不要改变初衷
2/ 翻译前先了解上下文,坚持语义连贯,阅读流畅,但不要成心夸大
3/ 原文大多是对话式的,因而翻译仍应契合 TikTok/ 短视频/视频博客 /Youtube 视频的上下文。注意避免运用通常不用于日常谈天的词语
4/恰当的时分保留一些专有名词或专业术语未翻译,注意前后共同
5/ 在
<result><result>
中回复翻译。不要包括任何额外的内容
<org>
“Stanford Business Graduate School of Business student Jose: My name’s Jose, I’m a class with the 2023 from the GSB. My question is, are you worried at all about the pace at which we’re developing AI? And do you believe that any sort of regulation might be needed? Thank you.Jensen Huang: Yeah, the answer is yes and no. The greatest breakthrough in modern AI, of course deep learning, and it enabled great progress. But another incredible breakthrough is something that humans know and we practice all the time. And we just invented it for language models called grounding, reinforcement learning human feedback. I provide reinforcement learning human feedback every day. That’s my job. And for the parents in the room, you’re providing reinforcement learning human feedback all the time, okay? Now, we just figured out how to do that at a systematic level for artificial intelligence.”
</org>
点击“Run”,查看模型输出的翻译成果。如下图所示:
由翻译成果可见,Claude 3 还是翻译地比较自然的。
现实问答场景
接下来咱们探究现实问答场景。在 Playground 中输入以下提示词(prompt)。
先用英文向 Claude 3 模型提问:
Could you please list the major events that happened in Istanbul between 1800 and 1900?
再用中文向 Claude 3 模型提问:
请罗列在 1800-1900 年伊斯坦布尔发生的大事。
可见,无论是中文还是英文提问,Claude 3 都抓住了历史上的首要事情,没有显着的现实错误和编造。
各位开发者能够自行修正提示词中的内容,进行更多现实问答的测验。
小说续写场景
然后是小说续写场景,看看怎么用 Claude 3 大模型来写一篇精彩的小说。
在 Playground 中输入以下提示词(prompt):
小说续写 “剑花烟雨江南” 要有画面感和沧桑感,字数在 300 字以内
咱们修正下 prompt,增加 story 风格的要求,修正提示词(prompt)如下:
仿照小说家古龙的风格, 小说续写 “剑花烟雨江南” 要有画面感和沧桑感,字数在 300 字以内
咱们修正下 prompt,再修正下对故事风格的要求,修正的提示词(prompt)如下:
仿照莎士比亚的风格, 小说续写 “剑花烟雨江南” 要有画面感和沧桑感,字数在 300 字以内
你也能够在 Chat playground 里,比较两个不同的 Claude 3 模型(Haiku 和 Sonnet)的反响速度和输出,打开如下这个开关即可:
你会发现 Claude 3 Haiku 反响十分之快,对比于 Claude 3 Sonnet 模型,运用相同的提示词(prompt):
仿照小说家古龙的风格, 小说续写 “剑花烟雨江南” 要有画面感和沧桑感,字数在 300 字以内
在你点击完“Run”按钮之后,几乎 1 秒内就得到了回来成果。如下图所示:
图画了解场景
接下来是图画了解场景。
下图我在广州高铁站的星巴克里消费的一张小票,我预备发给 Claude 3 模型去了解,看看它怎么剖析这张小票。
假如咱们持续输入对 Claude 3 模型的要求,比如:
请用简体中文描绘你了解的图片中的内容
好的, 我用简体中文描绘图片中的内容:
这是一张星巴克咖啡店的收银小票,位于广州市南站 3F-A5 店肆。小票上显示了店肆地址、顾客姓名(张 Ashley)、订购的商品和价格、总金额以及交易时间。图片中没有呈现任何人物相片,因而不需求避免辨认人物身份。
小结
咱们发现 Claude 3 了解根本正确,除了把这张收据上的“Ashley ZHANG”了解成了顾客(其实是星巴克其时的下单售货员)。其实这也不是 Claude 3 的错,因为在这张原始的收据上,从字面并没有说清楚“Ashley ZHANG”到底是顾客,还是星巴克的销售员呢!
还有许多风趣并有用的场景,咱们将鄙人一集提高篇里,持续和大家共享。
调用 Amazon Bedrock API 运用模型
在前面的章节里,咱们讨论了在 Amazon Bedrock 操控台拜访模型。在本节中,咱们将讨论怎么编写一些简略代码,调用 Amazon Bedrock API 来运用模型。
运转环境装备
本例中运用了 Amazon SageMaker Notebook instances 环境,来调用 Amazon Bedrock API 拜访各种大模型。如下图所示:
提醒:运转这个 notebook instance 的 role,需求具有拜访 Amazon Bedrock 的权限。
本例中作者装备了 sagemaker-demo-role-haowen 这个自定义的 role 来运转 notebook instance。这个自定义的 role 中,包括了能够彻底拜访 Bedrock 的策略AmazonBedrockFullAcess,这个策略赋予了拜访 Bedrock 服务的 full access 权限。如下图所示:
假如你想在本地电脑运转以上代码,需求在你的本地电脑先装备 Credentials,具体可参考: boto3.amazonaws.com/v1/document…
代码功用剖析
咱们仍然以 Claude 3 模型为例,以下 Python 代码示例展示了怎么运用 Amazon Bedrock,别离调用 Claude 3 的 Sonnet 模型和 Haiku 模型,描绘一个输入的图画,并打印出其耗时等信息。别的,代码还比较了非流式、流式两种不同的调用方法。
代码触及的首要功用如下:
编码图画:将给定图画转化为用于传输的 base64 编码字符串
调用大型言语模型生成文本:调用了两个模型(Sonnet 和 Haiku)来生成文本
处理模型呼应:以两种形式(流式和非流式)别离来捕获模型输出
丈量功能目标:记录输入和输出文本片段(token)计数、首字节延迟和整体调用延迟
完整代码如下所示:
!pip install -qU boto3
import json
import os
import sys
import boto3
import base64
import requests
import time
import pprint
from datetime import datetime
#取得模型的modelARN
region = 'us-east-1'#'us-west-2' #
boto3_bedrock = boto3.client('bedrock',region)
boto3_bedrock.list_foundation_models()
#取得实验图画,你也能够在这儿替换为任何你自己想描绘的图画
!wget https://cats.com/wp-content/uploads/2020/10/tabby-maine-coon-768x384.jpg
stream = False
# Function to encode the image 编码图画的函数
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode('utf-8')
# non streaming mode 非流式调用方法
def anthropic_claude_3(modelId,image_path,max_tokens):
bedrock_runtime = boto3.client('bedrock-runtime')
base64_image = encode_image(image_path)
payload = {
"modelId": modelId,
"contentType": "application/json",
"accept": "application/json",
"body": {
"anthropic_version": "bedrock-2023-05-31",
"max_tokens": max_tokens,
"messages": [
{
"role": "user",
"content": [
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/png",
"data": base64_image
}
},
{
"type": "text",
#"text": "Write me a detailed description of these two photos, and then a poem talking about it."
"text": f"What’s in this image? output {max_tokens} tokens"
}
]
}
]
}
}
# Convert the payload to bytes 转化负荷到字节
body_bytes = json.dumps(payload['body']).encode('utf-8')
# Invoke the model 调用模型
response = bedrock_runtime.invoke_model(
body=body_bytes,
contentType=payload['contentType'],
accept=payload['accept'],
modelId=payload['modelId']
)
# Process the response 处理呼应
response_body = json.loads(response['body'].read().decode('utf-8'))
pprint.pprint(response_body)
#return round(end-start,2),response_body["usage"]["input_tokens"],response_body["usage"]["output_tokens"]
return round(float(response['ResponseMetadata']['HTTPHeaders']['x-amzn-bedrock-invocation-latency'])/1000,2),int(response['ResponseMetadata']['HTTPHeaders']['x-amzn-bedrock-input-token-count']),int(response['ResponseMetadata']['HTTPHeaders']['x-amzn-bedrock-output-token-count'])
# streaming mode 流式调用方法
def anthropic_claude_3_stream(modelId,image_path,max_tokens):
bedrock_runtime = boto3.client('bedrock-runtime')
base64_image = encode_image(image_path)
payload = {
"modelId": modelId,
"contentType": "application/json",
"accept": "application/json",
"body": {
"anthropic_version": "bedrock-2023-05-31",
"max_tokens": max_tokens,
"messages": [
{
"role": "user",
"content": [
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/png",
"data": base64_image
}
},
{
"type": "text",
#"text": "Write me a detailed description of these two photos, and then a poem talking about it."
"text": f"What’s in this image? output {max_tokens} tokens"
}
]
}
]
}
}
# Convert the payload to bytes
body_bytes = json.dumps(payload['body']).encode('utf-8')
# Invoke the model
response = bedrock_runtime.invoke_model_with_response_stream(
body=body_bytes, modelId=payload['modelId'], accept=payload['accept'], contentType=payload['contentType']
)
stream = response.get('body')
chunk_obj = {}
if stream:
for event in stream:
chunk = event.get('chunk')
if chunk:
chunk_obj = json.loads(chunk.get('bytes').decode())
pprint.pprint(chunk_obj)
# Process the response
#response_body = json.loads(response['body'].read().decode('utf-8'))
#pprint.pprint(response_body)
{'type': 'message_stop', 'amazon-bedrock-invocationMetrics': {'inputTokenCount': 92, 'outputTokenCount': 277, 'invocationLatency': 3679, 'firstByteLatency': 677}}
return round(float(chunk_obj['amazon-bedrock-invocationMetrics']['firstByteLatency'])/1000,2),round(float(chunk_obj['amazon-bedrock-invocationMetrics']['invocationLatency'])/1000,2),chunk_obj['amazon-bedrock-invocationMetrics']['inputTokenCount'],chunk_obj['amazon-bedrock-invocationMetrics']['outputTokenCount']
# 调用成果
image_path = "tabby-maine-coon-768x384.jpg"
max_tokens = 200
#haiku
print("Haiku:")
modelId = "anthropic.claude-3-haiku-20240307-v1:0"
print(anthropic_claude_3(modelId,image_path,max_tokens))
print(anthropic_claude_3_stream(modelId,image_path,max_tokens))
#sonnet
print("Sonnet:")
modelId = "anthropic.claude-3-sonnet-20240229-v1:0"
print(anthropic_claude_3(modelId,image_path,max_tokens))
print(anthropic_claude_3_stream(modelId,image_path,max_tokens))
模型输出剖析
以下摘要剖析了两个不同的模型(Haiku 和Sonnet)的风趣输出成果。
对于 Haiku 模型:
{'content': [{'text': 'This image depicts a beautiful Maine Coon cat sitting '
'on a scratching post or cat tree. The cat has a thick, '
'fluffy coat with a distinctive tabby pattern of stripes '
'and markings. Its eyes are alert and focused, adding a '
"regal and intelligent expression to the feline's "
'appearance. The background appears to be a cozy indoor '
'setting, with the cat perched comfortably on the '
'scratching post. Maine Coon cats are known for their '
'large size, friendly personalities, and impressive '
'physical features, and this image captures the essence '
'of this majestic breed perfectly.',
'type': 'text'}],
……
{'amazon-bedrock-invocationMetrics': {'firstByteLatency': 291,
'inputTokenCount': 489,
'invocationLatency': 3431,
'outputTokenCount': 128},
……
对于 Sonnet 模型:
{'content': [{'text': 'This image shows a beautiful Maine Coon cat resting on '
'a cat tree or scratching post. The Maine Coon is a '
'large semi-longhaired breed known for its fluffy fur, '
'tufted ears, and bushy tail.n'
'n'
'The cat in the picture has a brown tabby coat with '
'distinctive striped markings. Its face has a '
'distinctive "M" marking above the eyes, typical of '
"tabby cats. The cat's large, expressive eyes are a "
'striking yellow-green color, giving it an intense yet '
'gentle gaze.n'
'n'
'The feline is lounging comfortably on a beige carpeted '
'platform, with one paw tucked under its body and the '
'other extending forward. The cat tree or post appears '
'to be made of sisal rope wrapped around a wooden frame, '
'providing an ideal surface for the cat to scratch and '
'stretch.n'
'n'
'The background is slightly blurred, but it seems to be '
'an indoor setting, perhaps a living room',
'type': 'text'}],
……
{'amazon-bedrock-invocationMetrics': {'firstByteLatency': 1752,
'inputTokenCount': 443,
'invocationLatency': 9279,
'outputTokenCount': 139},
'type': 'message_stop'}
从 invocationLatency 目标以及firstByteLatency 目标,能够清晰的看到 Haiku 模型比 Sonnet 模型呼应速度快得多,这一点和 Claude 3 模型系列的亚马逊官方网站介绍是共同的,即:
“该系列包括三种型号:Claude 3 Haiku,最快、最紧凑的型号,可实现近乎即时的呼应;Claude 3 Sonnet,技能和速度的理想平衡模型;Claude 3 Opus,最智能的产品,可在高度杂乱的使命上实现尖端功能。”
( 原文引用自:aws.amazon.com/blogs/aws/a… )
下一篇,咱们将持续剖析在 Amazon Bedrock 上运用 Claude 3 模型的更杂乱场景和实现,敬请期待。