资讯详情

资讯详情

harness-sdk Python SDK v1.39.0 版本解读:Bedrock 原生 Token 计数、上下文窗口表与 A2A 任务生命周期

人工智能大模型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点击查看免费下载本篇基于仓库内 Python SDK 的 v1.39.0 版本变更记录site/src/content/changelog/sdk/python-v1.39.0.md成文聚焦本次发布在模型层Bedrock / OpenAI 兼容端点、上下文管理与多智能体 A2A 协议上的关键升级。读完本文你将掌握use_native_token_count开关、Bedrock 计费 Token 估算的降级与缓存策略、内置上下文窗口查找表的作用机制、MCP 客户端初始化错误的根因排查以及 A2A 全任务生命周期状态failed、canceled、input_required 等在 SDK 中的落地方式并能直接定位到 strands-py 中对应的源码与测试用例做进一步验证。版本概览一次全部非破坏性的功能增强v1.39.0 发布于 2026-05-08版本标签为python/v1.39.0属于sdkPython SDK通道的常规迭代。本次共包含 9 条变更全部为 non-breaking非破坏性不存在 API 兼容性破坏可直接升级使用类型变更内容涉及领域feat支持 OpenAI 提供方使用 AWS Profilemodelfix在 MCPClientInitializationError 消息中包含根因通用feat新增上下文窗口上限查找表contextfix修复 Bedrock 模型的 Token 计数modelfix缓存不支持 Token 计数的 Bedrock 模型通用feat新增 useNativeTokenCount 开关以跳过 Token 计数 API 调用通用fix修正 MCPClient.exit与 stop() 的类型注解通用feat实现完整的 A2A 任务生命周期状态支持a2afix集成测试更新通用其中「Bedrock Token 计数」相关的三条变更PR 2254 / 2250 / 2255构成一个完整的闭环先修复计数逻辑本身再为不支持计数的模型做缓存降级最后提供显式开关让用户跳过 API 调用。这也是本版本在模型层最值得关注的组合拳。OpenAI 提供方支持 AWS Profile通过 boto_session 接入 Bedrock本次发布的第一个 featPR 2230是让 OpenAI 兼容提供方能够使用 AWS Profile。其实现载体是openai_responses.py中的bedrock_mantle_config参数以及内部模块 _openai_bedrock.py 中的BedrockMantleConfig配置结构。BedrockMantleConfig的关键字段如下摘自 strands-py/src/strands/models/_openai_bedrock.pyendpoint选择端点家族bedrock-mantle默认或bedrock-runtime仅bedrock-runtime接受跨区域推理配置 ID如us.openai.*、global.openai.*region托管 Bedrock 端点的 AWS 区域缺省时按 boto3 标准链解析AWS_REGION/AWS_DEFAULT_REGION/ 活动 Profile / EC2 元数据全部失败则抛出ValueErrorboto_session本次「支持 AWS Profile」的关键入口。可传入一个用指定 Profile 创建的boto3.Session如boto3.Session(profile_namemy-profile)用于在未显式设置region时解析区域从而无需导出环境变量即可切换到非默认 Profilecredentials_provider可选 botocoreCredentialProvider转发给令牌生成器expiry可选timedelta控制 Bearer Token 的生存期。从源码实现看strands-py/src/strands/models/_openai_bedrock.py区域解析优先级为显式regionboto_session.region_nameboto3.Session()默认链而resolve_bedrock_client_args同文件 L141-L191会调用aws_bedrock_token_generator.provide_token按需铸造 Bearer Token并将解析结果写入 OpenAI 客户端的base_url与api_key。这样长期运行的 Agent 也能在 Bearer Token 超过最大生命周期后自动续期。import boto3 from strands.models.openai_responses import OpenAIResponsesModel model OpenAIResponsesModel( model_idopenai.gpt-5, bedrock_mantle_config{ # 显式指定 AWS Profile无需导出环境变量 boto_session: boto3.Session(profile_namemy-aws-profile), endpoint: bedrock-mantle, # 或 bedrock-runtime }, )需要注意的是使用bedrock_mantle_config需要额外安装aws-bedrock-token-generator包源码中明确提示通过pip install strands-agents[openai]安装同时client_args中不能再同时传入base_url或api_key否则会在__init__阶段触发 fail-fast 的冲突校验见 openai_responses.py。Bedrock Token 计数三件套修复、缓存与开关v1.39.0 对 Bedrock 的 Token 计数做了系统性收尾集中在 strands-py/src/strands/models/bedrock.py1. 修复 count tokensPR 2254修复了 Bedrock 模型 Token 计数结果不准确的问题。修复后的原生计数路径bedrock.py复用与 Converse API 完全相同的消息格式将messages、system、toolConfig组装进input{converse: ...}调用client.count_tokens获取inputTokens作为输入 Token 数若返回值为空则抛出ProviderTokenCountError。2. 缓存不支持的模型PR 2250并非所有 Bedrock 模型都支持 CountTokens API。当遇到两类典型错误时SDK 会把该model_id记入模块级缓存_SKIP_COUNT_TOKENS_MODELS后续调用直接跳过 API并回退到本地启发式估算AccessDeniedException缺少bedrock:CountTokens权限ValidationException且错误信息包含doesnt support counting tokens。其他瞬时错误如网络抖动则不会写入缓存只做单次降级。相关行为在 tests/strands/models/test_bedrock.py 中有覆盖测试验证了「第一次调用失败后第二次调用因缓存而完全跳过 API」的语义如 L4909 附近的注释。3. useNativeTokenCount 开关PR 2255use_native_token_count是本次新增的模型配置项bedrock.pyTruecount_tokens()调用 Bedrock 原生 CountTokens API 获取精确计数False默认跳过 API 调用使用本地估算器。源码逻辑非常直白bedrock.py配置不为True时直接走父类本地估算为True但模型在_SKIP_COUNT_TOKENS_MODELS缓存中时同样回退。换言之默认行为以低延迟、零额外 API 成本为优先需要精确计数例如对成本敏感的生产环境时再显式开启。model BedrockModel( model_idanthropic.claude-sonnet-4-6, use_native_token_countTrue, # 开启后 count_tokens 走 Bedrock CountTokens API )上下文窗口上限查找表让 context 管理有据可依PR 2249 新增的上下文窗口查找表位于 strands-py/src/strands/models/_defaults.py是本次发布在 context 领域的关键支撑。表结构与默认值_CONTEXT_WINDOW_LIMITS是一张以模型 ID 为键、以 Token 数为值的内置表覆盖 Anthropic直接 API 与 Bedrock 前缀两种形式、Amazon Nova、Z.AI、OpenAI、Google Gemini、Mistral 等主要模型线。例如claude-sonnet-4-6/claude-opus-4-6等1,000,000 tokensclaude-3-7-sonnet-20250219等200,000 tokensamazon.nova-pro-v1:0300,000amazon.nova-micro-v1:0128,000gpt-4o128,000gpt-4.11,047,576gemini-2.5-flash/gemini-2.5-pro1,048,576mistral-large-latest262,144。当查表失败未知模型时get_context_window_limit返回None调用方优雅降级例如禁用主动压缩同时存在兜底默认值DEFAULT_CONTEXT_WINDOW_LIMIT 200_000strands-py/src/strands/models/_defaults.py。跨区域前缀剥离Bedrock 模型 ID 常带有区域/推理配置前缀如us.anthropic.claude-sonnet-4-6、global.openai.gpt-5.6-luna、eu.、ap.甚至 ARN。get_context_window_limit的查找策略是先做精确匹配失败后逐点剥离前缀重试strands-py/src/strands/models/_defaults.py因此表中只需维护基础模型 ID。这一点在 tests/strands/models/test_defaults.py 中被明确断言us./global./eu./ap./custom.前缀的模型 ID 都能正确解析到 1,000,000。与用户配置的合并resolve_config_metadata同文件 L178-L199负责将查表结果写入模型配置用户显式设置了context_window_limit时原样保留未设置时才从表自动补全且仅在确实补上了字段时才返回新 dict避免无谓的内存分配。from strands.models._defaults import get_context_window_limit, resolve_config_metadata # 直接查表含前缀剥离 assert get_context_window_limit(us.anthropic.claude-sonnet-4-6) 1_000_000 # 合并进模型配置显式值优先未设置则自动补全 config {model_id: claude-sonnet-4-6} merged resolve_config_metadata(config, claude-sonnet-4-6) assert merged[context_window_limit] 1_000_000该表会为对话管理、上下文压缩、上下文溢出检测ContextWindowOverflowException等机制提供统一的窗口基准是 v1.39.0 在 context 领域的基础设施升级。MCP 客户端错误根因透传与类型注解修正1. 初始化错误携带根因PR 2238此前MCPClientInitializationError只报告笼统的初始化失败用户难以定位是超时、权限还是连接问题。本次修复让异常消息包含原始根因root cause核心改动在 strands-py/src/strands/tools/mcp/mcp_client.py# 初始化阶段任意异常都会把根因拼进消息并用 from e 保留原始异常链 raise MCPClientInitializationError(fthe client initialization failed: {e}) from e对应测试tests/strands/tools/mcp/test_mcp_client.py构造了Transport initialization failed场景断言异常消息精确匹配the client initialization failed: Transport initialization failed。除此之外超时场景也会得到专门的提示background thread did not start in {startup_timeout} seconds见 mcp_client.py异常类本身定义在 strands-py/src/strands/types/exceptions.py。2.exit与 stop() 类型注解修正PR 2248本次还修正了MCPClient.__exit__与stop()的类型注解。从源码看mcp_client.py__exit__声明返回None并委托self.stop(exc_type, exc_val, exc_tb)stop的三个形参分别对应异常类型、异常值与 tracebackmcp_client.py并负责信号通知后台线程、等待 join、按序清理事件循环与各项状态、支持实例复用。修正后的注解与contextlib.AbstractContextManager约定一致让类型检查器mypy / pyright不再误报。A2A 全任务生命周期状态支持PR 2245 实现了 A2A 协议的完整任务生命周期支持涉及 strands-py/src/strands/multiagent/a2a/executor.py 与 strands-py/src/strands/multiagent/a2a/_converters.py。StrandsA2AExecutor将 Strands Agent 适配为 A2A 协议执行器流式模式下支持failed失败、canceled取消、以及基于 interrupt 的 input_required需要输入等完整生命周期状态executor.py。状态到 Agent 停止原因的映射定义在_converters.py中_STATE_TO_STOP_REASON: dict[TaskState, StopReason] { TaskState.completed: end_turn, TaskState.failed: end_turn, TaskState.canceled: end_turn, TaskState.rejected: end_turn, TaskState.input_required: interrupt, TaskState.auth_required: interrupt, }也就是说A2A 的input_required/auth_required状态会映射为 Strands 的中断interrupt语义驱动 Agent 暂停并请求人工输入或鉴权而不是直接终止failed/canceled/rejected则正常结束回合。执行器还支持按context_id隔离会话状态并推荐使用agent_factory每个 context 一个独立 Agent、独立锁、可并发执行而非已废弃的单一agent复用模式。相关集成测试位于 tests_integ/a2a/ 与 tests_integ/test_a2a_executor.py。集成测试更新与升级建议PR 2262 对集成测试做了同步更新确保上述模型层与 A2A 改动在真实端到端场景见 tests_integ/中持续得到验证。升级到 v1.39.0 时的实操要点无破坏性变更可直接升级use_native_token_count、context_window_limit均为可选项默认行为本地估算、自动查表补全保持不变需要精确 Token 计数且模型受支持时显式开启use_native_token_countTrue需要按自定义窗口管理上下文时显式设置context_window_limit它会覆盖内置查找表OpenAI 兼容端点接入 Bedrock 时通过bedrock_mantle_config传入带profile_name的boto_session即可复用 AWS Profile需安装strands-agents[openai]额外依赖若 MCP 服务器初始化失败v1.39.0 的异常消息会直接携带根因配合from e保留的原始异常链即可快速定位。本文涉及的实现均可继续在仓库中追溯模型层见 strands-py/src/strands/models/MCP 客户端见 strands-py/src/strands/tools/mcp/mcp_client.pyA2A 见 strands-py/src/strands/multiagent/a2a/对应单测与集成测试分别在 strands-py/tests/strands/models/test_bedrock.py、strands-py/tests/strands/models/test_defaults.py、strands-py/tests/strands/tools/mcp/test_mcp_client.py 与 strands-py/tests_integ/a2a/ 中。赞分享人工智能大模型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 v1.34.1 版本更新解读上下文 Token 追踪、Langfuse 环境变量隔离与 Span 生命周期修复strands agents Python SDK v1.34.1 版本更新解读上下文 Token 追踪、Langfuse 环境变量隔离与 Span 生命周期人工智能大模型AI AgentAgent 框架多智能体工具调用MCP 服务harness-sdk Python SDK v1.9.0 版本详解OpenTelemetry 缓存指标、可配置 Swarm 入口点与 MCP 生命周期修复harness sdk Python SDK v1.9.0 版本详解OpenTelemetry 缓存指标、可配置 Swarm 入口点与 MCP 生命周期修复人工智能大模型AI AgentAgent 框架多智能体工具调用MCP 服务MCP Python SDK 服务生命周期Lifespan实战初始化、清理与类型化上下文MCP Python SDK 服务生命周期Lifespan实战初始化、清理与类型化上下文 导读 真实的 MCP 服务器几乎总是要在整个运行期间持有某些资源人工智能MCP 服务MCP Clients上一篇Comflowy API开发指南构建自定义AI生图应用的完整手册下一篇如何轻松恢复被遗忘的压缩包密码ArchivePasswordTestTool完整使用手册创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →