
人工智能大模型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点击查看免费下载本篇文章围绕开源仓库 harness-sdk 中 Python SDK 的 v1.38.0 版本发布记录见 site/src/content/changelog/sdk/python-v1.38.0.md系统梳理该版本在 token 计数、提示缓存、MCP 工具结果语义、Bedrock 模型适配等方向上的全部 22 项变更。读者将了解如何配置原生 token 计数、如何利用CachePoint的 TTL 字段优化 prompt 缓存命中率以及如何识别strict_tools、大工具结果卸载等新能力在生产 Agent 中的应用方式。版本概览一个零破坏变更的稳健迭代v1.38.0 发布于 2026-04-30属于 Python SDKstrands-agents包的常规功能迭代版本。从发布记录看全部 22 条变更的breaking: false即不存在破坏性 API 变更升级路径平缓。变更按类型分布为feat新功能8 项、fix修复10 项、chore工程化2 项、other依赖等杂项2 项。与此同时本版本迎来了 8 位新贡献者Zelys-DFKH、ElliottJW、Ratansairohith、kpx-dev、prettyprettyprettygood、SuperMarioYL、Gastly、kaghatim涉及 MCP、模型层、缓存、对话管理等多个模块说明该版本吸收了大量来自社区的外部改进。依赖层面有两项调整litellm依赖区间从1.82.6,1.75.9放宽为1.75.9,1.83.13允许 SDK 使用更新的 LiteLLM 版本PR #2197pre-commit开发依赖区间从4.6.0,3.2.0调整为3.2.0,4.7.0PR #2185。Token 计数体系升级从启发式估算到原生 API 精确计数v1.38.0 在 token 计数上做了系统性升级涉及四条独立变更新增count_token方法PR #2031、覆盖count_tokens使用原生计数PR #2189、新增ProviderTokenCountErrorPR #2211、在模型调用前估算输入 tokenPR #2221并配套将计数回退日志从 warning 降为 debugPR #2220。基类count_tokenstiktoken 优先、启发式兜底从源码看SDK 的模型基类在 strands-py/src/strands/models/model.py 中定义了count_tokens方法其默认实现遵循tiktoken 可用则用、不可用则启发式估算的策略使用 tiktoken 的cl100k_base编码若已安装否则回退到字符级启发式文本按每 4 个字符计 1 token_heuristic_estimate_textJSON 按每 2 个字符计 1 token_heuristic_estimate_json。_count_content_block_tokens会遍历消息中的text、toolUse、toolResult、reasoningContent、guardContent、citationsContent等各类内容块分别累计其中 toolResult 内的 image/document 二进制内容被有意排除在启发式统计之外。方法 docstring 明确提醒该估算不用于计费或精确配额计算精度因模型提供商而异。原生计数覆盖各提供商调用自家 API为了提升精度各模型实现覆写了count_tokens。关键统一开关是配置项use_native_token_count——只有显式设为True时才走原生 API否则走基类估算。各提供商实现如下提供商原生 API源码位置特殊行为Anthropicclient.messages.count_tokensanthropic.py复用 Messages API 请求格式剔除max_tokens等推理参数后再计数Bedrockclient.count_tokensConverse 格式bedrock.py对不支持计数的模型缓存到_SKIP_COUNT_TOKENS_MODELS集合AccessDeniedException缺bedrock:CountTokens权限也会被缓存跳过OpenAIresponses.input_tokens.countopenai_responses.py仅保留model/input/instructions/tools字段Geminiclient.models.count_tokensgemini.pyGemini 不支持对system_instruction和 tools 计数这两部分单独用基类启发式补充估算ProviderTokenCountError原生计数失败的控制流新增异常ProviderTokenCountError定义在 strands-py/src/strands/types/exceptions.py。从源码注释看它是 providercount_tokens()覆写内部的控制流异常例如 Bedrock 返回的inputTokens为None、Gemini 的total_tokens为None时抛出被捕获后统一回退到基类启发式估算。这类失败此前以 warning 级别记录v1.38.0 将回退日志降为 debug 级别PR #2220避免在部分模型不支持原生计数的场景下产生日志噪音。模型调用前的输入 token 估算count_tokens的实际消费方是事件循环与上下文管理器。从源码调用链看event_loop.py 在模型调用前估算输入 tokencontext_manager.py 利用估算值判断是否触发压缩等主动上下文管理offload/truncate.py、offload/summarize.py 等策略依赖count_tokens决定截断/摘要边界。也就是说v1.38.0 让调用模型前先估算 token成为事件循环的常规动作配合estimate_utilization见 model.py 的input_tokens / context_window_limit利用率估算为上下文窗口的主动管理提供了更可靠的前置信号。提示缓存升级CachePoint新增 TTL 语义缓存是本版本的另一条主线包含三条相关变更为CachePoint增加 TTL 支持PR #1660、LiteLLM 在_format_system_messages中转发CachePoint.ttl字段PR #2153、skills 注入期间保留系统提示中的缓存点PR #2134。CachePoint类型与CacheConfig配置CachePoint定义在 strands-py/src/strands/types/content.py是一个 TypedDicttype通常为default 可选的ttl字段如5m、1h作为ContentBlock的可选键挂在消息内容块上。TTL 面向接受 Anthropic 兼容cache_control字段的提供商。模型层的CacheConfigmodel.py则是缓存行为的统一配置入口v1.38.0 后字段包括配置项默认值说明strategyautoauto自动检测模型支持并注入 cachePointanthropic不检查支持、按 Anthropic 兼容格式注入ttlNone缓存条目的可选 TTL 时长如5m、1h同时会补齐自身未携带 TTL 的缓存点system_prompt_ttlTrue缓存系统提示TTL 字符串按原样生效True从ttl推导时长False禁用cache_keyNone提示缓存路由提供商OpenAI、LiteLLM、Mistral的稳定缓存键未设置时按请求推导为strands-session_id设为字符串可固定键设False完全退出路由tools_ttlNone缓存工具定义显式值含False优先于已弃用的模型级cache_toolsTTL 在请求格式化中的落地TTL 的落地逻辑集中在 bedrock.py 与 anthropic.pyBedrock 侧_apply_system_cache_ttl会为系统块的缓存点填充 TTL_honor_placed_cache_point对用户手工放置的缓存点保留其自身 TTL未携带 TTL 时才用配置补齐Anthropic 侧_inject_cache_point支持在最后一个 user 块后、PDF 文档边界等位置注入带ttl的缓存点需要特别留意的是 Bedrock 的约束toolConfig、system、messages 各段缓存点的 TTL 必须非递增即后面不允许出现比前面更长的 TTL否则请求会被 Bedrock 拒绝——因此 SDK 在段间做了 TTL 一致性处理见 bedrock.py 的tools_ttl_differs判断。两处配套修复LiteLLM 转发 ttlPR #2153修复_format_system_messages中未把CachePoint.ttl字段转发给 LiteLLM 的问题使 TTL 在 LiteLLM 模型路径上真正生效skills 注入保留缓存点PR #2134skills 注入系统提示时不再破坏已放置的缓存点避免 skills 拼装导致缓存失效。MCP 工具结果保留isError标志PR #2118 为 MCP 工具结果补充了错误语义。在 strands-py/src/strands/tools/mcp/mcp_types.py 中MCPCallToolResult新增可选字段isErrorTrue表示 MCP 工具执行成功但其业务逻辑返回了失败即协议层CallToolResult.isError字段缺失NotRequired表示工具成功、或错误属于协议/客户端异常而非工具自报失败。这一设计让调用方能够区分应用层错误与传输/协议错误。兼容层 tools/mcp/_compat.py 还处理了 MCP 协议 1.x 与 2.x 的字段命名差异isErrorvsis_error跨版本移植无碍mcp_client.py在结果归一化时会把工具自报错误写入result[isError]mcp_client.py。配套的修复是 PR #2106对已取消的工具不再合成异常。当工具因本地取消信号被中断时SDK 不再将其伪装成工具抛出的异常上报避免把取消误判为工具故障。Bedrock 适配默认模型升级与strict_tools默认模型升级PR #2193 将 Bedrock 模型的默认 ID 升级到 Claude Sonnet 4.5。需要说明的是仓库当前代码中的默认模型 ID 已进一步演进为global.anthropic.claude-sonnet-4-6含分区变体{}.anthropic.claude-sonnet-4-6见 bedrock.pyv1.38.0 发布记录则明确记载了升级默认模型至 Claude Sonnet 4.5这一里程碑动作。若你的应用显式指定了旧模型 ID升级 SDK 后默认值变化不会影响显式配置若依赖默认值则请注意实际生效模型可能随仓库演进变化。strict_tools结构化工具强制PR #2213 为 Bedrock 模型新增strict_tools配置bool | None见 bedrock.py。当开启时SDK 会在工具定义中注入strict: Truebedrock.py对工具调用启用结构化输出强制校验并要求自动注入额外工具参数以满足 strict 约束。对于依赖工具输出 JSON 稳定性、需要严格 schema 校验的 Agent 工作流该配置可显著降低工具调用解析失败率。大工具结果卸载Offloader预览显式化与检索自动启用PR #2162 引入大工具结果卸载能力PR #2222 在此基础上让预览返回显式路径并自动启用检索。该功能由 vended_plugins/context_offloader/plugin.py 提供核心思路是当工具结果超过阈值时将其按内容块存入外部存储上下文内只保留截断的文本预览 逐块引用text/plain/application/json供 Agent 按需检索完整内容。关键配置见 plugin.pyContextOffloaderPlugin( max_result_tokens8_000, # 超过该 token 数触发卸载 preview_tokens2_000, # 上下文中保留的预览 token 数 include_retrieval_toolTrue, # 自动注册 retrieve_offloaded_content 工具 evict_after_cycles..., )校验规则源码中显式抛出ValueError包括max_result_tokens必须为正、preview_tokens必须非负且小于max_result_tokens。预览切分在 tiktoken 可用时精确按 token 切分否则回退到字符近似约每 token 4 字符见 plugin.py。v1.38.0 后卸载预览会返回显式的存储路径且include_retrieval_toolTrue时自动注册并绑定检索工具plugin.py免去手动配置检索工具的步骤。其余修复与工程化改进Ollama 唯一 toolUseIdPR #2053生成唯一的toolUseId而非复用工具名修复多工具调用场景下工具结果与调用错配的问题Nova Sonic 非交互标志PR #2188为 Nova Sonic 的 history 与 system prompt 使用非交互式标志conversation-manager 窗口校验PR #2208正确处理window_size0禁用窗口并拒绝负值输入避免非法配置导致运行时异常测试更新PR #2226将测试中的模型切换到非 EOL已停止支持版本工具规范导航风格指南PR #2203更新tools/下工具规范的组织与导航约定属于开发流程规范。升级建议与注意事项token 计数若追求精确的上下文利用率控制可在 Anthropic / Bedrock / OpenAI / Gemini 模型配置中开启use_native_token_countTrue注意 Gemini 的 system_instruction 与 tools 仍按启发式估算Bedrock 需要bedrock:CountTokens权限权限缺失会自动降级并缓存跳过提示缓存为CacheConfig.ttl、system_prompt_ttl、tools_ttl设置合理时长如5m、1h并注意 Bedrock 的 TTL 非递增约束升级后 skills 注入不再破坏缓存点MCP 集成现在可通过MCPCallToolResult.isError区分工具业务失败与协议异常配合取消语义的修正错误处理分支可以写得更精确升级安全性本版本无破坏性变更但依赖区间litellm、pre-commit与 Bedrock 默认模型 ID 有变化显式固定模型 ID 的生产环境不受影响。以上能力均可在仓库源码中逐一验证模型计数与缓存配置见 strands-py/src/strands/models/model.py各提供商覆写见 anthropic.py、bedrock.py、gemini.py、openai_responses.pyMCP 结果语义见 tools/mcp/mcp_types.py卸载插件见 vended_plugins/context_offloader/plugin.py。赞分享人工智能大模型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.53.0 版本深度解析Prompt 缓存、Agent 委托与 MCP 工具增强Strands Agents Python SDK v1.53.0 版本深度解析Prompt 缓存、Agent 委托与 MCP 工具增强 导读 本文围绕 St人工智能大模型AI AgentAgent 框架多智能体工具调用MCP 服务strands-agents Python SDK v1.30.0 版本解析缓存、会话、工具与取消机制的实战升级strands agents Python SDK v1.30.0 版本解析缓存、会话、工具与取消机制的实战升级 导读 本文基于 strands agents人工智能大模型AI AgentAgent 框架多智能体工具调用MCP 服务strands-agents Python SDK v1.47.0 变更深度解析Nova Sonic 加固、MCP 容错与内存存储迁移strands agents Python SDK v1.47.0 变更深度解析Nova Sonic 加固、MCP 容错与内存存储迁移 导读 本文围绕 str人工智能大模型AI AgentAgent 框架多智能体工具调用MCP 服务上一篇DBeaver 插件安装完整指南5 分钟装好扩展3 个场景组合一套自查流程下一篇Thorium浏览器完整指南老机器和隐私用户该装哪个 Chromium 分支创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考