
人工智能大模型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点击查看免费下载本文以仓库中的版本发布记录 site/src/content/changelog/sdk/python-v1.54.0.md 为核心骨架结合strands-py包内对应源码实现展开。读者将获得该版本 27 项变更的完整清单、5 项新特性的可直接落地的配置与代码示例以及模型层、上下文管理、委托机制等修复背后的源码级原理能够据此评估并平滑升级到 1.54.0。一、版本概览一次全量非破坏性更新strands-agents Python SDK v1.54.0 于 2026-08-27 发布发布标签为python/v1.54.0对应 PyPI 包strands-agents的 1.54.0 版本。本次发布全部 27 条变更的breaking标志均为false意味着 API 保持向后兼容已有 Agent 代码无需改动即可升级属典型的功能增量 稳定性修复版本。从变更类型统计5 项新特性feat、16 项缺陷修复fix、2 项工程维护chore、2 项社区/流程调整other、1 项测试加固test、1 项文档决策记录docs。按影响域划分最密集的改动集中在model模型层、context上下文管理、multiagent多智能体、persistence持久化与bidirectional-streamingBidi 双向流。完整变更清单如下PR 号取自发布记录可在仓库的 git 历史中追溯#类型影响域变更说明1othercommunity刷新依赖并隔离测试结果PR 39002othercommunity升级 dorny/paths-filter 3.0.2 → 4.0.3PR 39073fixmodelGemini 的 tool-use token 计入输入、thinking token 计入输出PR 38924fixmodels对 cachePoint 消息块改为告警并跳过而非抛出异常PR 39475testpersistence加固 Bedrock KB 集成测试PR 39546fixmodels/bedrock禁用 guardrail trace 时对拦截内容做脱敏处理PR 37727fixmodelAmazon Nova 模型工具结果中的 JSON 内容块转为文本PR 19858chorebidi整合开发配置PR 39609fixcommunity加固 Mantle 路由集成测试PR 395710featmodelsCacheConfig 新增 cache_key支持 key 路由型缓存提供商PR 394911fixci恢复 upload-metrics 的 always() 守卫PR 397012fixllamacppfinish_reason 之后补发尾部 usage 元数据块PR 395513fixtest-infra授予 Bidi 集成测试权限PR 397514fixbidi集成测试改用共享 Google API keyPR 397715fixopenai消息文档文件名追加 format 后缀PR 391216fixcontext/agent阻止 normalizer 原地修改消息历史PR 232617fixbedrock检测 Mantle 上下文溢出错误PR 397318fixtelemetry输出符合 OpenTelemetry semconv 规范的缓存用量属性PR 396419featrouting/multiagent新增可配置分类器路由策略PR 384620fixpython/multiagent简化 Agent 委托end_turn 支持内容块PR 396121chorepython更新 Bidi Bedrock 依赖PR 399722featmemory-py新增 FileMemoryStore 文件记忆存储PR 392523featpython/async向 Agent 调用注入外部取消信号PR 399924fixci空集成测试报告按 no-op 处理PR 400625docsteam记录 null 与 undefined 输入处理的决策PR 388926featpython/agentAgent 新增 session_id 属性PR 400727fixcontext缓存 token 计入上下文尺寸与压缩基线PR 3886二、新特性CacheConfig.cache_key——为 key 路由型缓存提供商打通显式键本版本最重要的模型层新特性是 models/model.py 中CacheConfig新增的cache_key字段它直接服务于 OpenAI、LiteLLM、Mistral 等以 key 为路由依据的提示词缓存提供商prompt-cache-routing provider。dataclass class CacheConfig: strategy: Literal[auto, anthropic] auto ttl: str | None None system_prompt_ttl: bool | str True cache_key: str | Literal[False] | None None # 新增 tools_ttl: bool | str | None None从源码注释可以梳理出cache_key的三态语义不设置默认 NoneSDK 按每次请求自动派生为strands-session_id。只要 Agent 挂载了 session manager同一 session 的多次重复运行就会共享同一个缓存前缀完全不需要用户管理 key设置为字符串显式钉住你自己的缓存键适合跨 session、跨进程共享同一段静态前缀的场景设置为False显式退出 key 路由缓存向提供商不传输任何缓存键。解析后的 key无论是自动派生还是手动指定都会被实际传输给提供商。值得注意的是该自动派生逻辑与本章节第五部分介绍的Agent.session_id属性形成了联动session_id一旦稳定可读缓存前缀也随之稳定从而让「会话续跑命中缓存」成为开箱即用的行为。相关实现分散在 models/openai.py、models/openai_responses.py、models/_openai_cache.py 与 models/mistral.py 中。三、新特性FileMemoryStore——以 Markdown 文件承载的持久化记忆记忆存储MemoryStore家族迎来第一个文件后端FileMemoryStorePR 3925。它由 strands-py/src/strands/vended_memory_stores/file_memory_store/store.py 实现核心思路是把知识以纯 Markdown 文件的形式存进统一的 Storage 接口并以关键词 token 重叠打分完成检索。3.1 存储布局与命名空间隔离FileMemoryStore建立在统一的 storage 抽象之上默认后端为LocalFileStorage落在./.strands/目录。构造函数会通过_resolve_namespace把存储键自动限定到memory/name/命名空间下raw_storage config.get(storage) or LocalFileStorage() self._storage: Storage _resolve_namespace(raw_storage, f{_STORAGE_NAMESPACE}/{self.name})这意味着名为agent-memory的 store 默认写入./.strands/memory/agent-memory/。命名空间隔离带来一个直接推论源码注释中已明确同一后端上名称不同的 store 互不干扰、可安全共存而名称相同的两个 store 会共享存储需要隔离时请换名字或换后端。这一点在 types.py 的FileMemoryStoreConfig文档字符串中有完整说明。3.2 配置项一览FileMemoryStoreConfig继承自MemoryStoreConfigtotalFalse主要参数包括参数类型/默认值说明name必填 strstore 名称同时决定memory/name/存储命名空间writablebool默认 True是否允许写入descriptionstr | Nonestore 描述供记忆注入与检索时展示max_search_resultsint | None默认 10单次检索最多返回的条目数storageStorage后端存储默认LocalFileStorage./.strands/extractionExtractionConfig | bool | None是否启用模型抽取见 3.4search()中的max_search_results校验值得一提当通过SearchOptions传入的值为 0 或负数时会抛出ValueError(max_search_results must be 1)防止出现空检索结果集。3.3 写入语义slug 键 追加合并add()的写入逻辑在 store.py文件名取自内容首行去掉 Markdown 标题符#后经_slugify转为 kebab-case截断到 50 字符超出部分用时间戳兜底为entry-ms若同名文件已存在新事实标题之后的各行会被追加到原文件末尾而不是覆盖追加过程由asyncio.Lock保护避免并发写入竞争。这种「标题即文件、事实即行」的布局与 3.4 节的 key-aware 抽取器配合使知识文件天然可读、可人工编辑、可版本管理。3.4 key-aware 抽取器复用既有主题标题FileMemoryStore内置了一个特殊的抽取器_create_key_aware_extractorstore.py。它基于ModelExtractor包装在抽取前先storage.list()列出全部已有文件名把标题# User preferences这类注入系统提示existing_keys await storage.list() headings [_basename(key).replace(-, ) for key in existing_keys] ... prompt ( f\n\nExisting topics: {, .join(headings)}. Reuse an existing topic heading when new facts belong to it. )即模型在抽取新事实时会优先复用已有主题标题而不是每轮都新造一个文件从而避免知识碎片化。抽取的输出契约是「只返回{content: string}的 JSON 数组首行为 Markdown 标题无值得记住的内容时返回[]」。extraction配置传True或只给trigger/filter时会自动装配这个抽取器传显式Extractor则完全由用户接管。3.5 接入示例from strands import Agent from strands.memory import MemoryManager from strands.vended_memory_stores.file_memory_store import FileMemoryStore memory_store FileMemoryStore(nameagent-memory) agent Agent( modelmodel, memory_managerMemoryManager(stores[memory_store], injectionFalse), )该示例同时是源码 docstring 中给出的官方用法FileMemoryStore(nameagent-memory)即可完成最小接入检索由MemoryManager注册的search_memory工具按关键词打分提供。四、新特性可配置分类器策略ClassifierStrategy与多智能体路由PR 3846 为模型路由ModelRouter引入了可配置的分类器策略ClassifierStrategy实现在 models/routing/classifier_strategy.py并通过 models/routing/init.py 与 models/init.py 对外导出。4.1 设计意图与约束该策略在候选模型之间做选择用一个专门的分类器模型必须支持结构化输出评估当前请求与各候选模型的证据返回_ClassifierSelection结构化结果。源码明确了几条关键约束分类会增加一次对显式配置模型的额外调用候选的声明顺序不参与分类决策候选的 name/description/metadata、最近一次请求文本、父 Agent 的文本指令都可能跨提供商边界传输不得包含密钥结构化父系统提示中的缓存点cachePoint等块会被省略——分类器收到的是重建的、有界上下文而非原始完整提示。4.2 构造参数参数默认值说明model必填执行分类的模型必须支持结构化输出system_promptSDK 输入复杂度策略分类路由策略原样发送、永不截断SDK 会追加强制性的隔离、候选索引与结构化输出规则timeout30.0秒分类等待上限max_message_charsSDK 默认从最近请求复制进分类器用户消息的最大字符数max_agent_instructions_charsSDK 默认从父 Agent 系统提示文本复制进分类上下文的最大字符数max_candidate_charsSDK 默认全部候选证据name/description/metadata 序列化的聚合字符预算其中max_candidate_chars的行为最严格证据从不截断序列化总长一旦超过预算选择流程直接抛出ValueError错误消息会同时报告实际字符数与预算值提示修剪候选描述或调高上限。4.3 失败降级语义源码对失败路径做了非常明确的规定分类失败告警并放弃选择ModelRouter回退到候选 0candidate zero被选中的候选后续调用失败策略拒绝再次选择让原始模型错误直接浮出水面不做切换嵌套路由器被视为不透明候选仅使用其包装层证据。这种「宁可不切、也不乱切」的保守语义保证了路由决策的可预期性——分类器抖动不会导致请求被反复重路由到不同模型。五、新特性Agent.session_id 属性与外部取消信号5.1 session_id会话身份的可读化PR 4007 为Agent新增了session_id属性实现在 strands-py/src/strands/agent/agent.pyproperty def session_id(self) - str: return self._session_id其赋值逻辑agent.py遵循「优先会话管理器、兜底随机短 ID」的原则self._session_id: str getattr(self._session_manager, session_id, None) or uuid.uuid4().hex[:8]挂载了 session manager 时直接透传 manager 的session_id保证同一会话跨调用稳定未挂载时回退为uuid.uuid4().hex[:8]的 8 位十六进制短 ID同时AgentMetadata也会携带session_idagent.py便于遥测与元数据追溯。该属性与CacheConfig.cache_key的自动派生strands-session_id直接联动是「会话续跑即命中缓存」的基础设施。5.2 外部取消信号注入PR 3999 面向 async 场景允许把外部的取消信号注入 Agent 调用使运行中的 Agent 循环可以被宿主程序如 CLI、Web 服务主动中断而不是只能依赖内部 token 预算或死循环检测。这是 Python async Agent 编排能力的一次补齐适合长时间运行的任务编排场景例如配合 strands-cli 的交互式终端取消操作。六、模型层修复深读Token 计量、缓存点与溢出检测6.1 Geminitool-use 计输入、thinking 计输出PR 3892 修正了 Gemini 的 token 计量口径tool-use token 计入输入input用量thinking token 计入输出output用量。此前这两类 token 的归属偏差会直接扭曲 usage 统计、成本核算与上下文占用评估。相关模型实现在 strands-py/src/strands/models/gemini.py由 models/init.py 的懒加载工厂暴露为GeminiModel。6.2 cachePoint 消息块从抛错到告警跳过PR 3947 调整了 Anthropic 兼容链路对消息中cachePoint块的处理遇到 cachePoint 消息块不再抛出异常而是发出警告并跳过该块。相关逻辑位于 models/anthropic.py 的_manage_cache_points及 cachePoint 相关处理路径anthropic.py。这一改动提升了模型返回内容对缓存点标记的容错性——模型偶发在消息层输出缓存点标记时请求不再整体失败。6.3 Amazon Nova工具结果中的 JSON 块转文本PR 1985 针对 Amazon Nova 模型Nova 系列不支持在工具结果tool results中直接携带 JSON 内容块SDK 现在会在进入请求前把 JSON 内容块序列化为文本保证工具调用链路的兼容性。6.4 Mantle 上下文溢出检测PR 3973 让 SDK 能够识别 Bedrock Mantle 服务的上下文溢出错误。models/_openai_errors.py 集中定义了溢出短语与正则# Providers phrase the token-budget overflow around model maximum differently: # OpenAI says exceed customer model maximum, Bedrock Mantle drops the qualifier. _CONTEXT_WINDOW_OVERFLOW_REGEX re.compile(rexceed(?:s|ed)?(?: customer)? model maximum)该文件把 OpenAI 兼容提供商常见的溢出表述context_length_exceeded、input length and max_tokens exceed context limit、exceeds the max_model_len等统一归类为OpenAIErrorKind中的context_overflow并特别指出Bedrock Mantle 会省略 customer 限定词exceed model maximum。溢出被正确识别后上下文管理器可据此触发压缩/降级流程而不是当作普通请求错误处理。Mantle 的基础路径解析与配置见 models/_openai_bedrock.py。6.5 llamacpp补发尾部 usage 元数据PR 3955 针对本地推理后端 llamacppmodels/llamacpp.py在流式输出到达finish_reason之后补发一个携带 usage 元数据的尾部块确保消费方如 token 统计、遥测能拿到完整的用量信息。同一文件中还包含 llamacpp 的上下文溢出错误识别逻辑。6.6 OpenAI 消息文档文件名追加 formatPR 3912 调整 OpenAI 兼容链路中消息文档message document的文件命名文件名末尾追加 format 后缀避免不同格式如文本与 JSON的文档在持久化时因同名而互相覆盖。七、上下文与委托修复深读归一化、缓存基线、end_turn 内容块7.1 normalizer 不再原地修改消息历史PR 2326 修复了上下文归一化器normalizer的一个隐患此前归一化过程可能原地修改in-place mutation消息历史导致同一份历史被多个下游消费者提示构建、缓存、压缩观察到被篡改后的状态。修复后归一化产生的是新对象原始消息历史保持不变避免跨组件间的隐性副作用。7.2 缓存 token 计入上下文尺寸与压缩基线PR 3886 修正上下文尺寸context-size与压缩compaction基线的计算口径已被缓存的 tokencached tokens现在同样计入上下文占用与压缩触发基线。此前缓存 token 被排除在统计之外可能导致上下文实际占用被低估、压缩触发被推迟。该改动与 agent/conversation_manager 下滑动窗口、摘要式会话管理器的溢出处理逻辑ContextWindowOverflowException、reduce_context配合使压缩决策更贴近真实占用。7.3 委托简化end_turn 接受内容块PR 3961 简化了多智能体委托agent delegation的结果回传。agent/_agent_delegation.py 中的_to_content_blocksL58-L70负责把委托工具AgentAsTool(delegateTrue)的ToolResult内容转换为ContentBlock列表其中 JSON 块会被序列化为文本与 TypeScript 版toContentBlocks行为对齐。随后在_on_after_tools钩子L166-L217中直接赋值event.end_turn end_turn_contentAgentDelegation插件在每个 Agent 上自动注册其核心语义包括单调用约束委托工具必须是一轮中唯一的工具调用混用其他工具会被取消并提示重试_on_before_toolsSDK_LAST 钩子顺序end_turn的提交发生在HookOrder.SDK_LAST保证其他钩子无法在提交后再使工具结果失效结构化输出跳过父 Agent 期望结构化输出时跳过委托回传空内容跳过委托结果无内容或全为空文本时不触发end_turn与有状态模型不兼容init_agent中检测到 stateful 模型搭配委托工具时直接抛ValueError——委托的提前退出会留下未闭合的函数调用。7.4 Bedrock guardrailtrace 关闭时的内容脱敏PR 3772 修复了 Bedrock guardrail 的一个信息泄露面当 guardrail trace追踪被禁用时被拦截blocked的内容现在会做脱敏处理redact避免原始敏感内容残留在日志或下游消息中。该修复同时落在 model 与 interventions 两个领域。八、遥测与工程维护8.1 OpenTelemetry semconv 缓存用量属性PR 3964 让遥测输出符合 OpenTelemetry 语义约定semconv的缓存用量属性。此前缓存命中/未命中、缓存读取等指标的自定义属性命名与行业标准不一致升级后下游可借助标准化的 OTel 查询直接聚合缓存效率。相关实现位于 strands-py/src/strands/telemetry 目录。8.2 CI、测试与依赖维护本版本包含一批工程层面的社区维护项均不影响运行时 APICI/依赖刷新依赖并隔离测试结果PR 3900、升级dorny/paths-filter3.0.2 → 4.0.3PR 3907、恢复 upload-metrics 的always()守卫PR 3970、空集成测试报告按 no-op 处理PR 4006测试加固Bedrock 知识库集成测试加固PR 3954、Mantle 路由集成测试加固PR 3957、Bidi 集成测试权限与共享 Google API keyPR 3975/3977工程配置Bidi 开发配置整合PR 3960、Bidi Bedrock 依赖更新PR 3997文档决策记录 null 与 undefined 输入处理的团队决策PR 3889属于 team/DECISIONS.md 决策体系。九、升级与验证建议由于本版本所有变更均为非破坏性breaking: false升级路径非常简单pip install -U strands-agents升级后可优先验证以下行为变化缓存命中为挂载了 session manager 的 Agent 配置CacheConfig(strategyauto)确认同一会话重复运行自动派生strands-session_id缓存键并命中文件记忆用FileMemoryStore(nameagent-memory)写入一条记忆检查./.strands/memory/agent-memory/下生成的 Markdown 文件再通过search_memory工具验证关键词检索路由为ModelRouter配置ClassifierStrategy观察分类失败时是否按设计回退到候选 0委托跑一条 orchestrator → specialistdelegateTrue链路确认子 Agent 的 JSON 结果被正确转成文本内容块并通过end_turn回传上下文压缩制造一次接近上限的长会话确认 cached tokens 已计入 context-size 基线、Mantle/OpenAI 兼容溢出能被归类为context_overflow并触发压缩。如需对照本次发布在仓库内的原始记录可直接查阅 site/src/content/changelog/sdk/python-v1.54.0.md对应 Python 实现位于 strands-py/src/strands 包内各模块TypeScript 版同步实现可参考 strands-ts/src 与 harness-ts/src。赞分享人工智能大模型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.47.0 变更深度解析Nova Sonic 加固、MCP 容错与内存存储迁移strands agents Python SDK v1.47.0 变更深度解析Nova Sonic 加固、MCP 容错与内存存储迁移 导读 本文围绕 str人工智能大模型AI AgentAgent 框架多智能体工具调用MCP 服务strands-agents Python SDK v1.4.0 技术解读MCP 链路追踪、max_tokens 恢复机制与 A2A 可配置请求处理器strands agents Python SDK v1.4.0 技术解读MCP 链路追踪、max_tokens 恢复机制与 A2A 可配置请求处理器 导读人工智能大模型AI AgentAgent 框架多智能体工具调用MCP 服务上一篇5分钟掌握TRL训练报告关键指标解析与实用指南下一篇3行代码提升大模型效果trl最佳采样技术(Best-of-N)实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考