ARTICLE · INTELLIGENCE

战地情报 · 详情页

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

Strands Agents Python SDK v0.1.6 深度解析:Bedrock 非流式模式、工具名校验与可观测性修复

Strands Agents Python SDK v0.1.6 深度解析:Bedrock 非流式模式、工具名校验与可观测性修复 人工智能大模型AI AgentAgent 框架多智能体工具调用MCP 服务【免费下载链接】harness-sdkBuild an agent harness and control it end-to-end. Open-source SDK for production AI agents in Python TypeScript - any model, any cloud.项目地址https://gitcode.com/GitHub_Trending/sdkpython13/harness-sdk点击查看免费下载Strands Agents Python SDK 在 2025 年 5 月 30 日发布了 v0.1.6 版本这是一次以稳定与兼容为导向的迭代它为 Amazon Bedrock 模型补上了非流式调用能力放宽了工具名校验规则以支持连字符并围绕 Anthropic 文档内容、OpenTelemetry 环境变量优先级、回调处理与发布流水线做了一系列工程化打磨。读完本文你将掌握这些变更的底层实现原理、对应源码位置与可落地的配置方法并能据此评估升级到该版本后的行为变化。版本概览v0.1.6 发布了什么根据仓库中的发布记录 python-v0.1.6.md本次版本共包含 9 项变更类型分布如下1 项新功能feat为BedrockModel增加非流式non-streaming支持2 项缺陷修复fix工具名校验允许连字符、修正 OTEL 配置的环境变量优先级2 项工程维护chore为用户代理user agent变更补充单元测试、自动化发布到 PyPI4 项其他改进other修复PrintingCallbackHandler.__call__的 docstring、提升 Message Processor 覆盖率79% → 94%、模型内容块支持文档documents、Anthropic 文档纯文本格式支持。所有变更均为非破坏性breaking: false即升级到 v0.1.6 不会破坏既有 API 调用方式。版本中还迎来了一位新贡献者 xiehustPR #55。BedrockModel 非流式支持一条参数切换两种调用路径本次版本最核心的功能变更是 PR #75 Add non-streaming support to BedrockModel。在此之前Bedrock 模型默认走流式streaming通道现在你可以通过streaming参数在流式与一次性返回之间自由切换。streaming 参数与默认值BedrockModel的配置类在 models/bedrock.py 中声明了streaming: bool | None字段其语义为开启/关闭流式输出默认开启。在实际请求时代码会读取配置中的streaming值streaming self.config.get(streaming, True) converse_method self.client.converse_stream if streaming else self.client.converse这一行是非流式支持的实现核心流式模式调用 Bedrock 的converse_streamAPI非流式模式则退化为converseAPI对上层 Agent 循环完全透明。示例用法from strands import Agent from strands.models import BedrockModel # 流式模式默认 streaming_model BedrockModel( model_idus.amazon.nova-pro-v1:0, temperature0.3, streamingTrue, ) # 非流式模式一次性拿到完整响应 non_streaming_model BedrockModel( model_idus.amazon.nova-pro-v1:0, streamingFalse, ) agent Agent(modelnon_streaming_model) agent(Tell me about Agentic AI)非流式响应如何伪装成流式事件为了让下游 Agent 循环无需感知调用模式差异_stream在拿到converse的完整响应后会调用convert_non_streaming_to_streaming见 models/bedrock.py把一次性响应转换为标准的流式事件序列先产出messageStart事件携带响应角色按顺序遍历响应中的每个 content blocktoolUse块先产出contentBlockStart再把序列化后的工具输入作为contentBlockDelta增量输出text块以contentBlockDelta输出文本reasoningContent块拆分产出 reasoningText 及其签名、redactedContent 增量citationsContent块将文本内容拼接后以 delta 输出并逐个输出 citation 元数据仅保留 title、location、sourceContent 等实际存在的字段兼容 Nova grounding 缺失 title/sourceContent 的情况每个块结束产出contentBlockStop最终产出messageStop携带 stopReason 与 additionalModelResponseFields与metadata合并 usage、metrics、trace。这意味着流式与非流式在 Agent 层的可观测事件完全一致任何基于事件流工作的回调处理器如PrintingCallbackHandler都能无差别工作。非流式模式的取消语义差异需要特别留意的是取消行为的差异源码在stream方法的 docstring 中明确指出非流式请求streamingFalse不可中止见 models/bedrock.py。流式请求可以通过cancel_signalthreading.Event在下一个 chunk 边界关闭 HTTP 响应而非流式请求一旦发出只能等待完整返回。如果你的应用依赖请求级取消例如超时熔断、用户中断在非流式模式下需要自行设计超时与结果丢弃策略。工具名校验放宽连字符正式入列PR #55 Added hyphen to allowed characters in tool name validation 修复了一个实际痛点此前工具名只允许字母、数字与下划线导致大量使用连字符命名的第三方工具尤其是 MCP 服务器暴露的工具如web-search、file-read这类 kebab-case 名称在校验时被拒绝。校验规则的源码实现校验逻辑位于 tools/tools.py 的validate_tool_use_nametool_name_pattern r^[a-zA-Z0-9_\-]{1,}$ tool_name_max_length 64即工具名必须满足规则取值允许字符大小写字母a-zA-Z、数字0-9、下划线_、连字符-最小长度至少 1 个字符最大长度64 个字符违反字符集会抛出InvalidToolUseNameException日志消息为tool_name... | invalid tool name pattern超长则抛出invalid tool name length。异常类InvalidToolUseNameException在同一文件中定义tools/tools.py。测试用例佐证对应的单元测试位于 tests/strands/tools/test_tools.py明确覆盖了新增行为{name: valid-name}含连字符不再抛异常{name: 34234_numbers}数字开头合法{name: 123_invalid}含加号抛invalid tool name pattern65 个字符的工具名抛invalid tool name length缺失name字段抛tool name missing。值得注意的是SDK 内部还提供了一套下划线 ↔ 连字符的匹配机制在 tools/_caller.py 中调用器会用下划线分隔的名称去匹配连字符形式的工具名如some_thing可匹配some-thing这与本次校验放宽形成互补进一步降低了工具接入的命名摩擦。Anthropic 模型文档document内容块支持v0.1.6 中的两项 models - content - documentsPR #138与 models - anthropic - document - plain textPR #141为 Anthropic 模型补齐了文档内容块document content block的格式化能力。支持的文档格式Anthropic 的文档 source 仅接受两类输入实现见 models/anthropic.pyPDFbase64将字节内容经base64.b64encode编码后按application/pdf类型传递纯文本文件csv、html、md、txt四种格式常量_TEXT_FILE_FORMATS内容按 UTF-8 解码后以文本形式交付。_format_request_message_content见 models/anthropic.py会根据content[document][format]分派处理遇到非 UTF-8 文本或未知格式会抛出带明确提示的TypeError避免把非法请求发给模型。与缓存机制的联动文档块还进入了 Anthropic prompt caching 的缓存白名单_CACHEABLE_BLOCK_TYPES仅包含document、image、text、tool_result、tool_use五种块类型见 models/anthropic.py这意味着将文档作为消息内容传入时可以配合cache_config走 ephemeral 缓存通道在文档反复参与对话的场景下显著降低 token 开销。可观测性修复OTEL 环境变量优先级PR #86 correct environment variable precedence for OTEL configscope: telemetry, areas: otel修正了 OpenTelemetry 配置的环境变量优先级问题属于对 telemetry/config.py 的回归修复。StrandsTelemetry 的配置模型StrandsTelemetry类负责集中初始化 trace/meter 基础设施其环境变量约定见 telemetry/config.py环境变量作用OTEL_EXPORTER_OTLP_ENDPOINTOTLP 导出端点 URLOTEL_EXPORTER_OTLP_HEADERSOTLP 请求头用于认证等OTEL_SERVICE_NAME覆盖资源中的服务名资源构建函数get_otel_resourcetelemetry/config.py会读取OTEL_SERVICE_NAME默认strands-agents并与包版本、telemetry.sdk.name/telemetry.sdk.language一起组成Resource供 TracerProvider 与 MeterProvider 共用。链式配置用法from strands.telemetry import StrandsTelemetry # 一次性配置 console OTLP 两种导出 StrandsTelemetry().setup_console_exporter().setup_otlp_exporter() # 或分步配置并开启指标导出 telemetry StrandsTelemetry() telemetry.setup_console_exporter() telemetry.setup_otlp_exporter() telemetry.setup_meter(enable_console_exporterTrue, enable_otlp_exporterTrue)实现细节上console 导出走SimpleSpanProcessorOTLP 导出走BatchSpanProcessor所有 setup 方法返回self支持链式调用且配置失败只记日志、不抛异常见 telemetry/config.py。本次修复的优先级问题集中在用户显式传入的 kwargs 与标准环境变量之间的覆盖关系上升级后建议在 CI 中固定OTEL_SERVICE_NAME、OTEL_EXPORTER_OTLP_ENDPOINT等变量以验证行为符合预期。工程质量与工程化回调、覆盖率与发布流水线版本中还包含若干不改变 API 行为的质量改进PrintingCallbackHandler.__call__docstring 修复PR #126该处理器负责把推理文本、文本增量与工具调用流式打印到 stdout其__call__的 docstring 补充了reasoningText、data、complete、event等回调事件字段的完整说明见 handlers/callback_handler.py。它支持verbose_tool_use开关开启时每次工具调用会打印Tool #N: tool_name并维护tool_count计数。Message Processor 覆盖率提升PR #115单元测试覆盖率从 79% 提升到 94%围绕用户代理user agent变更补充的测试PR #125也随本版本合入。用户代理相关的生产逻辑在 models/bedrock.pySDK 在创建 bedrock-runtime 客户端时会向user_agent_extra追加strands-agents标识若已有值则拼接保留便于 AWS 侧识别流量来源sagemaker.py中也有对称实现。PyPI 发布自动化PR #145将发布流程接入 CI 流水线pip install strands-agents即可获得 v0.1.6 及后续版本不再依赖手工打包上传。升级建议与验证清单v0.1.6 全部变更为非破坏性升级路径平滑安装/升级pip install -U strands-agentsPython 3.10详见 strands-py/README.md 的安装说明重点回归项使用 Bedrock 模型的流式/非流式切换streamingFalse后确认事件流输出正常、含连字符工具名的 MCP 工具调用、Anthropic 文档PDF/文本消息、OTEL 导出配置新贡献者致谢本版本的连字符校验修复来自首次贡献者 xiehust这也印证了该 SDK 对社区 PR 的开放态度。总体而言v0.1.6 是一次兼容性扩围的版本它让 Bedrock 用户多了一种低延迟的非流式选择让 kebab-case 命名的工具不再被误伤也让文档类多模态输入与可观测性配置更加可靠——这些能力都可在 strands-py/src/strands 对应模块的源码与 strands-py/tests 的测试用例中找到直接佐证便于你在升级后逐项核对行为。赞分享人工智能大模型AI AgentAgent 框架多智能体工具调用MCP 服务【免费下载链接】harness-sdkBuild an agent harness and control it end-to-end. Open-source SDK for production AI agents in Python TypeScript - any model, any cloud.项目地址https://gitcode.com/GitHub_Trending/sdkpython13/harness-sdk点击查看免费下载相关推荐Strands Agents SDK中Amazon Bedrock模型访问问题解析Strands Agents SDK中Amazon Bedrock模型访问问题解析 问题背景 在使用Strands Agents SDK时开发者可能会遇到Am人工智能大模型AI AgentAgent 框架多智能体工具调用MCP 服务strands-agents Python SDK v0.1.1 版本解读Bedrock 请求标识、LlamaAPI 文档与发布流程strands agents Python SDK v0.1.1 版本解读Bedrock 请求标识、LlamaAPI 文档与发布流程 本文基于仓库内 chan人工智能大模型AI AgentAgent 框架多智能体工具调用MCP 服务Strands SDK Python项目中Bedrock API限流异常分析与解决方案Strands SDK Python项目中Bedrock API限流异常分析与解决方案 背景概述 在Strands SDK Python项目的最新版本 0.1.人工智能大模型AI AgentAgent 框架多智能体工具调用MCP 服务创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

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