跳至主要内容

Amazon Nova 模型:示例指南

了解全新的 Amazon Nova 模型(Micro、Lite、Pro、Premier、Canvas、Reel),如何通过 Bedrock Playground 和 API 访问它们,以及如何构建一个演示用的多智能体应用。
· 8分钟 阅读

使用 AI 探索

Amazon 发布了一套面向大规模、低成本使用的最新基础模型。Nova 现已加入 Amazon 的 LLM 生态,集成于 Amazon Bedrock 服务,并支持文本、图像、视频等多种模态的生成。

在本文中,我将概述全新的 Amazon Nova 模型,说明如何通过 Bedrock 服务访问它们,重点介绍各模型的能力与优势,并展示其实际用法,包括集成到多智能体应用中。

什么是 Amazon Nova 模型?

Amazon 的 Nova 模型是备受期待的基础模型,可通过 Amazon Bedrock 服务访问。它们面向多种应用场景而设计,包括低成本的快速推理、多媒体理解和创意内容生成。下面逐一了解各个模型。

Amazon Nova Micro

家族中速度最快、算力成本最低的模型。Micro 最适合需要快速纯文本生成的应用,推理速度可达每秒 200 个 token。

Micro 的典型应用包括实时分析、交互式聊天机器人以及高并发文本生成服务。

Amazon Nova Micro benchmarks

Nova Micro 基准测试。(来源: Amazon)

Amazon Nova Lite

Nova 家族中具成本效益的多模态成员,Lite 在速度与多任务高准确率之间取得了良好平衡,尤其在推理与翻译任务上,相较于其同类模型如GPT-4o 或 Llama 时表现突出。

它能高效处理大量请求,同时保持较强的准确性。当速度很关键且需要处理多模态的模型时,Lite 会是理想选择。

Amazon Nova Lite benchmarks

Nova Lite 基准测试。(来源: Amazon)

Amazon Nova Pro

Nova 家族中面向文本处理最先进的模型 Nova Pro,在保持相对较低算力成本的同时,提供了令人印象深刻的准确度,与具备相似能力的模型相比更具优势。

据 Amazon 介绍,Nova Pro 适用于视频摘要、问答、数学推理、软件开发,以及能够执行多步工作流的 AI 智能体等应用。与 Micro 和 Lite 一样,Nova Pro 目前支持微调。

Amazon Nova Pro benchmarks

Nova Pro 基准测试。(来源: Amazon)

Amazon Nova Premier

家族中能力最强的多模态模型,预计将于 2025 年初发布,被视为 Pro 模型的进一步升级。

Amazon Nova Canvas

Canvas 是 Nova 的图像生成解决方案。它可以生成高质量图像,并提供配色方案与风格控制,支持修复填充(inpainting)、外延扩图(outpainting)、扩展图像、风格迁移和背景移除等功能。该模型非常适合创建营销图片、产品模型图等。

Amazon Nova Reel

Nova Reel 是一款视频生成模型,旨在产出高质量且易于自定义的视频。Nova Reel 使用户能够在视频中创建并控制视觉风格、节奏和镜头运动。与其他 Nova 模型一样,Reel 内置安全控制,支持生成与规范一致的内容。

Amazon Nova Reel

如何通过 Amazon Bedrock Playground 访问 Amazon Nova 模型

您可以使用 Amazon Bedrock 的Playground,通过开箱即用的用户界面测试和对比多个模型。

我假设您已配置好 Amazon CLI 和 Bedrock 并可使用。若尚未完成,您可以参考我的教程AWS Multi-Agent Orchestrator,其中详细介绍了为使用 Bedrock 提供的模型而搭建环境的步骤。此外,Nils Durner 的博文也提供了分步截图,引导您完成 Bedrock 服务的设置。

Amazon Bedrock Playground

Amazon Bedrock Playground

在对比 Nova Micro 与 Pro 时,我注意到两者准确度差距并不明显。虽然 Micro 在文本生成上比 Pro 快两倍以上,但已能为大多数常规场景提供足够的回答;相较之下,Pro 倾向于产出更为细致、略长的响应。

如何通过 Amazon Bedrock API 访问 Amazon Nova 模型

若要通过 API 使用 Nova 模型并将其集成到您的代码中,请先确保已正确配置 AWS 账户、AWS CLI 以及对模型的访问权限(文档对此提供了指导)。

接着,安装 boto3 库,即 AWS 的 Python SDK,用于操作其模型。

pip install boto3

您可以使用如下脚本以编程方式与模型交互:

import boto3
import json 

client = boto3.client(service_name="bedrock-runtime")

messages = [
    {"role": "user", "content": [{"text": "Write a short poem"}]},
]

model_response = client.converse(
    modelId="us.amazon.nova-lite-v1:0", 
    messages=messages
)

print("\\n[Full Response]")
print(json.dumps(model_response, indent=2))

print("\\n[Response Content Text]")
print(model_response["output"]["message"]["content"][0]["text"])

使用 Nova Micro 和 AWS Multi-Agent Orchestrator 的演示项目

现在我们实现一个演示项目,测试 Nova Micro 的智能体能力。我们将使用 AWS Multi-Agent Orchestrator 框架,搭建一个由两个智能体组成的简化 Python 应用:Python 开发者智能体与机器学习专家智能体。若您想搭建该编排器,可以参考这份AWS Multi-Agent Orchestrator 指南。

我们还将使用 Chainlit 这一开源 Python 包,为应用实现一个简单的界面。首先安装所需库:

chainlit==1.2.0
multi_agent_orchestrator==0.0.18

我们先导入必要的库:

import uuid
import chainlit as cl
from multi_agent_orchestrator.orchestrator import MultiAgentOrchestrator, OrchestratorConfig
from multi_agent_orchestrator.classifiers import BedrockClassifier, BedrockClassifierOptions
from multi_agent_orchestrator.agents import AgentResponse
from multi_agent_orchestrator.agents import BedrockLLMAgent, BedrockLLMAgentOptions, AgentCallbacks
from multi_agent_orchestrator.orchestrator import MultiAgentOrchestrator
from multi_agent_orchestrator.types import ConversationMessage
import asyncio
import chainlit as cl

该框架使用分类器(Classifier)为传入的用户请求选择最佳智能体。我们将“anthropic.claude-3-haiku-20240307-v1:0”用作分类器的模型。

class ChainlitAgentCallbacks(AgentCallbacks):
    def on_llm_new_token(self, token: str) -> None:
        asyncio.run(cl.user_session.get("current_msg").stream_token(token))

# Initialize the orchestrator
custom_bedrock_classifier = BedrockClassifier(BedrockClassifierOptions(
    model_id='anthropic.claude-3-haiku-20240307-v1:0',
    inference_config={
        'maxTokens': 500,
        'temperature': 0.7,
        'topP': 0.9
    }
))

orchestrator = MultiAgentOrchestrator(options=OrchestratorConfig(
        LOG_AGENT_CHAT=True,
        LOG_CLASSIFIER_CHAT=True,
        LOG_CLASSIFIER_RAW_OUTPUT=True,
        LOG_CLASSIFIER_OUTPUT=True,
        LOG_EXECUTION_TIMES=True,
        MAX_RETRIES=3,
        USE_DEFAULT_AGENT_IF_NONE_IDENTIFIED=False,
        MAX_MESSAGE_PAIRS_PER_AGENT=10,
    ),
    classifier=custom_bedrock_classifier
)

接下来,我们定义两个由 Nova Micro 驱动的智能体,一个充当 Python 开发专家,另一个为机器学习领域专家。

def create_python_dev():
    return BedrockLLMAgent(BedrockLLMAgentOptions(
        name="Python Developer Agent",
        streaming=True,
        description="Experienced Python developer specialized in writing, debugging, and evaluating only Python code.",
        model_id="amazon.nova-micro-v1:0",
        callbacks=ChainlitAgentCallbacks()
    ))

def create_ml_expert():
    return BedrockLLMAgent(BedrockLLMAgentOptions(
        name="Machine Learning Expert",
        streaming=True,
        description="Expert in areas related to machine learning including deep learning, pytorch, tensorflow, scikit-learn, and large language models.",
        model_id="amazon.nova-micro-v1:0",
        callbacks=ChainlitAgentCallbacks()
    ))
    

# Add agents to the orchestrator
orchestrator.add_agent(create_python_dev())
orchestrator.add_agent(create_ml_expert())

最后,我们为 Chainlit 界面编写脚本主体,用于处理用户请求与智能体响应。

@cl.on_chat_start
async def start():
    cl.user_session.set("user_id", str(uuid.uuid4()))
    cl.user_session.set("session_id", str(uuid.uuid4()))
    cl.user_session.set("chat_history", [])

@cl.on_message
async def main(message: cl.Message):
    user_id = cl.user_session.get("user_id")
    session_id = cl.user_session.get("session_id")
    msg = cl.Message(content="")
    await msg.send()  # Send the message immediately to start streaming
    cl.user_session.set("current_msg", msg)
    response:AgentResponse = await orchestrator.route_request(message.content, user_id, session_id, {})
    # Handle non-streaming responses
    if isinstance(response, AgentResponse) and response.streaming is False:
        # Handle regular response
        if isinstance(response.output, str):
            await msg.stream_token(response.output)
        elif isinstance(response.output, ConversationMessage):
                await msg.stream_token(response.output.content[0].get('text'))
    await msg.update()

if __name__ == "__main__":
    cl.run()

最终即可得到 Chainlit 界面,使您能够以实践方式随时与 Nova 模型对话。

Running our app on Chainlit

在 Chainlit 上运行我们的应用

图像与视频生成模型也可通过 API 使用。您可参考文档中的脚本示例,了解如何调用它们。

结论

Amazon Nova 模型在基础模型生态上更进一步,集前沿的准确度、速度、成本效益与多模态能力于一体。随着 Amazon LLM 套件不断推出新产品,它正成为在 AWS 基础上构建高性价比、可扩展应用的有力之选。

无论您是在开发具备智能体能力的 AI 应用、为客户服务构建聊天机器人,还是作为开发者进行探索,尝试 Nova 模型都值得一试。同时,深入了解 AWS、Bedrock 与 Amazon 的 LLM 工具也大有裨益。

本文介绍了这些模型的关键要点、如何进行试验,以及如何使用 Nova 模型构建一个基础的智能体 AI 应用。

Hesam Sheikh Hassani

作者

Hesam Sheikh Hassani

人工智能硕士生与 AI 技术写作者。我分享最新的 AI 技术见解,让机器学习研究更易理解,并将复杂的 AI 主题加以简化,助您始终走在前沿。

主题