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 等視覺模型相容。這允許進行詳細的圖像分析,模型可以以結構化格式回傳特定的欄位,例如 summaryobjects(包含信心分數)、scenecolorstime_of_day

可靠性最佳實踐

為了確保最具確定性且可靠的結構化輸出,Ollama 建議採取以下實踐:

  • Schema 定義: 使用 Pydantic (Python) 或 Zod (JavaScript) 來定義回應 schema。
  • 提示工程: 在提示詞中明確包含「return as JSON」字樣,以引導模型。
  • 確定性採樣:temperature 設定為 0 以減少輸出的變異性。

未來發展藍圖

Ollama 已概述了幾項即將推出的增強功能,以改善受控生成:

  • 揭露 logits 以實現對生成的更細粒度控制。
  • 提升結構化輸出的效能與準確度。
  • 為採樣實施 GPU 加速。
  • 擴展對 JSON schema 以外格式的支援。

Sources

相關

  • Dispatch
  • Dispatch
  • Dispatch
  • Dispatch
  • Dispatch