人工智能大模型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 Python SDKstrands-agentsv1.20.0 的官方变更记录为骨架逐一解读本版本 13 项变更的动机、影响面与底层实现并结合当前仓库源码strands-py验证每项变更对应的真实代码路径。版本发布于 2025-12-15涵盖 hooks 事件增强、多智能体中断、agent 结构化输出、工具 schema 归一化、会话管理与 MCP 客户端生命周期等方向全部为非破坏性breaking: false变更可安全升级。读完本文你将掌握 v1.20.0 的完整变更清单、每项变更的源码落点以及升级到该版本后值得立即启用的新能力。版本全景一页看懂 v1.20.0v1.20.0 是 Strands Python SDK 的一个功能与稳定性并重的迭代版本13 项变更按类型分布如下类型数量涉及领域feat新功能2hooksAfterInvocationEvent 携带 AgentResult、docsagent.md 文档fix缺陷修复4agent 结构化输出、tool spec 组合关键字、会话分页、MCP 事件循环other内部改进7swarm interrupts、bidi 记录工具调用与代码质量、docstrings 清理从变更分布可以推断本版本的工作重心有三条主线让钩子事件携带更丰富的运行时信息为可观测性与自动循环铺路、补强 swarm 中断这一多智能体核心交互原语、以及系统性收敛工具与模型调用链路上的边界缺陷。所有变更均标注为非破坏性意味着既有代码在升级后不需要任何迁移动作。Hooks 增强AfterInvocationEvent 现在携带 AgentResult变更内容本次版本最值得关注的feat变更PR 1125将 AgentResult 添加到 AfterInvocationEvent。在这之前钩子回调在 agent 调用结束时拿不到最终结果对象只能自行从 agent 状态中解析或依赖消息流事件自行拼装。源码实现AfterInvocationEvent 定义 中新增了result字段dataclass class AfterInvocationEvent(HookEvent): invocation_state: dict[str, Any] field(default_factorydict) result: AgentResult | None None resume: AgentInput None def _can_write(self, name: str) - bool: return name resume关于result字段有两个需要留意的语义细节仅从常规调用路径填充注释明确说明当通过Agent.structured_output调用时result为None因为该类方法直接返回类型化输出而非AgentResult事件支持反向回调顺序should_reverse_callbacks返回True即后注册的清理类回调会先执行适合做资源回收类逻辑。事件的实际构造发生在 agent.py 的流式主循环收尾处after_invocation_event AfterInvocationEvent( agentself, invocation_stateinvocation_state, resultagent_result )同时事件新增了resume字段当钩子把resume设为非 None 的 AgentInput 时agent 会用该输入自动重新发起一次完整调用含BeforeInvocationEvent。这正是仓库内置 goal 插件的循环机制vended_plugins/goal/plugin.py 中验证器在_after_invocation回调里读取event.resume来把校验反馈重新喂给 agent直到满足目标或达到max_attempts。AgentResult 能给你什么AgentResult 定义 是本次事件增强携带的核心载荷字段如下字段含义stop_reasonagent 停止处理的原因如正常结束、达到上限、checkpoint 等messageagent 生成的最后一条消息metrics处理期间收集的性能指标EventLoopMetricsstate来自事件循环的附加状态interrupts若用户提出中断则为中断列表structured_output指定structured_output_model时解析出的结构化输出checkpoint仅当stop_reason checkpoint时填充的持久化执行检查点此外还提供了两个便捷属性与序列化能力context_size/projected_context_size分别返回最近一次模型调用的上下文 token 数与下一次调用的预估 token 数来自metrics.latest_context_size与metrics.projected_context_size适合做上下文预算监控to_dict()/from_dict()支持把结果序列化为 JSON 并反序列化其中message中的二进制值如 ConverseredactedContentblob会通过会话持久化同款辅助函数做 base64 编解码见 agent_result.py。实战在钩子里读取最终结果from strands.hooks import HookProvider, HookRegistry from strands.hooks.events import AfterInvocationEvent class ResultLoggingHooks(HookProvider): def register_hooks(self, registry: HookRegistry) - None: registry.add_callback(AfterInvocationEvent, self.log_result) def log_result(self, event: AfterInvocationEvent) - None: if event.result is not None: print(fstop_reason{event.result.stop_reason}) print(fcontext_size{event.result.context_size})会话管理模块也依赖这一事件做同步SessionManager与SnapshotSessionManager均在AfterInvocationEvent上注册回调以保存会话状态session_manager.py、snapshot_session_manager.py升级后它们同样能拿到结果对象。多智能体Swarm 中断支持interrupts - swarm变更内容PR 1193 为 swarm 引入了中断支持。此前Graph已具备节点级中断能力而 swarm 在此版本补齐了同一原语使自组织协作团队中的任一节点都能提出中断并等待外部响应。源码实现Swarm 类 在初始化时创建独立的_interrupt_state并在节点被中断时通过_activate_interruptswarm.py同时管理 swarm 与节点两级中断状态self._interrupt_state _InterruptState() ... def _activate_interrupt(self, node: SwarmNode, interrupts: list[Interrupt]) - MultiAgentNodeInterruptEvent: self.state.completion_status Status.INTERRUPTED self._interrupt_state.interrupts.update({interrupt.id: interrupt for interrupt in interrupts}) self._interrupt_state.activate() return MultiAgentNodeInterruptEvent(node.node_id, interrupts)节点恢复执行时会从 swarm 的中断上下文还原该节点的messages、state与_interrupt_stateswarm.py实现中断→外部应答→原地续跑的完整闭环。中断结果同样会汇总进 SwarmResult 与MultiAgentResult的interrupts列表base.py。实战Swarm 的典型构造参数中断机制依托 swarm 的基础配置常用参数如下详见 swarm.pyfrom strands.multiagent import Swarm swarm Swarm( nodes[researcher, coder, reviewer], # 参与协作的 agent 节点 entry_pointresearcher, # 起始节点默认第一个 max_handoffs20, # 最大交接次数含交回用户 max_iterations20, # swarm 内最大节点执行次数 execution_timeout900.0, # 总执行超时秒 node_timeout300.0, # 单个节点超时秒 repetitive_handoff_detection_window0, # 重复交接检测窗口默认关闭 repetitive_handoff_min_unique_agents0, # 窗口内最少唯一 agent 数默认关闭 ) result swarm.run(调研并输出竞品分析报告)需要说明的是中断原语要求节点在需要人类确认时显式抛出/携带中断典型入口是BeforeNodeCallEvent钩子或 agent 节点内部的 interrupt本仓库的多智能体中断测试覆盖见 tests_integ/multiagent 下的相关用例如 swarm/graph 的中断续跑场景。Agent 核心修复无文本时也返回结构化输出 JSON变更内容PR 1290 修复了一个边界缺陷当 AgentResult 没有文本内容时__str__无法返回结构化输出。修复后只要调用时指定了structured_output_model即使模型的输出消息不包含文本块str(result)也会返回解析后的结构化 JSON。源码实现AgentResult.str的优先级顺序为interrupts存在 → 返回中断字典的字符串列表structured_output存在 → 返回model_dump_json()否则 → 拼接message.content中的text与citationsContent文本块。修复前当消息中没有任何文本块时__str__会走到第三条分支并返回空字符串导致结构化结果被吞掉修复后第二条分支在文本为空时依然生效。这也是structured_output字段存在的意义agent 主循环会把模型输出解析为structured_output_model指定的 Pydantic 模型并作为AgentResult.structured_output透出。实战直接消费结构化输出from pydantic import BaseModel from strands.agent import Agent class Extraction(BaseModel): title: str tags: list[str] agent Agent(model..., structured_output_modelExtraction) result agent.run(总结这篇文章) print(str(result)) # 现在必定输出 {title: ..., tags: [...]} 而非空串 print(result.structured_output.title)工具系统修复带组合关键字的损坏 tool spec变更内容PR 1301 修复了工具 schema 归一化中的一个缺陷当属性使用了 JSON Schema 组合关键字composition keywords时归一化逻辑会错误地为其补默认类型从而破坏合法 schema。源码实现组合关键字集合定义在 tools.py_COMPOSITION_KEYWORDS (anyOf, oneOf, allOf, not) JSON Schema composition keywords that define type constraints. Properties with these should not get a default type: string added.归一化函数normalize_prop与normalize_schematools.py的判断逻辑是若属性包含上述任一组合关键字则不再强制补type: string仅补充description$ref引用的属性则保持原样其类型由被引用的$def保证。工具注册侧的同一逻辑位于 registry.py。例如如下 schema 在修复前会被错误改写{ properties: { filter: { anyOf: [{ type: string }, { type: null }] } } }修复后filter保持anyOf结构不会因被强加type: string与anyOf冲突而导致工具 spec 非法。这一修复直接影响模型侧工具描述的质量schema 越合法模型对可选参数的处理越准确。会话管理分页导致 toolUse 缺失时移除残留 toolResult变更内容PR 1274 修复了会话管理session中的一个状态一致性问题当历史消息因分页pagination被截断、某条toolUse不在当前会话窗口内时与之配对的历史toolResult消息不再被保留。背景与源码佐证事件循环在流式收尾时会对message.content中每个toolUse生成对应的toolResult见 streaming.py 对不完整 tool use 块的容错处理。但在长会话 分页场景下模型返回的toolUseId可能指向已被分页截断的历史消息此时旧逻辑仍会追加一条孤立toolResult造成对话历史中出现有结果无调用的悬挂消息污染后续模型的上下文。修复后会话管理在还原/追加消息时会校验toolUse是否仍然存在缺失则不再附加对应toolResult保证会话窗口内消息成对且自洽。该行为与事件循环中仅对当前窗口内 tool use 执行工具的既有约定event_loop.py保持一致被过滤掉的 tool use 本来就不会执行其结果也不应残留。MCP 客户端关闭事件循环避免泄漏变更内容PR 1321 修复了 MCP 客户端生命周期管理客户端在关闭时正确关闭其事件循环。该 PR 同时引入了本版本唯一的新贡献者 davidpadbury。实战影响在使用 MCP 服务器如strands.tools中的 MCP 工具加载路径构建 agent 时close()之后若事件循环未关闭进程可能残留悬挂线程或 asyncio 循环在热加载、测试与长时间运行的 service 中尤其明显。修复后客户端关闭流程包含事件循环的显式关闭升级即获得更干净的资源回收行为。仓库中的 MCP 相关集成测试位于 tests_integ/mcp。Bidi 模块记录直接工具调用与 Python 版本兼容收窄变更内容Bidi双向会话模块在本版本有四项变更PR 1300修复直接工具调用direct tool call的记录确保直接发起的工具调用被正确写入消息历史PR 1307 / PR 1308测试与 mypy 清理提升该模块的类型检查与测试质量PR 1302移除 Python 3.11 专属特性使 Bidi 模块兼容更早的 Python 版本。源码佐证record_direct_tool_call是 Bidi Agent 构造参数 之一默认True控制是否在消息历史中记录直接工具调用工具执行与结果记录的语义见 bidi/agent/loop.py用户消息与工具结果会被记录增量delta消息不记录。PR 1302 移除 3.11 语法后Bidi 模块的可用 Python 版本下限与主 SDK 保持一致具体支持范围以仓库 pyproject.toml 声明的requires-python为准。文档与工程化docstrings 清理与 agent 文档目录两项other/feat变更服务于开发者体验PR 1284更新 docstrings 以消除文档构建警告说明本版本对 API 文档生成链路docstring → 站点文档做了清理公开 API 的文档质量更稳定PR 1312创建 agent.md 与 docs 文件夹为 SDK 引入结构化文档目录后续的 agent 使用指南有了统一落点对应站点文档体系中的 agent 指南。升级到 v1.20.0安装或锁定该版本注意仓库只读本文仅说明安装方式不涉及仓库改动pip install strands-agents1.20.0升级后建议依次验证三条核心路径钩子结果透传注册一个AfterInvocationEvent回调并断言event.result非空常规run/stream路径结构化输出对指定structured_output_model的 agent 执行一次不产出文本的调用确认str(result)返回 JSONSwarm 中断在 swarm 节点内提出中断确认SwarmResult.interrupts携带中断信息且节点可在应答后续跑。上述功能的实现文件与测试用例均在仓库内可查源码见 strands-py/src/strands对应单元与集成测试见 strands-py/tests 与 strands-py/tests_integ可作为升级回归的参考依据。赞分享人工智能大模型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.25.0 发布详解A2AAgent、图中断、S3 媒体源与结构化输出提示词定制strands agents Python SDK v1.25.0 发布详解A2AAgent、图中断、S3 媒体源与结构化输出提示词定制 本篇发布指南聚焦 s人工智能大模型AI AgentAgent 框架多智能体工具调用MCP 服务Strands Python SDK v1.9.1 版本解析Bedrock 内容块解耦、结构化输出回调与 MCP 遥测幂等修复Strands Python SDK v1.9.1 版本解析Bedrock 内容块解耦、结构化输出回调与 MCP 遥测幂等修复 Strandsstrands人工智能大模型AI AgentAgent 框架多智能体工具调用MCP 服务harness-sdk Python SDK v1.14.0 变更详解结构化输出、多智能体钩子与 MCP 连接管理harness sdk Python SDK v1.14.0 变更详解结构化输出、多智能体钩子与 MCP 连接管理 本指南围绕 python/v1.14.0人工智能大模型AI AgentAgent 框架多智能体工具调用MCP 服务创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考