ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Amazon Bedrock Runtime 实战指南:使用 Boto3 调用 Nova、Claude、Titan 等多模型(基于 aws-doc-sdk-examples)

Amazon Bedrock Runtime 实战指南:使用 Boto3 调用 Nova、Claude、Titan 等多模型(基于 aws-doc-sdk-examples) 示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载Amazon Bedrock Runtime 是 AWS 提供的一项全托管服务让你可以通过统一的 API 调用来自第三方提供商和 Amazon 自家的基础模型Foundation Model。本文以aws-doc-sdk-examples仓库中 python/example_code/bedrock-runtime 目录下的完整示例为主线讲解如何使用 AWS SDK for PythonBoto3通过converse/converse_stream/invoke_model/start_async_invoke等接口完成文本对话、流式输出、文档理解、图像生成与文本转视频等任务并剖析工具调用Tool Use这一跨模型场景的完整实现。读完本文你将能够直接运行这些示例并掌握把任意支持的基础模型接入自己 Python 应用的落地方法。1. 概述Bedrock Runtime 与示例的适用范围Amazon Bedrock Runtime 是一个全托管推理服务无需自行部署模型即可访问来自 Anthropic、Cohere、DeepSeek、Meta、Mistral AI、Stability AI 以及 Amazon 自身的多款基础模型。本仓库中的示例覆盖了当前 Bedrock Runtime 最常用的几类推理能力对话式推理Converse API统一的消息结构适用于 Claude、Nova、Cohere、Llama、Mistral 等文本模型原生推理InvokeModel按各模型原生 JSON 结构构造请求适用于 Titan、Nova Canvas、Stable Image Core 等异步推理StartAsyncInvoke适用于 Nova Reel 文本转视频这类长耗时任务文档理解多模态直接把 PDF 等文档内容作为消息的一部分发送给模型。所有示例均位于 python/example_code/bedrock-runtime 目录采用 Boto3 的bedrock-runtime服务客户端代码中均带有snippet-start/snippet-end标记方便与 AWS 官方文档中的代码片段对应查阅。说明运行这些代码会在你的 AWS 账户中产生费用。使用前请了解 AWS 定价与免费套餐AWS 官方页面并遵循最低权限原则——只授予完成当前任务所需的最小权限。此外并非所有代码都在每个 AWS 区域测试过跨区域使用前请确认模型在该区域的可用性。2. 前置条件与环境准备2.1 Python 环境与依赖示例的依赖清单见 requirements.txt其中核心依赖为boto31.40.42/botocore1.40.42AWS SDK 核心库pytest9.0.3运行测试所需Pygments、colorama等部分示例与控制台输出美化相关。在虚拟环境中安装依赖python -m pip install -r requirements.txt关于 Python 环境的更多通用要求可参考 python/README.md 中的 Prerequisites 部分。2.2 模型访问权限关键前提⚠ 使用模型前必须先向 Amazon Bedrock 申请该模型的访问权限Model access。如果尚未开通就在 API 或控制台中使用模型会直接收到错误信息。模型访问的详细流程参见 Bedrock 用户指南中的 “Model access” 章节。不同的模型 ID 对应不同的模型族示例代码中的默认模型 ID 例如anthropic.claude-3-haiku-20240307-v1:0Claude 3 Haikuamazon.titan-text-premier-v1:0Titan Text Premieramazon.nova-canvas-v1:0Nova Canvasamazon.nova-reel-v1:0Nova Reelstability.stable-image-core-v1:1Stable Image Core2.3 AWS 凭证所有示例均通过 Boto3 默认的凭证链环境变量、AWS CLI 配置、IAM 角色等获取凭证并在创建客户端时指定区域例如boto3.client(bedrock-runtime, region_nameus-east-1)。请注意不同模型族示例中使用的区域可能不同如 Stable Image Core 示例使用us-west-2请以实际可用区域为准。3. 代码示例总览按模型族组织的目录结构README 将示例按“场景Scenarios”与“模型族”两个维度组织仓库目录结构与此一一对应场景跨模型cross-model-scenarios/tool_use_demo/tool_use_demo.py——Converse API 工具调用演示托管 Prompt 示例位于 bedrock-agent/prompts/scenario_get_started_with_prompts.py。Amazon Novamodels/amazon_nova文本模型的 converse.py、converse_stream.py、document_understanding.pyCanvas 图像生成的 invoke_model.pyReel 文本转视频的 text_to_video.py。Amazon Titan图像生成 invoke_model.py、文本 invoke_model.py、文本嵌入 invoke_model.py。Anthropic Claudemodels/anthropic_claudeconverse.py、converse_stream.py、document_understanding.py另有converse_async.py、converse_stream_pdf.py及聊天机器人场景。Cohere Commandconverse.py、converse_stream.py、document_understanding.py。DeepSeekdocument_understanding.py。Meta Llamaconverse.py、converse_stream.py、document_understanding.py。Mistral AIconverse.py、converse_stream.py、document_understanding.py。Stability AIStable Image Coreinvoke_model.py。README 中还保留了早期版本的运行说明python models/anthropic/claude_3.py演示 Claude 3python bedrock_runtime_wrapper.py演示 Claude 2、Titan、Stable Diffusion、Jurassic-2、Llama 2 与 Mistral AI 双模型。需要说明的是随着仓库演进当前目录已按“模型族/单文件”结构重新组织见上面的目录树claude_3.py与bedrock_runtime_wrapper.py已不再存在于该目录。建议以当前目录中的具体模型脚本为准例如# 位于 python/example_code/bedrock-runtime 目录下 python models/anthropic_claude/converse.py python models/amazon_titan_text/invoke_model.py python models/amazon_nova/amazon_nova_canvas/invoke_model.py4. 文本对话Converse 与 ConverseStream4.1 基础对话Conversemodels/anthropic_claude/converse.py 展示了最简的 Converse API 调用流程。核心步骤为import boto3 from botocore.exceptions import ClientError client boto3.client(bedrock-runtime, region_nameus-east-1) model_id anthropic.claude-3-haiku-20240307-v1:0 user_message Describe the purpose of a hello world program in one line. conversation [ { role: user, content: [{text: user_message}], } ] try: response client.converse( modelIdmodel_id, messagesconversation, inferenceConfig{maxTokens: 512, temperature: 0.5, topP: 0.9}, ) response_text response[output][message][content][0][text] print(response_text) except (ClientError, Exception) as e: print(fERROR: Cant invoke {model_id}. Reason: {e}) exit(1)要点解析消息结构messages是一个由{role: ..., content: [...]}组成的列表content中的每个元素可以是{text: ...}文本块也可以是文档块见第 5 节推理配置inferenceConfig中的maxTokens最大生成 token 数、temperature温度控制随机性、topP核采样是跨模型通用的基础参数响应提取模型输出位于response[output][message][content][0][text]与请求的消息结构对称异常处理通过ClientError捕获 AWS 服务端错误如模型未开通访问权限、模型 ID 不存在等统一打印错误原因后退出。4.2 流式输出ConverseStreammodels/anthropic_claude/converse_stream.py 与基础版结构完全一致仅将converse换成converse_stream并通过迭代响应流实现“边生成边显示”的效果streaming_response client.converse_stream( modelIdmodel_id, messagesconversation, inferenceConfig{maxTokens: 512, temperature: 0.5, topP: 0.9}, ) for chunk in streaming_response[stream]: if contentBlockDelta in chunk: text chunk[contentBlockDelta][delta][text] print(text, end)流式响应的每个chunk可能包含不同的事件类型示例只关心contentBlockDelta增量文本块从中取出delta[text]实时打印。流式输出在长回答场景下能显著改善用户体验。4.3 异步对话ConverseAsync在 models/anthropic_claude 目录下还提供了converse_async.py用于展示基于asyncio的异步调用方式适合在事件循环驱动的应用中如 FastAPI 服务集成。同一目录的converse_stream_pdf.py则演示了如何在流式对话中携带 PDF 文档。5. 文档理解把 PDF 直接发送给模型models/anthropic_claude/document_understanding.py 展示了多模态能力——将本地 PDF 作为document块加入用户消息with open(example-data/amazon-nova-service-cards.pdf, rb) as file: document_bytes file.read() conversation [ { role: user, content: [ {text: Briefly compare the models described in this document}, { document: { # Available formats: html, md, pdf, doc/docx, xls/xlsx, csv, and txt format: pdf, name: Amazon Nova Service Cards, source: {bytes: document_bytes}, } }, ], } ] response client.converse( modelIdmodel_id, messagesconversation, inferenceConfig{maxTokens: 500, temperature: 0.3}, )实现要点支持格式document块的format字段支持html、md、pdf、doc/docx、xls/xlsx、csv、txt文档来源既可以通过source: {bytes: ...}直接传入二进制字节也可以使用{s3Location: {...}}指向 S3 对象示例数据测试文档 example-data/amazon-nova-service-cards.pdf 位于bedrock-runtime目录下运行时需保证当前工作目录正确。该模式同样适用于 Nova、Cohere、DeepSeek、Llama、Mistral 等支持文档输入的模型各模型族均有同名document_understanding.py。6. 图像生成InvokeModel 原生推理图像生成类模型使用invoke_model接口请求体是各模型的原生 JSON 结构。尽管模型不同但整体流程一致构造请求 → 调用 → 解析 base64 图像 → 落盘保存。6.1 Amazon Nova Canvasmodels/amazon_nova/amazon_nova_canvas/invoke_model.pyseed random.randint(0, 858993460) # 随机种子范围 0 ~ 858,993,459 native_request { taskType: TEXT_IMAGE, textToImageParams: {text: prompt}, imageGenerationConfig: { seed: seed, quality: standard, # 可选 standard / premium 等 height: 512, width: 512, numberOfImages: 1, }, } request json.dumps(native_request) response client.invoke_model(modelIdamazon.nova-canvas-v1:0, bodyrequest) model_response json.loads(response[body].read()) base64_image_data model_response[images][0]6.2 Amazon Titan Image Generatormodels/amazon_titan_image_generator/invoke_model.py 结构与 Nova Canvas 几乎一致模型 ID 为amazon.titan-image-generator-v2:0但在imageGenerationConfig中额外提供cfgScale参数示例值为8.0用于控制对提示词的遵循程度native_request { taskType: TEXT_IMAGE, textToImageParams: {text: prompt}, imageGenerationConfig: { numberOfImages: 1, quality: standard, cfgScale: 8.0, height: 512, width: 512, seed: seed, # seed random.randint(0, 2147483647) }, }6.3 Stability AI Stable Image Coremodels/stability_ai/invoke_model.py 展示了与 Titan/Nova 不同的请求结构——Stability AI 使用扁平化的顶层字段而非taskType包装client boto3.client(bedrock-runtime, region_nameus-west-2) model_id stability.stable-image-core-v1:1 seed random.randint(0, 4294967295) native_request { prompt: prompt, aspect_ratio: 1:1, # 输出画幅比例 seed: seed, output_format: png, # 输出格式 }该示例使用的区域是us-west-2与前面文本类示例的us-east-1不同这正体现了“不同模型在不同区域可用性不同”的事实也呼应了 README 中“代码并非在每个区域都测试过”的提醒。三个图像生成示例的落盘逻辑相同先自动创建output/目录再按nova_canvas_{i}.png、titan_{i}.png、stability_{i}.png的命名递增避免覆盖最后通过base64.b64decode解码写入文件。7. 文本原生推理Amazon Titan Text除了 Converse API也可以通过原生结构调用文本模型。models/amazon_titan_text/invoke_model.py 使用 Titan Text Premieramazon.titan-text-premier-v1:0native_request { inputText: prompt, textGenerationConfig: { maxTokenCount: 512, temperature: 0.5, }, } request json.dumps(native_request) response client.invoke_model(modelIdmodel_id, bodyrequest) model_response json.loads(response[body].read()) response_text model_response[results][0][outputText]与 Converse API 不同Titan 文本模型的响应位于model_response[results][0][outputText]请求字段名为inputText/textGenerationConfig——这正是“原生推理接口的请求/响应结构与模型强相关”的典型示例。同一目录还提供了 amazon_titan_text_embeddings/invoke_model.py 用于文本向量化Embeddings。8. 文本转视频Nova Reel 异步任务视频生成耗时较长因此 Nova Reel 采用异步作业模式。models/amazon_nova/amazon_nova_reel/text_to_video.py 完整演示了“提交作业 → 轮询状态 → 获取结果”的全流程OUTPUT_S3_URI s3://REPLACE-WITH-YOUR-S3-BUCKET-NAME # 必须替换为你的桶 model_input { taskType: TEXT_VIDEO, textToVideoParams: {text: prompt}, videoGenerationConfig: { fps: 24, durationSeconds: 6, dimension: 1280x720, seed: seed, # seed random.randint(0, 2147483646) }, } output_config {s3OutputDataConfig: {s3Uri: output_s3_uri}} response bedrock_runtime.start_async_invoke( modelIdamazon.nova-reel-v1:0, modelInputmodel_input, outputDataConfigoutput_config ) invocation_arn response[invocationArn]轮询部分使用get_async_invoke(invocationArn...)查询状态并根据job[status]分支处理Completed从job[outputDataConfig][s3OutputDataConfig][s3Uri]读取输出地址视频文件为output.mp4Failed打印failureMessage其他状态视为进行中每 15 秒轮询一次。运行前必须把OUTPUT_S3_URI替换为真实的 S3 桶地址程序启动时会检查占位符REPLACE-WITH-YOUR-S3-BUCKET-NAME并拒绝执行。9. 场景一Converse API 工具调用Tool Use工具调用Tool Use是让模型按需调用外部 API 的能力。cross-model-scenarios/tool_use_demo/tool_use_demo.py 以“天气助手”为例模型通过调用外部天气工具Open-Meteo API根据用户输入返回实时天气。9.1 支持的模型示例用枚举定义了支持工具调用的模型列表class SupportedModels(Enum): CLAUDE_OPUS anthropic.claude-3-opus-20240229-v1:0 CLAUDE_SONNET anthropic.claude-3-sonnet-20240229-v1:0 CLAUDE_HAIKU anthropic.claude-3-haiku-20240307-v1:0 COHERE_COMMAND_R cohere.command-r-v1:0 COHERE_COMMAND_R_PLUS cohere.command-r-plus-v1:0 MODEL_ID SupportedModels.CLAUDE_HAIKU.value9.2 系统提示词与工具配置示例通过系统提示词SYSTEM_PROMPT约束模型行为必须使用Weather_Tool且自行推断经纬度、禁止编造数据、只回答天气相关问题等。工具配置通过工具规范注册self.tool_config {tools: [weather_tool.get_tool_spec()]}get_tool_spec()定义在 cross-model-scenarios/tool_use_demo/weather_tool.py 中它按 Bedrock 工具的 JSON Schema 格式描述工具的输入参数经纬度等。9.3 对话循环与递归调用主循环维护一个conversation列表将用户输入追加为{role: user, content: [{text: ...}]}后发送给 Bedrock随后递归处理模型响应直到模型返回最终答复或递归次数达到上限MAX_RECURSIONS 5 # 防止无限循环与性能问题 def run(self): conversation [] user_input self._get_user_input() while user_input is not None: message {role: user, content: [{text: user_input}]} conversation.append(message) bedrock_response self._send_conversation_to_bedrock(conversation) self._process_model_response(bedrock_response, conversation, max_recursionMAX_RECURSIONS)当模型的响应中包含toolUse块时程序会调用真实的天气工具、把工具结果以toolResult角色回填给模型再继续对话——这就是“模型 ↔ 工具 ↔ 应用”之间多轮协作的本质。辅助的输出格式化工具位于 tool_use_print_utils.py。该场景还有独立的 README 与pyproject.toml/requirements.txt可单独安装运行。10. 场景二创建并调用托管 Prompt托管 PromptManaged Prompt是 Bedrock 的提示词管理能力。该场景位于 bedrock-agent/prompts/scenario_get_started_with_prompts.py演示了四个步骤创建一个托管 Prompt为该 Prompt 创建一个版本使用该版本调用 Prompt即在 Bedrock Runtime 中执行可选地清理资源。从bedrock-runtime目录运行python ../bedrock-agent/prompts/scenario_get_started_with_prompts.py这是一个跨服务场景——托管 Prompt 的创建与管理属于 Bedrock Agent 侧能力而“按版本调用”最终落在 Bedrock Runtime 的执行能力上是把 Prompt 版本化管理与运行时推理打通的最佳实践示例。11. 运行测试运行测试同样可能产生 AWS 费用。测试统一使用仓库 Python 目录下的通用测试基础设施运行方式参见 python/README.md 中的 Tests 部分。本目录的测试位于 test 下conftest.py把test_tools目录加入 Python 路径并引入test_tools/fixtures/common.py中的通用 fixturesys.path.append(../..)指向仓库的python/example_code目录test_converse.py验证 Converse / ConverseStream 相关逻辑test_document_understanding.py验证文档理解调用test_nova_reel.py验证 Nova Reel 异步视频作业相关逻辑。12. 学习路径建议从文本对话入手先运行models/anthropic_claude/converse.py理解消息结构与响应提取升级到流式与多模态尝试converse_stream.py与document_understanding.py掌握实时输出和文档输入扩展模型覆盖面对照第 3 节的目录清单逐一替换模型 ID 运行同一模式的脚本体会 Converse 的统一性与 InvokeModel 的原生差异进入实战场景运行 Tool Use 天气助手与托管 Prompt 场景理解 Agent 化应用的骨架最后做工程化参考test/下的测试与通用 fixture为自己的 Bedrock 集成编写可回归的测试。掌握以上内容后你就能基于 python/example_code/bedrock-runtime 目录中的每一份示例快速构建自己的 Amazon Bedrock 应用——无论是聊天机器人、文档分析、图像生成还是视频合成与工具调用型 Agent。赞分享示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载相关推荐使用 AWS SDK for PHP 调用 Amazon Bedrock Agent Runtime在 aws-doc-sdk-examples 中实现代理对话的完整实战指南使用 AWS SDK for PHP 调用 Amazon Bedrock Agent Runtime在 aws doc sdk examples 中实现代理对示例工程教程后端使用 AWS SDK for Java 2.x 调用 Amazon Textract 的实战指南基于 aws-doc-sdk-examples 官方示例使用 AWS SDK for Java 2.x 调用 Amazon Textract 的实战指南基于 aws doc sdk examples 官方示例 本示例工程教程后端使用 AWS SDK for .NET 调用 Amazon Rekognition图片与人脸分析完整实战指南基于 aws-doc-sdk-examples使用 AWS SDK for .NET 调用 Amazon Rekognition图片与人脸分析完整实战指南基于 aws doc sdk examples示例工程教程后端上一篇Dism系统维护急救手册三步自救让卡顿电脑不重装也能满血复活下一篇PyInstaller提取器完整指南一条命令还原打包程序里的全部Python源码创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进