Pydantic AI 模型思考能力 (Thinking)
在 AI 領域的最新進展中,「思考模型 (Thinking / Reasoning Models)」成為了顯學。像 OpenAI 的 o1 系列或是部分具備 reasoning 參數的模型,在給出最終答案之前,會在內部生成一段「思考過程 (Chain of Thought)」。
這種機制大幅提升了 AI 解決複雜數學、邏輯推理與編程問題的能力。Pydantic AI 提供了標準化的介面,讓開發者可以輕鬆開啟模型的思考模式,並獲取其內部的思考軌跡。
如何開啟思考能力
並非所有的模型都支援思考模式。當你選擇了支援此功能的模型(例如 openai:o1-preview 或是具備 extended thinking 的 Anthropic Claude 模型)時,你可以透過設定來啟用它。
在 Pydantic AI 中,有些模型預設就是思考模型,而有些則需要你在建立 Agent 或執行階段,透過傳入特定的設定檔 (Settings) 或使用 Capabilities 來開啟。
from pydantic_ai import Agent
# 使用 OpenAI 的 o1-preview,這本身就是一個推理模型
agent = Agent('openai:o1-preview')
# 因為模型本身具備推理能力,它在給出解答前會花較長的時間思考
result = agent.run_sync("請證明為什麼根號 2 是一個無理數。")
print(result.data)
設定思考權重 (Thinking Tokens)
對於某些模型(如 Anthropic Claude 3.7+),你可以手動分配模型可以花費多少 Token 在「思考」上。分配越多,模型思考得越深入,但同時花費的 API 成本與等待時間也會增加。
這個設定通常會透過模型專屬的 Settings 來傳遞給 Agent。
獲取模型的思考過程
在很多應用場景中,我們不僅需要 AI 的「最終答案」,我們也對它「怎麼推導出這個答案的」感興趣。例如:在一個數學解題的 UI 介面上,你可能想先將思考過程摺疊起來,讓有興趣的學生點開查看。
Pydantic AI 的執行結果 (RunResult) 中,如果模型有回傳它的思考軌跡,你可以直接提取出來。
from pydantic_ai import Agent
agent = Agent('openai:o1-preview')
result = agent.run_sync("請問在一個房間裡有 30 個人,其中至少有兩人生日相同的機率是多少?請給出詳細的推導。")
# 獲取最終解答
print("=== 最終解答 ===")
print(result.data)
# 獲取模型的內部思考軌跡 (如果有支援並回傳的話)
# 這個屬性可能被稱為 reasoning 或 thinking (請依據當前版本 API 為準)
if hasattr(result, 'reasoning') and result.reasoning:
print("\n=== AI 思考過程 ===")
print(result.reasoning)
思考模型與結構化輸出的結合
值得注意的是,思考模型非常強大,但它們早期的版本(如初代的 o1)在「強制結構化輸出 (Structured Output)」以及「呼叫工具 (Function Calling)」上的支援度可能不如一般模型 (如 gpt-4o) 來得完善。
隨著模型技術的迭代,這些限制正在逐漸消失。但在實務開發時,如果你發現思考模型在使用 @agent.tool 時表現不穩定,一種常見的設計模式是使用多代理人架構 (Multi-Agent):
讓一個負責「深思熟慮」的 Reasoning Agent 專注於推導解法,然後將它的純文字推導結果交給另一個「執行力強」的標準 Agent(如 gpt-4o)去呼叫工具或格式化為 JSON 輸出。
透過 Pydantic AI 對 Thinking 能力的支援,你可以將最強大的推理大腦無縫接軌到你的應用程式中。