Microsoft Agent Framework1.25收緊MCP探索與工作流共用:Python升級要改什麼?

Microsoft Agent Framework1.25調整MCP探索、工作流授權與會話。理解100頁和1000項上限、30秒請求預設、Python3.11及跨身份升級條件。

Share
Microsoft Agent Framework官方品牌橫幅,淺色背景中央是標誌與產品名稱
Microsoft Agent Framework官方品牌橫幅,非1.25工具探索介面。圖片來源:官方程式庫。

把同一個代理接給多位使用者時,程式需要分清誰的會話、誰的工具權限,以及一個連線可以等多久。這些邊界若只靠呼叫者記得,升級後就容易出現不同解讀。

Microsoft Agent Framework1.25於2026年11月7日釋出Python1.25.0版本,把MCP工具探索、工作流授權範圍與部分逾時預設寫得更明確,也要求Python3.11以上。

這是一個建立代理與多步驟工作流的程式框架,並非新聊天模型。新版主要改變的是應用程式怎麼建立會話、發現外部工具,以及保留一次請求的身分。

例如工具清單探索預設最多100頁與1000項,框架管理的請求預設30秒逾時。大型目錄可以調整限制,但這些數字不是整個任務只能做30秒。

工作流的執行器與會話也綁定一個授權範圍,跨範圍重用會在呼叫模型前被拒絕。這能處理執行中物件的共用問題,卻沒有自動接管應用自己放進共享儲存的資料。

我認為這版適合把代理提供給多個身分、或接上大型MCP目錄的團隊優先檢查。升級把隱含假設變成可見條件,既有的物件重用與連線寫法也可能要調整。

先看工具目錄如何被發現,才能理解新限制與後續授權檢查為何會一起出現。

Microsoft Agent Framework1.25如何限制MCP工具探索?

新版替工具與提示目錄設上限,並在更新失敗時保留前一次完整快照。

MCP讓代理用共同介面找到外部工具。開始呼叫前,客戶端通常要向伺服器取得工具名稱、說明與輸入欄位,提示目錄則提供另一類可用的提示內容。

若伺服器把清單分成很多頁,探索就可能持續很久。這次目錄探索改動預設每份目錄最多讀100頁、1000項,讓框架不必無限制地追著下一頁讀取。

這兩個數字約束的是探索範圍,不是每天最多呼叫1000次工具。工具執行量、模型輸出與外部服務費用,不能從目錄項目上限直接推得。

大型目錄可以提高max_discovery_pages或max_discovery_items。也能設為None取消相應限制,但官方要求只對可信任的MCP伺服器這樣使用。

兩種上限可以各自調整,因此需要先知道卡住的是頁數,還是項目數。只把其中一個設得很大,不代表另一個限制也跟著放寬。

更新失敗時,系統會保留先前完整的目錄快照。這避免代理突然拿到只更新一部分的工具集合,卻也代表它當下看到的可能仍是上一份成功取得的內容。

因此,探索成功和工具內容最新是兩個條件。若服務端剛更名或新增工具,團隊需要留意目錄是否真的完成刷新,而不只看代理還能不能繼續回話。

目錄能讀完之後,工具要不要進入代理可用範圍,還有另外一層核准規則。

Microsoft Agent Framework官方品牌橫幅,淺色背景中央是標誌與產品名稱
Microsoft Agent Framework官方品牌橫幅,非1.25工具探索介面。圖片來源:官方程式庫。

工具探索核准與執行身分怎麼分開?

探索政策可以依工具資料決定核准方式,但不會取代每次請求的身分隔離。

新版支援可呼叫的MCP探索核准政策,也會尊重Foundry Toolbox的相關核准資料。應用可以依工具名稱、唯讀標記等條件,安排哪些工具需要核准。

這比單一固定設定更細,因為查詢資料和修改資料不必永遠共用相同政策。不過,工具標成唯讀只是政策可以參考的資訊,不能推成模型往後的每個動作都已被人看過。

呼叫端明確指定的設定也會被尊重,保留的工具則會在政策刷新時更新處理。因此,授權政策改變後,既有工具不應永遠沿用最初那一份判斷。

同一連線的請求,怎麼保留各自身分?

另一項修正把HTTP標頭限制在每個送出請求的範圍。標頭是請求攜帶的資料,可能包含辨識呼叫者所需的內容,不能因為共用連線而混成另一個人的設定。

有效標頭相同的工具、提示與資源讀取仍可以重疊執行,身分改變時則隔離處理。這是在避免資料混用的同時,保留不必互相等待的請求能力。

不過,若多個操作依賴同一個伺服器會話的狀態,應用仍要安排先後順序。框架保留請求身分,沒有替業務決定哪個修改應先完成。

這個區別很實際。兩次查詢可能可以同時進行,但先建立遠端工作、再讀取結果,仍需要由流程保留相應關係,不能只依賴連線本身。

工具列表分清楚後,同一個工作流物件能不能交給另一位使用者,也需要明確答案。

為什麼跨使用者工作流要重新建立?

執行中的工作流執行器與會話只能屬於一個授權範圍,跨範圍重用會提前失敗。

執行器負責運轉工作流,會話則保留這次互動狀態。若伺服器把同一組物件交給不同使用者,應用就需要回答前一位留下的內容和權限應如何處理。

工作流範圍修正把相關物件綁定到一個授權範圍。若另一範圍嘗試重用,會在呼叫模型前回報WORKFLOW_SCOPE_CONFLICT,讓衝突先出現在程式入口。

官方建議使用workflow_factory,每次呼叫建立新的工作流、AgentExecutor與AgentSession。這裡的工廠可以理解成一個負責產生新物件的函式,而非共用一份既有實例。

只把cache_target設為False仍不夠。若多次呼叫背後沿用相同建構器,執行器仍可能被重用,所以要檢查的是最後產生的物件,而非只看到參數已關閉快取。

single_user=True則只適合所有呼叫者確實屬於同一個主體。它不是把多使用者服務改成相容模式的捷徑,否則應用前提仍和實際呼叫者不同。

哪些資料不在這道檢查裡?

這道保護涵蓋活著的執行器與會話身分,不包含應用自行從共用儲存載入的狀態。自訂工具函式若另外呼叫工作流,也不會因此自動取得相同保護。

所以,新的物件不能代替資料分區。假設每次都建新會話,卻從同一個未區分使用者的資料位置讀取內容,入口物件正確也沒有解決資料來源問題。

AG-UI端點另不再接受WorkflowAgent.as_tool(),會回報不支援錯誤。這個限制針對該入口的工作流代理工具,不是宣布整個框架取消工具呼叫。

需要提供這類工作流時,官方建議透過工廠直接供應。這讓服務入口與物件生命週期對齊,而不是在更深一層才發現它被另一個範圍使用。

建立新的工作流解決物件共用,MCP連線內部是否沿用狀態則是另一個問題。

新MCP會話與30秒逾時,會如何影響流程?

宣告式處理器每次呼叫建立新的協定會話,預設逾時也只約束框架管理的請求。

宣告式設定讓應用用設定描述要連哪些工具,DefaultMCPToolHandler則負責實際處理。新版在每次處理器呼叫建立並關閉新會話,連tools/list也包含在內。

因此,前一次工具呼叫在伺服器端留下的隱含會話狀態,不會保證跨到下一次呼叫、等待核准之後或檢查點恢復時繼續存在。

如果工作需要持續操作同一個遠端資源,就要明確保留遠端狀態的識別資訊,或使用範圍明確的自訂處理器。靠連線一直活著來記住工作,已不符合這條預設路徑。

舊的cache_max_size參數仍可傳入,但已棄用且不再產生效果。設定一個較大的快取數字,無法把原本的會話重用行為帶回來。

建立處理器的方式也跟著改變,應使用一般建構,不再包在async with裡,並移除處理器的aclose()呼叫。若借用應用自己的HTTP客戶端,仍要另外管理其關閉時機。

這項宣告式套件修正版本為1.5.0,核心版本則是1.25。不同子套件有各自版號,不能把兩者當成發行說明前後矛盾,也不能只更新其中一項就假定依賴已對齊。

另一項30秒預設,適用於框架管理的請求。呼叫者自己持有的客戶端,保留自己的傳輸與逾時政策,沒有被一律改寫。

官方也明說,請求進入與恢復各有自己的逾時預算,不是整段端到端工作的單一截止時間。因此,看到30秒不能直接推算最久多久一定拿到完整答案。

有需要可設request_timeout=None恢復無限等待,但這是明確改變請求政策。工作流檢查點與核准驗證沒有因此取消,也沒有新增必須套用的檢查點遷移旗標。

連線生命週期改變之後,既有觀測與錯誤處理也得能辨認新的輸出。

追蹤與沙箱錯誤為何需要同步調整?

工作流追蹤欄位改採OpenTelemetry慣例,主機工具錯誤則預設不把細節交回生成程式。

追蹤是記錄一次工作經過哪些步驟的資料。舊系統若只用精確名稱workflow.run尋找工作流,新版名稱改變後,就可能在畫面上看不到原本要看的執行紀錄。

官方建議改用gen_ai.operation.name等於invoke_workflow來篩選,工作流名稱屬性也改成gen_ai.workflow.name。這是觀測欄位遷移,執行時與檢查點的工作流識別並未一起改名。

因此,升級後若報表忽然少了工作流,先確認查詢欄位是否仍在找舊名稱,比直接認定工作沒有執行更能對準問題。

Hyperlight與Monty的改動則發生在主機工具出錯後。預設會把原始例外細節遮蔽,再讓生成的程式繼續,因此程式端會拿到一般RuntimeError診斷。

原本依特定例外類型分支的邏輯,可能因此需要調整。可信任通道可以由主機端開啟include_detailed_errors,但這和外層客戶端錯誤處理、敏感資料記錄是不同設定。

GitHub Copilot整合也縮小一種URL核准行為。沒有明確domain的會話核准,現在只當成單次核准,若確實要授權特定網域,必須把範圍寫出來。

這些變化有共同方向,讓程式依賴的範圍更明確。但它們作用在不同位置,不能只用一句「新版更安全」,就跳過實際要改的輸入和判斷。

這些行為變動最後還要和Python及整合套件的版本要求一起部署。

Python3.11與整合版本,升級要對齊什麼?

Python3.10已不再能安裝這版,各整合套件仍保留自己的上限與核心依賴。

對現有服務而言,先升級框架還是先升級執行環境,並不是任意順序。若伺服器仍停在Python3.10,套件安裝資格就已不符合,還沒走到工具設定那一步。

同時,「3.11以上」不代表每個整合都支援所有更新版本。Foundry Local這次支援3.11到3.14,還有其SDK與作業系統要求,需要依真正使用的整合確認。

框架版本也沒有決定模型、資料庫與外部工具的全部費用。這次公告談的是程式介面與依賴,不能從安裝套件直接推成整套服務免費。

延伸閱讀:AgentBug-Smith 是什麼?把 AI 代理框架錯誤變成可重現的測試

延伸閱讀:Hermes 提供 Grok Bot 遷移入口:搬設定之前,模型帳務與工具權限怎麼確認?

Microsoft Agent Framework1.25常見問題 FAQ

30秒表示整個代理工作必須結束嗎?

30秒是框架管理請求的預設逾時,進入與恢復也有各自預算。它不是整個多步驟工作的共同截止時間,自備客戶端則保留自己的傳輸政策。

關閉快取,就能共用原本的工作流嗎?

共用建構器仍可能重用執行器,即使cache_target=False也一樣。多身分服務需要由工廠建立新的工作流、執行器與會話,並另外區分儲存資料。

所有子套件都應改成1.25嗎?

子套件各有版號,宣告式處理器修正是1.5.0,核心是1.25。應依發行說明核對依賴,而非把每個套件都硬設成相同版本。

結論

Agent Framework1.25讓工具探索、工作流身分與會話存續有了更明確的預設。對既有應用來說,真正的升級工作是找出哪些地方仍依賴共用物件或隱含狀態。

可以先從一條實際使用的多使用者工作流,追到它的建構器、會話與MCP處理器,再對照請求逾時和觀測欄位。這樣比較容易把改動對回具體行為,而不是只確認版本號已更新。

資料來源

Read more

Muse Ember 官方發布頁的淺藍色放射線與圓弧示意圖

Muse Ember 發表:Meta 低價模型如何分擔代理工作,長上下文費用怎麼算?

Muse Ember 想降低的,是 AI 代理每天反覆讀檔、叫工具和修小錯的支出。代理一次任務往往需要很多小步,所以單次回答便宜,累積起來才可能改變整個工作流程的成本。測試結果同樣不是全面領先。官方整理的程式評測裡,有些項目高於同級模型,另一些仍落後 Claude Haiku 5.5,代表團隊需要用自己的任務決定分工。