ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

harness-sdk Python SDK v1.14.0 变更详解:结构化输出、多智能体钩子与 MCP 连接管理

harness-sdk Python SDK v1.14.0 变更详解:结构化输出、多智能体钩子与 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点击查看免费下载本指南围绕 python/v1.14.0 变更日志 展开系统梳理 Strands Agents Python SDK 1.14.0 的 16 项变更覆盖结构化输出进入主 Agent 循环、实验性 AgentConfig 工具管理、多智能体钩子与序列化、LiteLLM 推理控制、Bedrock 限流重试等核心能力。阅读完本文你将掌握本次版本中每个新特性/修复的 API 用法、底层实现原理以及如何在自己的 Agent 应用中落地这些能力。版本概览与变更全景Strands Agents Python SDK 1.14.0 发布于 2025-10-29共包含 16 项变更含 6 个 feature、2 个 fix 与若干重构/测试清理全部为非破坏性变更breaking: false可安全升级。按领域划分领域变更类型modelLiteLLM start/stop reasoning 支持#947othertool实验性 AgentConfig 工具管理#935feattelemetry/otelinvoke_agent span 改为 INTERNAL spanKind#1055fixmultiagent多智能体钩子 序列化/反序列化#1070featstructured-output结构化输出进入 Agent 循环#943featmodelBedrock ThrottlingException 重试修复#1096fixmcpToolProvider 管理的实验性 Agent 连接#895featmodel最新消息含 ToolUse 时跳过模型调用#1068feattool直接工具调用禁止 interrupt#1097、无效工具用法发送时转换#1091other/fixmodelLiteLLM 结构化输出处理增强#1021fixmisc无 tool_use 时不中断退出#1087、MCP elicitation#1094、PR size labeler#1082—本次版本还迎来了两位新贡献者mr-lee#935与 Arindam200#1021。结构化输出成为 Agent 循环的一等公民v1.14.0 最核心的变化#943现在只需在创建 Agent 或调用时直接传入structured_output_model。新 API 用法from pydantic import BaseModel from strands import Agent class WeatherReport(BaseModel): city: str temperature_c: float conditions: list[str] # 方式一构造 Agent 时声明默认输出模型 agent Agent( modelanthropic/claude-sonnet-4-5, tools[web_search], structured_output_modelWeatherReport, ) # 方式二单次调用时覆盖默认模型 result await agent.run( 查询上海的天气, structured_output_modelWeatherReport, structured_output_prompt请以 JSON 结构返回天气信息, ) weather result.structured_output # 直接拿到 WeatherReport 实例相关签名定义见 agent.pyrun()与run_async()均新增了structured_output_model与structured_output_prompt两个参数后者可覆盖 Agent 级默认提示词。底层实现真实工具而非旁路魔法与许多 SDK 把结构化输出做成隐藏的解析层不同Strands 将其实现为一个真实的 AgentTool。核心类StructuredOutputTool位于 structured_output_tool.py构造时接收一个 PydanticBaseModel子类通过convert_pydantic_to_tool_spec()将其转换为工具 schema并带缓存_TOOL_SPEC_CACHE避免重复转换工具描述被强制改写为should only be invoked as the last and final tool before returning the completed result引导模型在完成任务后最后一次调用它工具名即 Pydantic 模型类名便于模型理解输出契约。运行期状态由StructuredOutputContext管理_structured_output_context.py它负责register_tool/cleanup在 Agent 循环开始/结束时向 ToolRegistry 注册或移除结构化输出工具set_forced_mode(tool_choice)当需要强制模型输出时可注入 tool_choice 强制调用store_result/get_result/extract_result按 tool_use_id 暂存并取回解析结果供循环结束后写入AgentResult.structured_output。schema 转换逻辑位于 structured_output_utils.py支持嵌套 Pydantic 模型、$defs引用展开等复杂结构。同时LiteLLM 模型提供器也增强了结构化输出处理#1021 中实现了structured_output()当底层模型支持response_schema时走原生结构化生成路径supports_response_schema判断否则自动回退到工具调用路径_structured_output_using_tool保证跨模型行为一致。实验性 AgentConfig从 JSON 声明式创建 Agent由新贡献者 mr-lee 提交的 AgentConfig。支持的配置字段配置文件是一个 JSON 对象通过内置的 JSON Schema 校验AGENT_CONFIG_SCHEMA使用预编译的jsonschema.Draft7Validator提升性能字段类型说明namestring | nullAgent 名称默认nullmodelstring | null模型 ID不指定时使用默认模型promptstring | null系统提示词为 Agent 提供高层上下文toolsarraystring工具列表文件路径、Python 模块名或文件中tool注解的函数注意additionalProperties: False未知字段会被拒绝。使用方式from strands.experimental.agent_config import config_to_agent # 从文件创建支持 file:// 前缀 agent config_to_agent(/path/to/config.json) # 从字典创建 config { model: anthropic.claude-3-5-sonnet-20241022-v2:0, tools: [calculator, path/to/my_tool.py], } agent config_to_agent(config) # 配置声明式的工具加载不覆盖所有场景 # 需要构造参数的复杂工具仍需代码实例化后手动注册 agent.tool_registry.process_tools([ToolWithConfigArg(HttpsConnection(localhost))])config_to_agent()支持传入**kwargs透传给 Agent 构造器文件不存在抛FileNotFoundError非法 JSON 抛json.JSONDecodeError校验失败或工具加载失败抛ValueError。从源码结构看该能力被设计为实验性入口strands/experimental命名空间正式化之前 API 可能调整。多智能体钩子与状态序列化#1070 为多智能体编排器补齐了两项能力完整的生命周期钩子以及可序列化的编排器状态。多智能体生命周期钩子钩子事件定义在 hooks/events.py核心事件包括MultiAgentInitializedEvent编排器初始化完成携带source: MultiAgentBaseBeforeMultiAgentInvocationEvent编排器整体调用前触发AfterMultiAgentInvocationEvent编排器整体调用后触发BeforeNodeCallEvent/AfterNodeCallEvent单个节点Agent 或子编排器调用前后触发。测试用例 test_multi_agent_hooks.py 验证了 Swarm 与 Graph 两种编排器的完整钩子生命周期Swarm 依次触发 initialized → before node → after node → before invocation → after invocation 等事件Graph 则在节点级事件之上叠加编排级事件。from strands.hooks import ( BeforeMultiAgentInvocationEvent, AfterMultiAgentInvocationEvent, ) from strands import Swarm def on_before(event: BeforeMultiAgentInvocationEvent) - None: print(fswarm about to run: {event.source}) swarm Swarm(agents[agent_a, agent_b]) swarm.add_hook(on_before, BeforeMultiAgentInvocationEvent)需要留意的是旧的strands.experimental.hooks.multiagent模块已标记 Deprecated见 experimental/hooks/multiagent/events.py并提示使用strands.hooks新代码应直接导入新命名空间。编排器状态序列化同一 PR 在 multiagent/base.py 为MultiAgentBase新增了serialize_state()与deserialize_state(payload)两个接口snapshot orchestrator.serialize_state() # 返回 JSON 可序列化的状态字典 orchestrator.deserialize_state(snapshot) # 从会话字典恢复编排器状态从源码结构看基类以raise NotImplementedError占位由具体编排器Graph、Swarm子类实现用于支持会话持久化与断点恢复场景。NodeResultbase.py也提供了to_dict()/from_dict()统一了 Agent 结果与嵌套 MultiAgentResult 的 JSON 往返表示。MCPToolProvider 管理的 Agent 连接与 elicitation实验性 Agent 托管连接#895此前 MCP 客户端需要开发者手动创建并注册工具v1.14.0 引入的实验性能力#895允许 Agent 通过ToolProvider接口托管 MCP 连接生命周期。ToolProvider是定义在 tools/tool_provider.py 的抽象基类声明了三个抽象方法class ToolProvider(ABC): abstractmethod async def load_tools(self, **kwargs) - Sequence[AgentTool]: ... abstractmethod def add_consumer(self, consumer_id, **kwargs) - None: ... abstractmethod def remove_consumer(self, consumer_id, **kwargs) - None: ...MCPClientmcp_client.py正是ToolProvider的一个实现它通过load_tools()暴露 MCP 工具并利用 consumer 计数管理连接引用。而Agent的tools参数agent.py接受ToolProvider实例实现Agent 用则连、不用则释放的托管式连接。from strands.tools.mcp import MCPClient client MCPClient( server_namegithub, commanduvx, args[mcp-server-github], ) # 传入 Agent 后由 Agent 托管加载与释放 agent Agent(modelanthropic/claude-sonnet-4-5, tools[client])集成测试 test_mcp_client.py 覆盖了连接复用test_can_reuse_mcp_client、超时下连接稳定性test_mcp_client_connection_stability_with_client_timeout、内嵌资源test_mcp_client_embedded_resources_with_agent等关键场景。MCP elicitation#1094同一迭代周期还加入了 MCP elicitation#1094支持——即模型在调用 MCP 工具前可先通过引出流程获取所需参数。这通常表现为在工具调用前插入一轮询问式交互用于补充上下文不足的参数。该能力与 ToolProvider 连接管理配合共同完善 MCP 工具链的交互闭环。LiteLLM 推理reasoning控制与流式处理#947通过LiteLLMConfig透传参数from strands.models.litellm import LiteLLMModel model LiteLLMModel( model_idopenai/o1-mini, # 或 anthropic/claude-sonnet-4-5 等任意 LiteLLM 支持的模型 params{ max_tokens: 4096, # 推理控制参数在此透传如 reasoning_effort / budget_tokens 等 }, streamTrue, )值得指出的是LiteLLM 提供器对流式输出的处理已经相当完善_process_choice_contentlitellm.py会从响应块中识别reasoning_content并将其作为独立的reasoning_content数据流事件输出对于 Gemini 推理模型还会提取reasoningContent.reasoningText生成 thinking 块并将 thought signature 嵌入工具调用 ID 中_THOUGHT_SIGNATURE_SEPARATOR机制见 litellm.py。这意味着升级到 1.14.0 后推理模型的思考过程与最终回答可以在流式事件中分别消费。Agent 循环的稳健性修复本版本有一组针对 Agent 主循环的健壮性修复值得单独说明跳过冗余模型调用#1068当最新一条消息已包含 ToolUse时Agent 循环会直接执行工具而跳过模型调用避免重复把工具调用序列回传给模型造成浪费。这在高频工具调用场景下能显著减少 token 消耗与延迟。无 tool_use 时不中断退出#1087修复了一个边界情况当循环中没有任何tool_use需要执行时例如模型回复纯文本或空调用不再提前 bail out中断退出而是让循环按正常路径收敛到最终结果避免因没有工具结果而异常终止。无效工具用法延迟转换#1091工具用法的规范化transform时机从检测到无效用法时立即处理改为发送给模型时再转换。这样中间状态保持原始语义只在与模型交互的边界上做一次统一转换减少状态漂移。直接工具调用禁止 interrupt#1097当通过Agent.run_tools()等入口直接调用工具不经模型决策时interrupt 不再被允许——因为此时没有模型上下文可恢复中断语义不成立。这属于行为约束而非新功能。OpenTelemetryinvoke_agent span 语义修正#1055 修正了 Agent 调用链路的 OpenTelemetry span 语义invoke_agentspan 的span_kind从默认值改为SpanKind.INTERNAL。对应实现位于 tracer.pyspan self._start_span( finvoke_agent {agent_name}, attributesattributes, span_kindtrace_api.SpanKind.INTERNAL, # 内部调用而非 CLIENT/SERVER )该 span 携带gen_ai.agent.name、gen_ai.request.model、gen_ai.agent.tools等属性tracer.py。语义修正后Agent 编排过程在 trace 中被正确归类为应用内部操作避免与外部模型/服务调用SpanKind.CLIENT见 tracer.py混淆从而让依赖 span kind 的采样器、可视化与成本分析工具能更准确地识别 Agent 调用。Bedrock 限流Throttling重试修复#1096 修复了 Bedrock 模型提供器对限流异常的识别此前仅匹配部分大小写变体导致某些 Throttling 响应被当作普通错误处理而非可重试的限流。修复后的逻辑位于 bedrock.pyexcept ClientError as e: error_message str(e) if ( e.response[Error][Code] ThrottlingException or e.response[Error][Code] throttlingException ): raise ModelThrottledException(error_message) from eModelThrottledException会被上层重试机制识别并触发退避重试而其他异常如上下文溢出会映射为ContextWindowOverflowException则走各自路径。同一文件中还包含工具结果回合分离_separate_tool_result_turns针对 Bedrock ValidationException与 guardrail 内容脱敏等配套处理bedrock.py共同保证生产环境下的 Bedrock 调用稳定性。其他值得注意的工程改动interrupt docstring 格式修复#1074修正interrupt相关文档字符串的排版纯文档性质集成测试清理#1045interrupts 集成测试移除asyncio标记PR size labeler#1082仓库 CI 新增 PR 规模自动打标帮助维护者按变更规模分级评审。升级建议与注意事项结构化输出如果你在使用Agent.structured_output()方法建议迁移到run(..., structured_output_model...)参数形式旧方法已标记 deprecatedagent.py多智能体钩子若你依赖strands.experimental.hooks.multiagent请迁移至strands.hooks旧模块会触发 DeprecationWarningAgentConfig属于实验性 APIstrands.experimental工具加载仅支持声明式文件路径/模块名/tool 函数需要构造参数的复杂工具需在创建后手动注册推理模型LiteLLM 提供器的推理控制与思考流事件需要streamTrue才能完整观测MCP 托管连接MCPClient作为ToolProvider传入 Agent 时连接生命周期由 Agent 托管注意 consumer 计数语义同一客户端可被多个 Agent 共享见test_can_reuse_mcp_client。本版本整体聚焦于让结构化输出、多智能体编排与 MCP 工具链真正可生产化同时通过一系列循环稳健性修复与可观测性修正降低了长时运行 Agent 的失败率。建议结合 tests_integ/mcp 与 tests/strands/hooks 下的集成/单元测试进一步理解各特性的边界条件与预期行为。赞分享人工智能大模型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 TypeScript SDK v0.5.0 看多智能体组件、结构化输出与 MCP 客户端重构从 harness sdk TypeScript SDK v0.5.0 看多智能体组件、结构化输出与 MCP 客户端重构 本文基于 harness sdk 仓库人工智能大模型AI AgentAgent 框架多智能体工具调用MCP 服务MCP Python SDK 结构化输出完全指南返回类型注解即输出 SchemaMCP Python SDK 结构化输出完全指南返回类型注解即输出 Schema 导读 本指南聚焦 Model Context ProtocolMCPPy人工智能MCP 服务MCP ClientsMCP Ruby SDK输入输出模式详解处理结构化数据的最佳实践MCP Ruby SDK输入输出模式详解处理结构化数据的最佳实践 MCP Ruby SDK是Model Context Protocol的官方Ruby开发工具MCP 服务MCP Clients人工智能工具调用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表