Ollama 結構化輸出發佈
Ollama 已推出對結構化輸出的支援,讓開發者能夠將語言模型的回答限制在由 JSON schema 定義的特定格式中。這次更新提供了比以往 JSON 模式更高的可靠性與一致性,並支援 Ollama 的 cURL API、Python 和 JavaScript 函式庫。
關鍵能力與使用案例
結構化輸出允許模型嚴格遵守預定義的 schema,這對於將 LLM 回應整合到程式化工作流中至關重要。主要使用案例包括:
- 資料解析: 從非結構化文件中提取結構化資訊。
- 視覺分析: 使用視覺模型從圖像中提取資料與描述。
- 回應標準化: 確保所有語言模型的回應都遵循一致的格式,以便進行下游處理。
實作方法
要使用結構化輸出,必須在請求中傳遞 format 參數。這可以透過幾種介面來達成:
cURL API
format 參數接受一個 JSON schema 物件,用來定義所需的屬性及其類型(例如:string, array)。
Python 函式庫
Ollama 建議使用 Pydantic 來定義 schema。該 schema 會透過 model_json_schema() 方法傳遞給 format 參數。
JavaScript 函式庫
Ollama 建議搭配使用 Zod 與 zod-to-json-schema 來將 schema 序列化,以供 format 參數使用。
OpenAI 相容性
Ollama 支援與 OpenAI 相容的 beta.chat.completions.parse 方法,讓開發者在連接到本地 Ollama 實例時,可以使用 Pydantic 模型作為 response_format。
進階應用
結構化資料提取
透過定義一個 schema(例如包含 PetList 物件列表的 Pet 物件),模型可以解析自然語言描述的多個實體,並將其作為經過驗證的 JSON array 回傳。
視覺模型整合
結構化輸出與 llama3.2-vision 等視覺模型相容。這允許進行詳細的圖像分析,模型可以以結構化格式回傳特定的欄位,例如 summary、objects(包含信心分數)、scene、colors 與 time_of_day。
可靠性最佳實踐
為了確保最具確定性且可靠的結構化輸出,Ollama 建議採取以下實踐:
- Schema 定義: 使用 Pydantic (Python) 或 Zod (JavaScript) 來定義回應 schema。
- 提示工程: 在提示詞中明確包含「return as JSON」字樣,以引導模型。
- 確定性採樣: 將
temperature設定為 0 以減少輸出的變異性。
未來發展藍圖
Ollama 已概述了幾項即將推出的增強功能,以改善受控生成:
- 揭露 logits 以實現對生成的更細粒度控制。
- 提升結構化輸出的效能與準確度。
- 為採樣實施 GPU 加速。
- 擴展對 JSON schema 以外格式的支援。
Sources
- OriginalStructured outputs
相關
- Dispatch
- Dispatch
- Dispatch
- Dispatch
- Dispatch