版本資訊
| 項目 | 值 |
|---|---|
| 框架 | Pydantic AI |
| 版本 | v2.63.0 |
| 前一版 | v2.62.0 |
| 發布日 | 2026-10-27 |
| Release Notes | v2.63.0 |
| GitHub | pydantic/pydantic-ai |
| Stars | 21k |
這個版本為什麼重要
這版的主線是「長跑 agent 的失控成本」:重複呼叫同一個工具、卡住的 callback、多個 worker 各算各的預算,這些問題平時不會壞事,但跑到幾十輪、幾十個 worker 之後就會慢慢把 token 和金錢燒掉。DetectLoops 直接偵測「agent 在重複做同一件事」並主動中斷,PostgresSpendStore 讓原本各 worker 獨立計算的 SpendLimits 預算改成共用一份存在 PostgreSQL 裡的額度,task_timeout 則讓 Dataset.evaluate 裡卡住的單個任務不會拖垮整批評測。同時官方在 Compatibility Notes 裡點名 CodeMode 的工具揭露行為改了:原本揭露一個新工具會整段重寫快取的 prompt,現在改成「附加」——這對大量使用 CodeMode 動態揭露工具的 agent 來說,直接影響 prompt cache 的命中率。
重要變更
- DetectLoops 偵測重複動作迴圈:新增
DetectLoopscapability,在 agent 重複執行相同動作時主動中斷 → 不必自己寫迴圈偵測邏輯,長任務卡在同一個工具呼叫迴圈時可以提早止損 - IPythonCodeMode 新執行環境:在既有 Monty-based
CodeMode之外新增IPythonCodeMode→ 需要 IPython 生態(如既有 notebook 工具鏈)相容性的場景可以換一套執行環境,不必綁定 Monty - PostgresSpendStore 共享預算:新增
PostgresSpendStore,讓 harness 的SpendLimits透過 PostgreSQL 共享 → 多個 worker 跑同一個預算上限時不必各自維護獨立額度,避免多 worker 疊加超支 - task_timeout 限制單個評測任務:
Dataset.evaluate新增task_timeout,為每個任務嘗試設定時限 → 評測批次裡卡住的單個 task 不會拖住整批結果 - manage_message_history 避免歷史重複傳送:UI adapters 新增
manage_message_history,讓 server 端保存的歷史不會重複送給 model → 接自訂 UI 層時減少一種容易漏算的 token 浪費 - 公開 framing 模組:新增公開的
pydantic_ai.framing模組(wrap、neutralize_tags、register_tag)→ 擴充套件可以用官方工具框自己的標籤,而不必各自重新發明轉義邏輯 - ag-ui-protocol 1.0 支援:正式支援 ag-ui-protocol 1.0 → 接前端 Agent UI 協定時不必卡在舊版規格
Breaking Changes
CodeMode預設改為dynamic_catalog=True:揭露新工具時改成「附加」而不是重寫整段快取的 prompt- 影響範圍:大量依賴 CodeMode 動態揭露工具、且依賴舊版「每次揭露都重寫 prompt」行為或快取 key 的程式碼,prompt cache 命中模式會改變
GoogleRealtimeConnection.dial的replay參數改為 keyword-only- 影響範圍:用 positional 參數呼叫
dial(..., replay_value)的程式碼會直接報錯
- 影響範圍:用 positional 參數呼叫
- Harness
LLMReminder預設interval=10,不再每次請求都生成提醒- 影響範圍:依賴「每次請求都會收到 reminder」的自訂邏輯行為會改變
- 把帶簽章或加密的歷史資料用相同
canonical_system重播給 provider- 影響範圍:自訂 provider wrapper 若假設每次請求的
canonical_system都不同,需要重新檢查
- 影響範圍:自訂 provider wrapper 若假設每次請求的
遷移指南
從 2.62.0 升級到 2.63.0
pip install --upgrade pydantic-ai==2.63.0
# 若要維持 CodeMode 舊版「重寫快取 prompt」的行為
code_mode = CodeMode(dynamic_catalog=False)
# 若呼叫 GoogleRealtimeConnection.dial 時用 positional replay 參數
# 舊寫法
await connection.dial(config, replay_value)
# 新寫法(改成 keyword-only)
await connection.dial(config, replay=replay_value)
其餘功能為新增能力,不升級既有程式碼也能照常運作。
與其他框架的對比觀察
同一天(2026-10-27)Agno 在 v3.1.11 讓 ClaudeAgent/CodexAgent 這類外部 coding agent 可以直接當 Team/Workflow 的成員,走的是「把整個外部 agent 吸收進多代理編排」的路線;Pydantic AI 這版則是從執行環境本身演進——新增 IPythonCodeMode 作為 Monty-based CodeMode 的替代方案,同時用 DetectLoops/task_timeout/PostgresSpendStore 補強長跑執行期間的失控成本控制。兩個框架同期都在往「agent 可以更久、更安全地自己跑」的方向補強,只是一個從編排層整合外部 agent,一個從執行層管控資源消耗。
今日收穫
之前以為 SpendLimits 這類預算控制是「單個 worker 自己算」的事,看到 PostgresSpendStore 把它搬進共享資料庫才意識到:只要 agent 系統一旦擴展成多 worker 並行,預算控制就不再是單機邏輯問題,而是分散式一致性問題——沒有共享存儲,各 worker 看到的「還剩多少預算」永遠是舊資料,疊加超支只是時間問題。