ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

strands-agents Python SDK v1.10.0 版本解析:outputSchema 工具规范、Gemini 模型接入与 MCP 超时修复

strands-agents Python SDK v1.10.0 版本解析:outputSchema 工具规范、Gemini 模型接入与 MCP 超时修复 人工智能大模型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.10.0 版本围绕工具规范、模型提供方与 MCP 集成三大方向进行了一轮能力增强与稳定性修复。本文以官方变更日志 python-v1.10.0.md 为骨架深入对应源码实现逐一解析「工具声明输出 Schema」「新增 Gemini 模型提供方」「修复 MCP 超时」以及「工具热重载标识、Hook 事件转正」等改动的技术细节与实战价值。读完本文你将掌握这些新能力的使用方式、底层实现位置以及它们对生产环境 Agent 开发的实际影响。版本概览与变更分类v1.10.0 发布于 2025-09-29属于 Python SDK包名strands-agents的次要版本。依据变更日志的entries字段本次发布包含 11 项变更全部为breaking: false即不引入破坏性 API 变更可以平滑升级。按变更类型与影响领域归类如下类型数量影响领域典型条目feat新功能4tool / model / hooks / multiagentoutputSchema 工具规范、Gemini 模型提供方、ModelCall/ToolCall Hook 事件转正、Multiagent HookEventfix修复2gemini / mcpGemini asyncio 事件循环关闭错误、MCP 超时问题other依赖与改进5model / 构建工具链OpenAI 错误处理改进、openai 依赖升级、sphinx 与 pytest-asyncio 版本放宽此外本次发布还迎来了新贡献者notgitikaGemini 模型提供方的作者PR #725并新增了PythonAgentTool.supports_hot_reload属性PR #928。下文将按领域分别展开。工具规格新增 outputSchema声明工具的预期输出格式变更内容v1.10.0 为工具规格ToolSpec增加了可选的outputSchema支持PR #818。在此之前工具规格仅包含inputSchema输入参数的 JSON Schema模型只知道自己可以调用什么、需要传什么参数但并不知道工具会返回什么样的结构。类型层面的定义在 types/tools.py 中ToolSpec的注释明确描述了这一字段的语义outputSchema: Optional JSON Schema defining the expected output format.从 types/tools.py 的实现可以看出outputSchema与inputSchema一样属于NotRequired[JSONSchema]类型即它是可选的、且以嵌套 JSON Schema 形式表达。这意味着任何实现了AgentTool接口的工具都可以在自己的tool_spec属性中附带输出 Schema向模型以及下游的推理链路声明其返回数据的结构。MCP 工具适配层中的实际应用outputSchema目前最直接、最完整的落地场景是 MCPModel Context Protocol工具适配层。在 tools/mcp/mcp_agent_tool.py 的tool_spec属性中MCPAgentTool将 MCP 工具的输入/输出 Schema 一并转换进框架的ToolSpecspec: ToolSpec { inputSchema: {json: input_schema(self.mcp_tool)}, name: self.tool_name, description: description, } tool_output_schema output_schema(self.mcp_tool) if tool_output_schema: spec[outputSchema] {json: tool_output_schema}也就是说当 MCP 服务器在其工具声明中提供outputSchemaMCP 2.x 线为output_schema时适配层会自动将其透传为框架的outputSchema。由于mcp1.x 与 2.x 两代 Python 包对字段命名不同1.x 为outputSchema2.x 为output_schemaSDK 在 tools/mcp/_compat.py 中提供了兼容层def output_schema(tool: Any) - dict[str, Any] | None: schema: dict[str, Any] | None tool.output_schema if MCP_V2 else tool.outputSchema return schema该兼容函数以MCP_V2标志通过探测ClientSession是否具有discover方法判断见 _compat.py在两条 mcp 版本线上自动选择正确的字段名使 SDK 代码保持版本无关。实战价值对使用方而言outputSchema的引入意味着模型在调用工具前能获得返回结构的先验信息有助于生成更稳定的后续推理支持输出 Schema 的 MCP 服务器声明可以被完整透传到 Agent 的工具描述中无需手写二次封装它是可选字段未声明输出 Schema 的工具不受任何影响保证了向后兼容。新增 Gemini 模型提供方接入 Google Gemini API变更内容v1.10.0 新增了GeminiModel模型提供方PR #725作者 notgitika使 strands-agents 可以直接接入 Google Gemini 系列模型如gemini-2.5-flash。这是本次版本中影响面最大的新功能。模块入口与延迟加载在 models/init.py 中GeminiModel通过__getattr__延迟加载if name GeminiModel: from .gemini import GeminiModel return GeminiModel这一设计将google-genai等可选依赖的导入推迟到真正使用时避免在未使用 Gemini 的场景下产生不必要的依赖加载开销。完整实现位于 models/gemini.py。GeminiConfig 配置项GeminiModel.GeminiConfig继承自BaseModelConfig在 models/gemini.py 中定义了以下关键配置项配置项类型必填说明model_idstr是Gemini 模型 ID如gemini-2.5-flashparamsdict[str, Any]否附加模型参数如temperature对应 Gemini 的 GenerationConfiggemini_toolslist[genai.types.Tool]否Gemini 特有工具GoogleSearch、CodeExecution、ComputerUse、UrlContext、FileSearch 等函数调用类工具请走标准 tools 接口use_native_token_countbool否是否使用 Gemini 原生count_tokensAPI默认为False使用本地估算器值得注意的一个约束gemini_tools中不允许包含FunctionDeclaration。构造函数在初始化时会调用_validate_gemini_tools进行校验见 models/gemini.py如果传入的函数声明非空会抛出ValueError提示应使用标准 tools 接口。客户端注入与生命周期构造函数支持两种客户端配置方式models/gemini.py传入client复用预先配置好的genai.Client实例SDK 不会关闭它生命周期由调用方管理适用于注入自定义包装器、复用连接池、集中式可观测性等场景传入client_argsSDK 每次按需创建新客户端如传api_key。两者不可同时提供否则抛出ValueError。此外文档注释明确提醒不要跨不同的 asyncio 事件循环共享同一个 client这也与本次发布的 Gemini 事件循环修复直接相关见下文。工具调用与结构化输出工具声明转换_format_request_toolsmodels/gemini.py将框架的ToolSpec列表转换为genai.types.Tool其中parameters_json_schema直接取tool_spec[inputSchema][json]——这与上文 outputSchema 的 JSON Schema 表达方式一脉相承。工具选择策略_format_tool_choicemodels/gemini.py将框架的ToolChoiceauto/any/ 指定工具映射为 Gemini 的FunctionCallingConfigMode。由于 Gemini 没有单工具模式指定单个工具时用ANY模式并配合allowed_function_names收窄。结构化输出structured_outputmodels/gemini.py利用 Gemini 原生结构化输出能力将 Pydantic 输出模型的model_json_schema()作为response_schema配合response_mime_typeapplication/json最终用output_model.model_validate(response.parsed)反序列化结果。Token 计数count_tokensmodels/gemini.py在use_native_token_countTrue时调用 Gemini 原生count_tokensAPI 获取精确计数由于 Gemini 的 count_tokens 不支持system_instruction与 tools这两部分回退到基类的启发式估算并累加。任何异常都会降级回本地估算保证计数流程不会中断推理。修复 Gemini asyncio 事件循环关闭错误变更内容v1.10.0 修复了 Gemini asyncio 使用中出现的 event loop closed 错误PR #932scope 为 gemini。结合源码看该问题与客户端生命周期管理密切相关_get_clientmodels/gemini.py每次调用都会基于client_args创建新的genai.Client而异步调用通过client.aio进行如果客户端创建、复用与关闭发生在不同的事件循环上或客户端在流式请求未完成时被回收就可能触发 event loop closed。使用建议生产环境中建议遵循源码注释给出的两条实践显式注入 clientclient在一个事件循环/worker 内复用连接池由调用方统一管理关闭时机不要跨事件循环共享 client避免因循环绑定错乱引发关闭错误。修复 MCP 工具调用超时问题变更内容v1.10.0 修复了 MCP 超时问题PR #922。MCP 超时在 SDK 中是一条贯穿多个层次的链路源码提供了完整的证据MCPAgentTool构造函数接受timeout: timedelta | Nonetools/mcp/mcp_agent_tool.py并在stream中将其作为read_timeout_seconds传给mcp_client.call_tool_asyncMCPClient.call_tool_async接受read_timeout_secondstools/mcp/mcp_client.py其 docstring 特别说明在 mcp 2.x 线上该超时约束的是多轮往返调用中的每一轮请求而非整个调用并会用于任务模式的poll_timeout兼容层read_timeout_compat.py负责跨版本换算mcp 1.x 的call_tool接受timedelta而 2.x 接受float秒数因此该函数在 2.x 线返回timeout.total_seconds()。本次修复的具体落点可以从call_tool兼容函数_compat.py中看到在 2.x 分支call_once将超时与input_responses、request_state一并传入session.call_tool并开启allow_input_requiredTrue支持多轮 InputRequired 往返SEP-2322由_drive_input_required统一驱动重试。超时不再被多轮往返流程吞掉或错位是本次修复的核心价值。配置建议为 MCP 工具设置超时时建议以timedelta传入例如from datetime import timedelta # 为 MCP 工具设置单轮请求超时 mcp_tool MCPAgentTool(mcp_toolmcp_tool, mcp_clientclient, timeouttimedelta(seconds30))并注意在 mcp 2.x 线上该值按每轮请求生效而非整个工具调用的总时长。PythonAgentTool 新增 supports_hot_reload 属性变更内容v1.10.0 为PythonAgentTool增加了supports_hot_reload属性PR #928。该属性源于抽象基类AgentTool的默认实现见 types/tools.pyproperty def supports_hot_reload(self) - bool: Whether the tool supports automatic reloading when modified. Returns: False by default. return False默认返回False而基于函数的工具tool装饰器生成的DecoratedFunctionTool覆写为恒True见 tools/decorator.py。在注册表中的作用该属性被工具注册表用于控制同名词工具的注册与热替换行为见 tools/registry.py# Check duplicate tool name, throw on duplicate tool names except if hot_reloading is enabled if tool.tool_name in self.registry and not tool.supports_hot_reload: raise ValueError(fTool name {tool.tool_name} already exists. Cannot register tools with exact same name.)也就是说不支持热重载的工具出现重名注册时直接抛ValueError含-/_归一化后的重名冲突检测支持热重载的动态工具允许重名注册新注册的实例会覆盖旧实例实现修改即生效的迭代体验。对应的行为由测试用例锁定例如 test_registry.py 中的test_register_tool_duplicate_name_without_hot_reload与test_register_tool_duplicate_name_with_hot_reload以及 test_decorator.py 对函数工具恒支持热重载的断言。Hook 事件转正与 Multiagent HookEvent变更内容v1.10.0 做了两件与 Hook 体系相关的事将ModelCall与ToolCall事件标记为非实验性PR #926scope 为 hooksBeforeModelCallEvent/AfterModelCallEvent与BeforeToolCallEvent/AfterToolCallEvent从实验性 API 转正为稳定 API开发者可以放心地在生产代码中依赖它们为 Multiagent 创建新的 HookEventPR #925扩展多智能体场景下的 Hook 事件类型供多 Agent 协作链路使用。事件定义与字段在 hooks/events.py 中BeforeModelCallEvent在模型调用前触发允许 Hook 提供方检查或修改即将发送给模型的 messages 与配置其关键字段包括invocation_state随 Agent 调用传递的状态与配置可包含多智能体共享上下文、请求追踪、动态配置projected_input_tokens由 Agent 主循环根据消息元数据与 token 估算出的即将发生的模型调用的预估输入 token 数供 conversation manager 等组件提前做出上下文管理决策估算失败时为Nonecancel设置后取消本次模型调用字符串作为取消消息True使用默认消息。BeforeToolCallEvent/AfterToolCallEventhooks/events.py围绕工具调用提供selected_tool、tool_use、result、duration、retry等字段其中retry可由 Hook 回调置为True以丢弃当前结果并重新调用工具duration从BeforeToolCallEvent返回后开始计时、到AfterToolCallEvent构造前结束。这些事件在 hooks/init.py 中被统一导出可通过registry.add_callback组合订阅多个事件hooks/registry.py 展示了合并注册BeforeModelCallEvent | AfterModelCallEvent的写法。转正后建议围绕这四个事件建立生产级的可观测性、限流与上下文管理逻辑。其他改进与依赖更新OpenAI 错误处理改进PR #918优化了 OpenAI 提供方的错误处理路径属于 model 领域的行为改进依赖版本放宽sphinx-autodoc-typehints从2.0.0放宽到4.0.0PR #903、sphinx从6.0.0放宽到9.0.0PR #904、pytest-asyncio从1.2.0放宽到1.3.0PR #861openai 依赖升级从1.108.0,1.68.0更新为1.110.0,1.68.0PR #916保持对最新 OpenAI 客户端小版本的兼容。以上依赖更新均由 Dependabot 自动提交属于常规依赖维护不涉及行为变更。升级建议与影响评估综合本次变更升级到 v1.10.0 时的关注点如下无破坏性变更所有条目均为breaking: false可直接升级SDK 源码与测试均已同步更新本仓库的 strands-py 即为该版本实现。MCP 用户建议为工具调用显式配置timeout并在 mcp 2.x 线上注意其每轮请求语义本次修复对依赖多轮往返InputRequired的服务器尤为重要。Gemini 用户新接入者可参考上文配置GeminiConfig已使用者应遵守单事件循环内复用 client的约束避免 event loop closed 错误。工具开发者输出 Schema 是可选能力实现自定义工具时可在tool_spec中附带outputSchema函数工具天然支持热重载重名注册行为需结合supports_hot_reload理解。Hook 开发者Before/AfterModelCallEvent与Before/AfterToolCallEvent已转正可作为稳定 API 使用。如需验证各改动细节可直接查阅 models/gemini.py、tools/mcp/mcp_agent_tool.py、tools/mcp/_compat.py 与 hooks/events.py 等源码文件以及 tools/registry.py 与 types/tools.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.2.0 技术解读接入 Amazon SageMaker AI 模型与增强 MCP 工具链strands agents Python SDK v1.2.0 技术解读接入 Amazon SageMaker AI 模型与增强 MCP 工具链 导读 本文人工智能大模型AI AgentAgent 框架多智能体工具调用MCP 服务strands-agents Python SDK v1.26.0 版本解析MCP Tasks 支持、多智能体 Artifact 修复与模型错误处理增强strands agents Python SDK v1.26.0 版本解析MCP Tasks 支持、多智能体 Artifact 修复与模型错误处理增强 版本人工智能大模型AI AgentAgent 框架多智能体工具调用MCP 服务Strands Agents Python SDK v1.53.0 版本深度解析Prompt 缓存、Agent 委托与 MCP 工具增强Strands Agents Python SDK v1.53.0 版本深度解析Prompt 缓存、Agent 委托与 MCP 工具增强 导读 本文围绕 St人工智能大模型AI AgentAgent 框架多智能体工具调用MCP 服务上一篇Android设备指纹安全实战fingerprintjs-android防篡改与欺诈检测方案下一篇不花一分钱2步跑通AI视频增强Video2X把低清视频无损放大成高清的完整教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表