構(gòu)化輸出、多智能體鉤子與 MCP 連接管理)
人工智能大模型AI AgentAgent 框架多智能體工具調(diào)用MCP 服務(wù)【免費下載鏈接】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 變更日志 展開系統(tǒng)梳理 Strands Agents Python SDK 1.14.0 的 16 項變更覆蓋結(jié)構(gòu)化輸出進(jìn)入主 Agent 循環(huán)、實驗性 AgentConfig 工具管理、多智能體鉤子與序列化、LiteLLM 推理控制、Bedrock 限流重試等核心能力。閱讀完本文你將掌握本次版本中每個新特性/修復(fù)的 API 用法、底層實現(xiàn)原理以及如何在自己的 Agent 應(yīng)用中落地這些能力。版本概覽與變更全景Strands Agents Python SDK 1.14.0 發(fā)布于 2025-10-29共包含 16 項變更含 6 個 feature、2 個 fix 與若干重構(gòu)/測試清理全部為非破壞性變更breaking: false可安全升級。按領(lǐng)域劃分領(lǐng)域變更類型modelLiteLLM start/stop reasoning 支持#947othertool實驗性 AgentConfig 工具管理#935feattelemetry/otelinvoke_agent span 改為 INTERNAL spanKind#1055fixmultiagent多智能體鉤子 序列化/反序列化#1070featstructured-output結(jié)構(gòu)化輸出進(jìn)入 Agent 循環(huán)#943featmodelBedrock ThrottlingException 重試修復(fù)#1096fixmcpToolProvider 管理的實驗性 Agent 連接#895featmodel最新消息含 ToolUse 時跳過模型調(diào)用#1068feattool直接工具調(diào)用禁止 interrupt#1097、無效工具用法發(fā)送時轉(zhuǎn)換#1091other/fixmodelLiteLLM 結(jié)構(gòu)化輸出處理增強(qiáng)#1021fixmisc無 tool_use 時不中斷退出#1087、MCP elicitation#1094、PR size labeler#1082—本次版本還迎來了兩位新貢獻(xiàn)者mr-lee#935與 Arindam200#1021。結(jié)構(gòu)化輸出成為 Agent 循環(huán)的一等公民v1.14.0 最核心的變化#943現(xiàn)在只需在創(chuàng)建 Agent 或調(diào)用時直接傳入structured_output_model。新 API 用法from pydantic import BaseModel from strands import Agent class WeatherReport(BaseModel): city: str temperature_c: float conditions: list[str] # 方式一構(gòu)造 Agent 時聲明默認(rèn)輸出模型 agent Agent( modelanthropic/claude-sonnet-4-5, tools[web_search], structured_output_modelWeatherReport, ) # 方式二單次調(diào)用時覆蓋默認(rèn)模型 result await agent.run( 查詢上海的天氣, structured_output_modelWeatherReport, structured_output_prompt請以 JSON 結(jié)構(gòu)返回天氣信息, ) weather result.structured_output # 直接拿到 WeatherReport 實例相關(guān)簽名定義見 agent.pyrun()與run_async()均新增了structured_output_model與structured_output_prompt兩個參數(shù)后者可覆蓋 Agent 級默認(rèn)提示詞。底層實現(xiàn)真實工具而非旁路魔法與許多 SDK 把結(jié)構(gòu)化輸出做成隱藏的解析層不同Strands 將其實現(xiàn)為一個真實的 AgentTool。核心類StructuredOutputTool位于 structured_output_tool.py構(gòu)造時接收一個 PydanticBaseModel子類通過convert_pydantic_to_tool_spec()將其轉(zhuǎn)換為工具 schema并帶緩存_TOOL_SPEC_CACHE避免重復(fù)轉(zhuǎn)換工具描述被強(qiáng)制改寫為should only be invoked as the last and final tool before returning the completed result引導(dǎo)模型在完成任務(wù)后最后一次調(diào)用它工具名即 Pydantic 模型類名便于模型理解輸出契約。運行期狀態(tài)由StructuredOutputContext管理_structured_output_context.py它負(fù)責(zé)register_tool/cleanup在 Agent 循環(huán)開始/結(jié)束時向 ToolRegistry 注冊或移除結(jié)構(gòu)化輸出工具set_forced_mode(tool_choice)當(dāng)需要強(qiáng)制模型輸出時可注入 tool_choice 強(qiáng)制調(diào)用store_result/get_result/extract_result按 tool_use_id 暫存并取回解析結(jié)果供循環(huán)結(jié)束后寫入AgentResult.structured_output。schema 轉(zhuǎn)換邏輯位于 structured_output_utils.py支持嵌套 Pydantic 模型、$defs引用展開等復(fù)雜結(jié)構(gòu)。同時LiteLLM 模型提供器也增強(qiáng)了結(jié)構(gòu)化輸出處理#1021 中實現(xiàn)了structured_output()當(dāng)?shù)讓幽P椭С謗esponse_schema時走原生結(jié)構(gòu)化生成路徑supports_response_schema判斷否則自動回退到工具調(diào)用路徑_structured_output_using_tool保證跨模型行為一致。實驗性 AgentConfig從 JSON 聲明式創(chuàng)建 Agent由新貢獻(xiàn)者 mr-lee 提交的 AgentConfig。支持的配置字段配置文件是一個 JSON 對象通過內(nèi)置的 JSON Schema 校驗AGENT_CONFIG_SCHEMA使用預(yù)編譯的jsonschema.Draft7Validator提升性能字段類型說明namestring | nullAgent 名稱默認(rèn)nullmodelstring | null模型 ID不指定時使用默認(rèn)模型promptstring | null系統(tǒng)提示詞為 Agent 提供高層上下文toolsarraystring工具列表文件路徑、Python 模塊名或文件中tool注解的函數(shù)注意additionalProperties: False未知字段會被拒絕。使用方式from strands.experimental.agent_config import config_to_agent # 從文件創(chuàng)建支持 file:// 前綴 agent config_to_agent(/path/to/config.json) # 從字典創(chuàng)建 config { model: anthropic.claude-3-5-sonnet-20241022-v2:0, tools: [calculator, path/to/my_tool.py], } agent config_to_agent(config) # 配置聲明式的工具加載不覆蓋所有場景 # 需要構(gòu)造參數(shù)的復(fù)雜工具仍需代碼實例化后手動注冊 agent.tool_registry.process_tools([ToolWithConfigArg(HttpsConnection(localhost))])config_to_agent()支持傳入**kwargs透傳給 Agent 構(gòu)造器文件不存在拋FileNotFoundError非法 JSON 拋json.JSONDecodeError校驗失敗或工具加載失敗拋ValueError。從源碼結(jié)構(gòu)看該能力被設(shè)計為實驗性入口strands/experimental命名空間正式化之前 API 可能調(diào)整。多智能體鉤子與狀態(tài)序列化#1070 為多智能體編排器補(bǔ)齊了兩項能力完整的生命周期鉤子以及可序列化的編排器狀態(tài)。多智能體生命周期鉤子鉤子事件定義在 hooks/events.py核心事件包括MultiAgentInitializedEvent編排器初始化完成攜帶source: MultiAgentBaseBeforeMultiAgentInvocationEvent編排器整體調(diào)用前觸發(fā)AfterMultiAgentInvocationEvent編排器整體調(diào)用后觸發(fā)BeforeNodeCallEvent/AfterNodeCallEvent單個節(jié)點Agent 或子編排器調(diào)用前后觸發(fā)。測試用例 test_multi_agent_hooks.py 驗證了 Swarm 與 Graph 兩種編排器的完整鉤子生命周期Swarm 依次觸發(fā) initialized → before node → after node → before invocation → after invocation 等事件Graph 則在節(jié)點級事件之上疊加編排級事件。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模塊已標(biāo)記 Deprecated見 experimental/hooks/multiagent/events.py并提示使用strands.hooks新代碼應(yīng)直接導(dǎo)入新命名空間。編排器狀態(tài)序列化同一 PR 在 multiagent/base.py 為MultiAgentBase新增了serialize_state()與deserialize_state(payload)兩個接口snapshot orchestrator.serialize_state() # 返回 JSON 可序列化的狀態(tài)字典 orchestrator.deserialize_state(snapshot) # 從會話字典恢復(fù)編排器狀態(tài)從源碼結(jié)構(gòu)看基類以raise NotImplementedError占位由具體編排器Graph、Swarm子類實現(xiàn)用于支持會話持久化與斷點恢復(fù)場景。NodeResultbase.py也提供了to_dict()/from_dict()統(tǒng)一了 Agent 結(jié)果與嵌套 MultiAgentResult 的 JSON 往返表示。MCPToolProvider 管理的 Agent 連接與 elicitation實驗性 Agent 托管連接#895此前 MCP 客戶端需要開發(fā)者手動創(chuàng)建并注冊工具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的一個實現(xiàn)它通過load_tools()暴露 MCP 工具并利用 consumer 計數(shù)管理連接引用。而Agent的tools參數(shù)agent.py接受ToolProvider實例實現(xiàn)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 覆蓋了連接復(fù)用test_can_reuse_mcp_client、超時下連接穩(wěn)定性test_mcp_client_connection_stability_with_client_timeout、內(nèi)嵌資源test_mcp_client_embedded_resources_with_agent等關(guān)鍵場景。MCP elicitation#1094同一迭代周期還加入了 MCP elicitation#1094支持——即模型在調(diào)用 MCP 工具前可先通過引出流程獲取所需參數(shù)。這通常表現(xiàn)為在工具調(diào)用前插入一輪詢問式交互用于補(bǔ)充上下文不足的參數(shù)。該能力與 ToolProvider 連接管理配合共同完善 MCP 工具鏈的交互閉環(huán)。LiteLLM 推理reasoning控制與流式處理#947通過LiteLLMConfig透傳參數(shù)from strands.models.litellm import LiteLLMModel model LiteLLMModel( model_idopenai/o1-mini, # 或 anthropic/claude-sonnet-4-5 等任意 LiteLLM 支持的模型 params{ max_tokens: 4096, # 推理控制參數(shù)在此透傳如 reasoning_effort / budget_tokens 等 }, streamTrue, )值得指出的是LiteLLM 提供器對流式輸出的處理已經(jīng)相當(dāng)完善_process_choice_contentlitellm.py會從響應(yīng)塊中識別reasoning_content并將其作為獨立的reasoning_content數(shù)據(jù)流事件輸出對于 Gemini 推理模型還會提取reasoningContent.reasoningText生成 thinking 塊并將 thought signature 嵌入工具調(diào)用 ID 中_THOUGHT_SIGNATURE_SEPARATOR機(jī)制見 litellm.py。這意味著升級到 1.14.0 后推理模型的思考過程與最終回答可以在流式事件中分別消費。Agent 循環(huán)的穩(wěn)健性修復(fù)本版本有一組針對 Agent 主循環(huán)的健壯性修復(fù)值得單獨說明跳過冗余模型調(diào)用#1068當(dāng)最新一條消息已包含 ToolUse時Agent 循環(huán)會直接執(zhí)行工具而跳過模型調(diào)用避免重復(fù)把工具調(diào)用序列回傳給模型造成浪費。這在高頻工具調(diào)用場景下能顯著減少 token 消耗與延遲。無 tool_use 時不中斷退出#1087修復(fù)了一個邊界情況當(dāng)循環(huán)中沒有任何tool_use需要執(zhí)行時例如模型回復(fù)純文本或空調(diào)用不再提前 bail out中斷退出而是讓循環(huán)按正常路徑收斂到最終結(jié)果避免因沒有工具結(jié)果而異常終止。無效工具用法延遲轉(zhuǎn)換#1091工具用法的規(guī)范化transform時機(jī)從檢測到無效用法時立即處理改為發(fā)送給模型時再轉(zhuǎn)換。這樣中間狀態(tài)保持原始語義只在與模型交互的邊界上做一次統(tǒng)一轉(zhuǎn)換減少狀態(tài)漂移。直接工具調(diào)用禁止 interrupt#1097當(dāng)通過Agent.run_tools()等入口直接調(diào)用工具不經(jīng)模型決策時interrupt 不再被允許——因為此時沒有模型上下文可恢復(fù)中斷語義不成立。這屬于行為約束而非新功能。OpenTelemetryinvoke_agent span 語義修正#1055 修正了 Agent 調(diào)用鏈路的 OpenTelemetry span 語義invoke_agentspan 的span_kind從默認(rèn)值改為SpanKind.INTERNAL。對應(yīng)實現(xiàn)位于 tracer.pyspan self._start_span( finvoke_agent {agent_name}, attributesattributes, span_kindtrace_api.SpanKind.INTERNAL, # 內(nèi)部調(diào)用而非 CLIENT/SERVER )該 span 攜帶gen_ai.agent.name、gen_ai.request.model、gen_ai.agent.tools等屬性tracer.py。語義修正后Agent 編排過程在 trace 中被正確歸類為應(yīng)用內(nèi)部操作避免與外部模型/服務(wù)調(diào)用SpanKind.CLIENT見 tracer.py混淆從而讓依賴 span kind 的采樣器、可視化與成本分析工具能更準(zhǔn)確地識別 Agent 調(diào)用。Bedrock 限流Throttling重試修復(fù)#1096 修復(fù)了 Bedrock 模型提供器對限流異常的識別此前僅匹配部分大小寫變體導(dǎo)致某些 Throttling 響應(yīng)被當(dāng)作普通錯誤處理而非可重試的限流。修復(fù)后的邏輯位于 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會被上層重試機(jī)制識別并觸發(fā)退避重試而其他異常如上下文溢出會映射為ContextWindowOverflowException則走各自路徑。同一文件中還包含工具結(jié)果回合分離_separate_tool_result_turns針對 Bedrock ValidationException與 guardrail 內(nèi)容脫敏等配套處理bedrock.py共同保證生產(chǎn)環(huán)境下的 Bedrock 調(diào)用穩(wěn)定性。其他值得注意的工程改動interrupt docstring 格式修復(fù)#1074修正interrupt相關(guān)文檔字符串的排版純文檔性質(zhì)集成測試清理#1045interrupts 集成測試移除asyncio標(biāo)記PR size labeler#1082倉庫 CI 新增 PR 規(guī)模自動打標(biāo)幫助維護(hù)者按變更規(guī)模分級評審。升級建議與注意事項結(jié)構(gòu)化輸出如果你在使用Agent.structured_output()方法建議遷移到run(..., structured_output_model...)參數(shù)形式舊方法已標(biāo)記 deprecatedagent.py多智能體鉤子若你依賴strands.experimental.hooks.multiagent請遷移至strands.hooks舊模塊會觸發(fā) DeprecationWarningAgentConfig屬于實驗性 APIstrands.experimental工具加載僅支持聲明式文件路徑/模塊名/tool 函數(shù)需要構(gòu)造參數(shù)的復(fù)雜工具需在創(chuàng)建后手動注冊推理模型LiteLLM 提供器的推理控制與思考流事件需要streamTrue才能完整觀測MCP 托管連接MCPClient作為ToolProvider傳入 Agent 時連接生命周期由 Agent 托管注意 consumer 計數(shù)語義同一客戶端可被多個 Agent 共享見test_can_reuse_mcp_client。本版本整體聚焦于讓結(jié)構(gòu)化輸出、多智能體編排與 MCP 工具鏈真正可生產(chǎn)化同時通過一系列循環(huán)穩(wěn)健性修復(fù)與可觀測性修正降低了長時運行 Agent 的失敗率。建議結(jié)合 tests_integ/mcp 與 tests/strands/hooks 下的集成/單元測試進(jìn)一步理解各特性的邊界條件與預(yù)期行為。贊分享人工智能大模型AI AgentAgent 框架多智能體工具調(diào)用MCP 服務(wù)【免費下載鏈接】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點擊查看免費下載相關(guān)推薦從 harness-sdk TypeScript SDK v0.5.0 看多智能體組件、結(jié)構(gòu)化輸出與 MCP 客戶端重構(gòu)從 harness sdk TypeScript SDK v0.5.0 看多智能體組件、結(jié)構(gòu)化輸出與 MCP 客戶端重構(gòu) 本文基于 harness sdk 倉庫人工智能大模型AI AgentAgent 框架多智能體工具調(diào)用MCP 服務(wù)MCP Python SDK 結(jié)構(gòu)化輸出完全指南返回類型注解即輸出 SchemaMCP Python SDK 結(jié)構(gòu)化輸出完全指南返回類型注解即輸出 Schema 導(dǎo)讀 本指南聚焦 Model Context ProtocolMCPPy人工智能MCP 服務(wù)MCP ClientsMCP Ruby SDK輸入輸出模式詳解處理結(jié)構(gòu)化數(shù)據(jù)的最佳實踐MCP Ruby SDK輸入輸出模式詳解處理結(jié)構(gòu)化數(shù)據(jù)的最佳實踐 MCP Ruby SDK是Model Context Protocol的官方Ruby開發(fā)工具M(jìn)CP 服務(wù)MCP Clients人工智能工具調(diào)用創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考