用 DSPy 檢查 Datasette Agent 的 SQL Prompt

Simon Willison 用 DSPy 評估 Datasette Agent 的唯讀 SQL 問答提示,問題出在 schema 資訊不足與工具呼叫建議太硬。

用 DSPy 檢查 Datasette Agent 的 SQL Prompt

Simon Willison 在 2026 年 7 月 2 日寫了一個小研究題目,用 DSPy 來評估並改進 Datasette Agent 裡負責唯讀 SQL 問答的系統 prompt。

這件事有意思的地方,在於它沒有只拿一組假 prompt 做離線測試。研究任務要求安裝最新的 Datasette alpha、datasette-agent 和 dspy,讓 DSPy agent 呼叫 Datasette Agent 實際使用的工具實作與 prompt,並對著一個 live in-process Datasette 跑。評估資料則來自自動產生的 gold-standard dataset,再用自訂 metrics 檢查結果。

Willison 是被 AIE 的一場 dspy keynote 提醒,才把這件事丟給 Claude Code for web,用 Claude Fable 5 跑非同步研究任務。Fable 選了 GPT 4.1 mini 和 nano 來測,最後找出幾個看起來可行的 prompt 改法。

他特別點名的一個發現很實際。原本的 schema listing 只給資料表名稱,沒有欄位名稱;prompt 又提醒模型「如果你已經有資訊,就不要呼叫 describe_table」。這兩件事合在一起,讓 baseline traces 出現欄位名亂猜的情況,例如 page_count、o.order_id、first_name,接著進入 SQL 錯誤與重試迴圈。

建議也很直接。要嘛在 prompt 的 schema listing 裡放進欄位名稱,要嘛把「不要呼叫 describe_table」那句放軟。對 SQL agent 來說,少給 schema 細節再要求它少查表,等於把猜測包進流程裡。這篇短文提醒的是,prompt 評估如果能接上真實工具與真實執行環境,看到的問題會比單看回答文字更靠近產品現場。