使用亚马逊最新自研大模型Nova开发AI应用+代码(下篇)
在本系列的上篇中我们介绍了亚马逊自研模型AmazonNova系列大模型的基本能力和满足各种多样化需求(理解、内容生成)的6个模型。在本系列的下篇中,小李哥将大家探索用AmazonNova系列模型开发真实场景化AI应用及API代码为了展示文档分析的能力,我从亚马逊云科技官方文档下载了的PDF文件。
在本系列的上篇中我们介绍了亚马逊自研模型Amazon Nova系列大模型的基本能力和满足各种多样化需求(理解、内容生成)的6个模型。在本系列的下篇中,小李哥将大家探索用Amazon Nova系列模型开发真实场景化AI应用及API调用的代码样例。
接下来小李哥将会带大家一起体验利用Nova进行文字分析、视频理解、视频生成、图片生成等4个场景。
使用Amazon Nova Pro进行文档分析
在展示文档分析的能力的场景中,我会使用亚马逊云科技官方文档PDF 文件 - “如何基于使用场景选择亚马逊云科技对应的AI产品”,文档中介绍了亚马逊云科技目前的主流AI服务,并介绍了对应的应用场景,帮助开发者选择适用于自己使用场景的服务。
系统提示词
首先我们在Amazon Bedrock服务的控制台的导航窗格中选择Model access并开启Amazon Nova 模型访问。然后我们在导航窗格的Playground中选择Chat/text(聊天/文本)窗口,并选择 Amazon Nova Pro模型。在聊天界面中我们上传刚才下载的文档,并提出以下请求:
Write a summary of this doc in 100 words. Then, build a decision tree.
“用 100 个单词总结这份文档,然后构建一棵决策树。”
模型输出
从下图的模型回复截图中可以看出,模型的输出严格按照我的提示词定义生成,输出中提供了结构化的决策树,让我在阅读文档之前就对其内容有了一个系统、全面的了解。
使用 Amazon Nova Pro 进行视频分析
为了展示Nova模型分析视频的能力,我们首先准备如下的实例视频,视频由两个短片拼接而成,是在海岸的一片悬崖上远眺大海。
接下来我使用亚马逊云科技提供的 Python SDK(Boto3),通过Amazon Bedrock的Converse API 调用Amazon Nova Pro模型,对视频进行分析。
API代码示例
我们使用如下的Python实例代码,通过API调用的方式,使用Amazon Nova Pro分析上传的视频,并生成对视频的描述,视频位置存储在Amazon S3存储桶中。
import boto3
AWS_REGION = "us-east-1"
MODEL_ID = "amazon.nova-pro-v1:0"
VIDEO_FILE = "the-sea.mp4"
bedrock_runtime = boto3.client("bedrock-runtime", region_name=AWS_REGION)
with open(VIDEO_FILE, "rb") as f:
video = f.read()
user_message = "Describe this video."
messages = [ { "role": "user", "content": [
{"video": {"format": "mp4", "source": {"bytes": video}}},
{"text": user_message}
] } ]
response = bedrock_runtime.converse(
modelId=MODEL_ID,
messages=messages,
inferenceConfig={"temperature": 0.0}
)
response_text = response["output"]["message"]["content"][0]["text"]
print(response_text)
模型输出
通过命令行运行上述脚本后,得到如下结果:
The video begins with a view of a rocky shore on the ocean, and then transitions to a close-up of a large seashell resting on a sandy beach.
视频以一个岩石海岸的景象开头,接着转场到一只安置在沙滩上的大贝壳的特写画面。
我们除了简单的分析视频,还可以添加更详细的提示词,从视频中提取特定的信息,例如检测物体或识别文本。需要注意Amazon Nova当前是无法处理视频中的音频信息的。
使用Amazon Nova Reel进行视频生成
接下来小李哥将通过Amazon Nova Reel生辰一段视频,首先我们从提示词开始生成。
由于生成视频需要几分钟时间,时间稍长,Amazon Bedrock API引入了以下三种新操作:
1. StartAsyncInvoke:启动异步调用。
2. GetAsyncInvoke:获取特定异步调用的当前状态。
3. ListAsyncInvokes:列出所有异步调用的状态,可选筛选条件包括状态或日期。
系统提示词
Amazon Nova Reel模型一个比较有意思的功能就是支持摄像机控制操作,例如缩放或移动镜头。下方就是我会使用的提示词,我接下来会根据这段文本提示生成一段视频:
Closeup of a large seashell in the sand. Gentle waves flow all around the shell. Sunset light. Camera zoom in very close.
“沙滩上的一个大贝壳特写。温柔的海浪围绕着贝壳流动。夕阳的光线洒满画面。镜头缓慢拉近,非常接近贝壳。”
我在脚本中定义了一段视频生成状态检测代码段,在运行后脚本会定期检查视频生成的状态,直到视频创建完成。我还为脚本添加了一个random seed,以确保每次运行代码时都会生成不同的结果。
import random
import time
import boto3
AWS_REGION = "us-east-1"
MODEL_ID = "amazon.nova-reel-v1:0"
SLEEP_TIME = 30
S3_DESTINATION_BUCKET = "<BUCKET>"
video_prompt = "Closeup of a large seashell in the sand. Gentle waves flow all around the shell. Sunset light. Camera zoom in very close."
bedrock_runtime = boto3.client("bedrock-runtime", region_name=AWS_REGION)
model_input = {
"taskType": "TEXT_VIDEO",
"textToVideoParams": {"text": video_prompt},
"videoGenerationConfig": {
"durationSeconds": 6,
"fps": 24,
"dimension": "1280x720",
"seed": random.randint(0, 2147483648)
}
}
invocation = bedrock_runtime.start_async_invoke(
modelId=MODEL_ID,
modelInput=model_input,
outputDataConfig={"s3OutputDataConfig": {"s3Uri": f"s3://{S3_DESTINATION_BUCKET}"}}
)
invocation_arn = invocation["invocationArn"]
s3_prefix = invocation_arn.split('/')[-1]
s3_location = f"s3://{S3_DESTINATION_BUCKET}/{s3_prefix}"
print(f"\nS3 URI: {s3_location}")
while True:
response = bedrock_runtime.get_async_invoke(
invocationArn=invocation_arn
)
status = response["status"]
print(f"Status: {status}")
if status != "InProgress":
break
time.sleep(SLEEP_TIME)
if status == "Completed":
print(f"\nVideo is ready at {s3_location}/output.mp4")
else:
print(f"\nVideo generation status: {status}")
运行后脚本会自动输出目前运行的状态:
Status: InProgress
. . .
Status: Completed
Video is ready at s3://BUCKET/PREFIX/output.mp4
运行脚本几分钟后生得到“Completed”的字段则表示生成结束。脚本输出的视频的保存在Amazon S3中。随后我们使用亚马逊云科技命令行工具AWS CLI运行如下命令,下载生成的视频到本地。
aws s3 cp s3://BUCKET/PREFIX/output.mp4 ./output-from-text.mp4
模型输出:
打开视频后,可以看到生成的视频完全符合我们提示词中的定义:镜头逐渐拉近贝壳主体,并展现了温柔的海浪和夕阳的光影效果。
使用Amazon Nova Reel基于参考图片生成视频
为了使视频的生成的内容更精准、符合预期,我们可以为Amazon Nova Reel提供一张参考图像,在我们的例子中,我们使用下图作为参考图像:
系统提示词
我们这个场景下使用参考图片和提示词结合的形式生成视频,我们使用如下的提示词作为样例,在提示词中我们定义了摄像机移动的动作
drone view flying over a coastal landscape)
“无人机视角飞越沿海景观”
接下来我们通过以下Python脚本,将参考图像与文本提示结合起来,生成一段视频:
import base64
import random
import time
import boto3
S3_DESTINATION_BUCKET = "<BUCKET>"
AWS_REGION = "us-east-1"
MODEL_ID = "amazon.nova-reel-v1:0"
SLEEP_TIME = 30
input_image_path = "seascape.png"
video_prompt = "drone view flying over a coastal landscape"
bedrock_runtime = boto3.client("bedrock-runtime", region_name=AWS_REGION)
# Load the input image as a Base64 string.
with open(input_image_path, "rb") as f:
input_image_bytes = f.read()
input_image_base64 = base64.b64encode(input_image_bytes).decode("utf-8")
model_input = {
"taskType": "TEXT_VIDEO",
"textToVideoParams": {
"text": video_prompt,
"images": [{ "format": "png", "source": { "bytes": input_image_base64 } }]
},
"videoGenerationConfig": {
"durationSeconds": 6,
"fps": 24,
"dimension": "1280x720",
"seed": random.randint(0, 2147483648)
}
}
invocation = bedrock_runtime.start_async_invoke(
modelId=MODEL_ID,
modelInput=model_input,
outputDataConfig={"s3OutputDataConfig": {"s3Uri": f"s3://{S3_DESTINATION_BUCKET}"}}
)
invocation_arn = invocation["invocationArn"]
s3_prefix = invocation_arn.split('/')[-1]
s3_location = f"s3://{S3_DESTINATION_BUCKET}/{s3_prefix}"
print(f"\nS3 URI: {s3_location}")
while True:
response = bedrock_runtime.get_async_invoke(
invocationArn=invocation_arn
)
status = response["status"]
print(f"Status: {status}")
if status != "InProgress":
break
time.sleep(SLEEP_TIME)
if status == "Completed":
print(f"\nVideo is ready at {s3_location}/output.mp4")
else:
print(f"\nVideo generation status: {status}")
在生成完成后,我门使用亚马逊云科技命令行工具AWS CLI,运行以下命令下载生成的视频到本地:
aws s3 cp s3://BUCKET/PREFIX/output.mp4 ./output-from-image.mp4
模型输出:
打开视频后发现,最终生成的视频完全符合我们提示词中的定义。镜头从参考图像的场景开始,随后向前移动,呈现了动态的沿海风景。
负责任地构建 AI
在安全与合规方面,Amazon Nova模型也做了很多配套的安全措施。亚马逊开发团队在模型开发过程中始终以AI的安全性、可靠性和可信赖为核心,为开发者提供了非常安全的使用体验和诸多安全控制选项,以支持开发者的各种使用场景。
目前Nova系列模型已全面内置了各项安全功能和内容审核功能,让开发者能够负责任地使用 AI。生成的每张图片和视频均包含数字水印,以帮助用户识别内容来源。此外Amazon Nova基础模型也扩展了安全策略来有效控制以下常见的AI生成内容的风险:
• 虚假信息传播:减少被AI生成内容误导的可能性。
• 儿童性虐待材料(CSAM):主动防止违法或不当内容的生成。
• 化学、生物、放射或核(CBRN)威胁:有效规避生成有潜在危险性的内容。
通过这些措施,Amazon Nova让开发者能够在享受强大功能的同时,确保 AI 的安全和负责任的使用。
更多推荐
所有评论(0)