人工智能大模型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.22.0 发布说明2026-01-13 发布展开系统梳理该版本在 Agent 执行层、Bedrock 模型层、MCP 工具链与工程化方面的全部变更并结合 strands-py 仓库源码深入解析每个更新点的底层实现与使用方式。读完本文你将掌握 v1.22.0 中 AgentBase 协议接口的契约、guardrail_latest_message与invocation_state的正确用法以及 MCP 资源操作和并发保护背后的机制便于评估升级收益并安全迁移。版本概览一次无破坏性变更的增量发布v1.22.0 是 strands-agents Python SDK 的一次全量增量发布所有条目均标记为breaking: false意味着升级不会破坏既有调用方式。本次发布共包含 21 条变更按类型分布为功能feat5 条、修复fix7 条、其他other7 条、文档docs1 条、工程维护chore2 条按领域areas划分主要覆盖agent、model、mcp、tool四大块并迎来 4 位新贡献者aiancheruk、emattiza、schleidl、tirth14。从版本发布说明可以清晰看到本版本的三个主线Agent 执行层规范化——引入AgentBase协议接口、向模型传递invocation_state、为并行调用增加并发保护Bedrock 模型层精细化——新增guardrail_latest_message选项并持续完善 Guardrail 内容包装逻辑MCP 工具链补全——在 MCP Tools 中加入资源Resource操作并修复后台线程 contextvars 传播与错误处理中的字符串格式化问题。下文按领域逐一展开并在关键节点给出源码证据。Agent 层AgentBase 协议、invocation_state 与并发保护引入 AgentBase Protocol 作为统一接口契约本次发布最重要的结构性变更来自 PR 1126引入AgentBaseProtocol 作为 agent 类必须实现的接口。在 strands-py/src/strands/agent/base.py 中可以看到它的定义runtime_checkable class AgentBase(Protocol): Protocol defining the interface for all agent types in Strands. This protocol defines the minimal contract that all agent implementations must satisfy. 该协议使用typing.Protocol并标记为runtime_checkable声明了三个核心方法契约invoke_async(prompt, **kwargs) - AgentResult异步执行 agent__call__(prompt, **kwargs) - AgentResult同步执行入口stream_async(prompt, **kwargs) - AsyncIterator[Any]流式执行产出事件序列。从源码结构看协议的最小契约覆盖了同步调用、异步调用与流式调用三种形态Agent主类通过多重继承同时实现AgentBase与LocalAgent见 strands-py/src/strands/agent/agent.py而多智能体场景中的A2AAgent同样实现了该协议见 strands-py/src/strands/agent/a2a_agent.py。同时AgentBase已加入包级导出在 strands-py/src/strands/init.py 与 strands-py/src/strands/agent/init.py 中均可在顶层from strands import AgentBase直接导入。这一变更的价值在于任何实现了该协议的自定义 agent 类都可以在类型层面与框架的多智能体编排、hook 事件系统互操作例如 strands-py/src/strands/hooks/events.py 中的BeforeInvocationEvent等事件即以 agent 为载荷协议的引入让这些跨模块引用有了可静态检查的统一类型。将 extra command content 作为 prompt 提供给 agentPR 1419 实现了一个实用的功能增强把额外的命令内容extra command content直接作为 prompt 传给 agent。这在 CLI / 脚本驱动场景下非常有用——调用方可以把命令行上下文、环境信息或附加指令追加进模型输入而不必手动拼装消息历史。结合 strands-py/src/strands/agent/agent.py 中invoke_async的签名可以看到调用入口接收invocation_state与各类转发参数该功能使外部命令内容能够作为自然语言提示进入 agent 的执行循环。向模型提供商传递 invocation_statePR 1414 让invocation_state可以一路透传到模型提供商。在 strands-py/src/strands/agent/agent.py 中invoke_async的invocation_state参数被描述为“通过事件循环透传的附加参数”Additional parameters to pass through the event loop同步入口__call__strands-py/src/strands/agent/agent.py同样支持。从 strands-py/src/strands/_middleware/README.md 的说明可以推断其语义演进invocation_state是每次调用per-invocation的状态字典它与messages的区别在于——messages在构建 middleware 上下文时会被深拷贝而invocation_state以引用方式共享是 hook 与 event loop 读写活动状态如 agent 引用、取消信号等的载体见 strands-py/src/strands/agent/_agent_as_tool.py。v1.22.0 将其进一步延伸至模型提供商意味着中间件、hook 写入的状态可以在模型请求构造阶段被读取为自定义请求参数注入打开了通道。并发保护防止并行调用破坏 agent 状态PR 1453 为 agent 增加了并发保护机制避免并行调用并发写入导致 agent 状态损坏。其实现位于独立的 strands-py/src/strands/agent/_concurrency.py核心是_ConcurrencyController见 strands-py/src/strands/agent/agent.py 的实例化。在 strands-py/src/strands/agent/agent.py 中可以看到执行流程begin(idempotency_token)在调用开始时登记并返回 token执行完成或异常后分别调用complete(..., result...)/complete(..., error...)当并发模式为THROW时strands-py/src/strands/agent/agent.py会在收尾时release_lock()释放并发锁。控制器暴露mode见 strands-py/src/strands/agent/_concurrency.py对应 agent 的concurrent_invocation_mode配置。这意味着如果你的业务场景可能对同一 agent 实例发起并发调用例如多个后台任务共享一个 agentv1.22.0 之后可以选择“抛错”或“排队”等策略从框架层面杜绝状态竞态。Bedrock 模型层guardrail_latest_message 与 Guardrail 内容包装新选项 guardrail_latest_messagePR 1224 为 Bedrock 模型提供商新增了guardrail_latest_message配置项。在 strands-py/src/strands/models/bedrock.py 的BedrockConfig文档中其含义为Flag to send only the latest user message to guardrails. Defaults to False.字段类型为bool | Nonestrands-py/src/strands/models/bedrock.py默认False即默认情况下沿用原有行为对所有消息应用 Guardrail 包装。底层实现定位最后一条含文本/图像的用户消息该选项的实现在消息格式化阶段。_format_bedrock_messagesstrands-py/src/strands/models/bedrock.py会预先调用_find_last_user_text_message_indexstrands-py/src/strands/models/bedrock.py从消息列表末尾向前查找最后一条包含文本或图像内容的 user 消息def _find_last_user_text_message_index(self, messages: Messages) - int | None: for idx, msg in reversed(list(enumerate(messages))): if msg[role] user and any(text in cb or image in cb for cb in msg.get(content, [])): return idx return None随后strands-py/src/strands/models/bedrock.py当消息索引等于该位置时文本内容被包装为{guardContent: {text: {text: ...}}}图像内容则先校验格式是否在 Bedrock Guardrail 支持的枚举内GuardrailConverseImageFormat不支持的图像格式会打印警告并跳过包装。这个实现的精妙之处在于即使工具执行循环在用户消息之后追加了toolResultrole 同样为 user也能准确命中真正的用户文本消息源码注释明确指出这一点见 strands-py/src/strands/models/bedrock.py。对于多轮工具调用场景这能显著降低 Guardrail 调用成本并避免对工具结果做不必要的安全审查。使用示例from strands.models.bedrock import BedrockModel model BedrockModel( model_idglobal.anthropic.claude-sonnet-4-6, guardrail_idyour-guardrail-id, guardrail_latest_messageTrue, # 仅将最后一条用户文本/图像消息送入 Guardrail )注意guardrail_latest_message只影响 Guardrail 内容包装的目标消息guardrail_id、guardrail_trace、guardrail_version、guardrail_redact_input/output等选项的语义不变完整字段见 strands-py/src/strands/models/bedrock.py。Bedrock 相关联动修复同一版本还包含一项“make calculator tool more robust to LLM output variations”PR 1445scope: integ集成测试中的计算器工具被加固以容忍大模型输出格式的变化。这属于工具层健壮性改进与模型层变更相互配合减少模型输出不规范时的解析失败。MCP 工具链资源操作、contextvars 传播与错误修复新增 MCP 资源Resource操作PR 1117 在 MCP Tools 中加入了资源操作能力补齐了 MCP 协议中 tools/prompts 之外的重要维度。在 strands-py/src/strands/tools/mcp/mcp_client.py 中可以看到三个新的同步 APIlist_resources_sync(pagination_tokenNone) - ListResourcesResultstrands-py/src/strands/tools/mcp/mcp_client.py列出 MCP 服务器当前可用的资源支持分页 tokenread_resource_sync(uri) - ReadResourceResultstrands-py/src/strands/tools/mcp/mcp_client.py按 URI 读取资源内容兼容字符串与AnyUrl两种传参list_resource_templates_sync(pagination_tokenNone) - ListResourceTemplatesResultstrands-py/src/strands/tools/mcp/mcp_client.py列出资源模板模板定义的是可动态访问资源的 URI 模式。实现上这些方法均在后台线程会话_background_thread_session上通过_invoke_on_background_thread执行异步调用并同步等待结果与 MCP 客户端整体“连接运行在后台线程”的架构保持一致见 strands-py/src/strands/tools/mcp/mcp_client.py 的模块说明。此外消息内容映射也支持嵌入资源TextResourceContents见 strands-py/src/strands/tools/mcp/mcp_client.pyagent 可以直接消费 MCP 服务器返回的资源内容。修复 contextvars 向后台线程的传播PR 1444 修复了contextvars 未能传播到后台线程的问题scope: mcp。由于 MCP 客户端连接运行在后台线程若 contextvars如请求 ID、trace ID、用户上下文没有显式复制到该线程将导致异步上下文中读取不到调用方的上下文变量进而影响日志关联与中间件行为。该修复确保通过_invoke_on_background_thread发起的调用能继承调用方线程的 contextvars。修复 MCP 客户端错误处理中的字符串格式化错误PR 1446scope: mcp修复了 MCP 客户端错误处理路径中的字符串格式化问题。这类问题通常表现为占位符与参数数量不匹配导致的TypeError或日志输出错乱会让真实的 MCP 连接/调用错误被掩盖。修复后错误信息能够正确渲染便于定位 MCP 服务器异常。多模态Bidi模型导出与稳定性调整本版本对 Bidi双向实时模型做了一组调整导出 BidiGeminiLiveModel 与 BidiOpenAIRealtimeModelPR 1383将两种实时多模态模型加入包的__init__顶层导出使from strands import BidiGeminiLiveModel这类导入成为官方支持的入口简化使用方代码bidi - async - 移除取消调用PR 1357在异步路径中移除了一个多余的取消调用避免取消信号在异步执行中被错误触发bidi - 将 Python 3.12 检查移至 nova sonic 模块PR 1439把 3.12 版本兼容性检查从通用路径收敛到 nova sonic 专属模块降低对其他模型的误伤可能。Bidi 相关模块位于 strands-py/src/strands/models 目录下。若你的项目使用实时语音/流式多模态交互建议升级后验证异步会话的取消行为与 3.12 环境的导入路径。修复与健壮性模型导入、非流式响应与 Gemini 异常修复可选导入模型的 import 错误PR 1384此前某些模型在可选依赖未安装时会在导入阶段抛错v1.22.0 修复了这类导入错误让模型模块在缺少可选依赖时也能被安全导入用户只有在实际使用对应模型时才需要安装相关依赖修复 Gemini 模型 UnboundLocal 异常PR 1420scope: gemini修复了一个因局部变量在分支中未初始化而触发的UnboundLocalError修复 LiteLLM 非流式响应处理PR 512针对 issue #477 修复 LiteLLM 在非流式响应场景下的处理逻辑保证streamingFalse时响应解析正确。这三项修复都属于“让更多模型组合开箱即用”的范畴尤其对使用 Gemini、LiteLLM 聚合层或按需安装模型依赖的用户直接受益。工程化与文档依赖维护、安全声明与发布流程更新 GitHub agent action 引用 S3_SESSION_BUCKETPR 1418type: docs文档/CI 配置中的 GitHub agent action 改为引用S3_SESSION_BUCKET环境变量使会话存储指向 S3 桶适配使用 S3 持久化会话的场景新增 Security.mdPR 1454为仓库补充安全策略文档仓库根目录已有 SECURITY.md更新发布说明 SOPPR 1456type: chore完善发布说明的标准操作流程本 changelog 的结构sdk/language/version/tag/date/entries/newContributorsfrontmatter即这一 SOP 的产物依赖范围放宽pytest 允许范围从8.0.0,9.0.0放宽至8.0.0,10.0.0PR 1161Sphinx 从5.0.0,9.0.0放宽至5.0.0,10.0.0PR 1426均为开发依赖的兼容性扩展更新至 Opus 4.5PR 1471项目内部模型引用更新至 Claude Opus 4.5。升级建议与总结v1.22.0 是一次无破坏性变更的版本但包含若干值得关注的行为增强点若使用 Bedrock Guardrail 且关注成本/延迟开启guardrail_latest_messageTrue仅对最后一条用户文本/图像消息做 Guardrail 包装多轮工具调用场景收益尤其明显底层定位逻辑见 strands-py/src/strands/models/bedrock.py若实现自定义 agent 类遵循AgentBase协议同步/异步/流式三入口即可与框架类型系统互操作协议定义见 strands-py/src/strands/agent/base.py若存在并发调用同一 agent 的场景利用新增的并发保护机制strands-py/src/strands/agent/_concurrency.py配置concurrent_invocation_mode避免状态竞态若深度使用 MCP 服务器可借助list_resources_sync/read_resource_sync/list_resource_templates_sync直接消费服务器资源见 strands-py/src/strands/tools/mcp/mcp_client.py并确认升级后 contextvars 传播与错误信息渲染正常。整体来看v1.22.0 的变更体现了“协议化接口 精细化的模型控制 完整的 MCP 能力”三条演进主线既有面向框架开发者的结构性调整AgentBase也有面向生产用户的实用开关guardrail_latest_message还有面向工具生态的能力补全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点击查看免费下载相关推荐MCP Python SDK 协议版本协商指南mode、server/discover 与 prior_discover 实战详解MCP Python SDK 协议版本协商指南 mode 、 server/discover 与 prior_discover 实战详解 本指南围绕官方 Py人工智能MCP 服务MCP ClientsNode-RED Dashboard v1.22.0 版本发布交互优化与组件增强Node RED Dashboard v1.22.0 版本发布交互优化与组件增强 Node RED Dashboard 是 Node RED 可视化工具中最重Nerfstudio ns-train 完全指南模型训练命令行的解析与实战配置Nerfstudio ns train 完全指南模型训练命令行的解析与实战配置 ns train 是 Nerfstudio 训练神经辐射场NeRF与高斯泼人工智能大模型AI AgentAgent 框架多智能体工具调用MCP 服务创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考