如果已經有點開發經驗,應該聽過 Pydantic。
它的任務很簡單:幫你檢查資料格式,確保工具不會亂吃東西。
假設我們有一個情緒分析的工具,期待輸入是:
{"texts": ["今天好開心", "這餐好難吃"]}
但使用者不小心傳了:
{"text": "今天好開心"}
如果沒有Pydantic去檢查,可能直接爆炸(不是指物理性爆炸那種,是程式直接crash的意思)
有了Pydantic後,就能在進入工具之前,先驗證輸入格式。
FastMCP支援我們用Pydantic Model來定義參數
例如以下例子:
from pydantic import BaseModel
from mcp.server.fastmcp import FastMCP
class SentimentRequest(BaseModel):
texts: list[str]
mcp = FastMCP(name="sentiment")
@mcp.tool()
async def sentiment(payload: SentimentRequest):
return {"result": [analyze(t) for t in payload.texts]}
這樣一來:
使用者輸入錯誤,會在「進工具前」就被擋下來。
工具輸出也能用Pydantic定義,保持一致性。
Pydantic如同一層「保護網」,確保MCP的工具不會因為輸入亂七八糟而崩潰。
明天 (Day19) 我們要往更高層級走:Workflows。