~/ / AI 文章 / 在 VPS 上跑本機 LLM / 在自己的程式中呼叫本機模型:Ollama 的結構化輸出與 OpenAI-compatible API
在自己的程式中呼叫本機模型:Ollama 的結構化輸出與 OpenAI-compatible API
Ollama 在你的伺服器上跑起來之後,你自己的程式碼還需要兩樣東西:一是取得固定格式回答的方法,二是讓原本就支援 OpenAI API 的函式庫連上這台伺服器的方法。Ollama 的文件兩者都有說明。本文整理結構化輸出頁面與 OpenAI 相容性頁面的內容,並指出文件中標示為不支援的部分。
發布: · 約 5 分鐘讀完 · 已於 2026-10-26 對照 Ollama 官方文件確認。各版本支援的功能會有變動,請以最新文件為準。
呼叫同一台伺服器的兩種方式
Ollama 有自己的 API,文件中的範例是以 POST 送到 http://localhost:11434/api/chat。它也在 /v1/ 之下提供 OpenAI-compatible API,因此現有的 OpenAI 用戶端只要更改 base URL 就能連上。
| 項目 | Native API | OpenAI-compatible API |
|---|---|---|
| 基底位址 | http://localhost:11434/api/chat | http://localhost:11434/v1/ |
| API 金鑰 | 範例中未提及 | api_key='ollama',頁面註明為必填但會被忽略 |
| 結構化輸出欄位 | format | response_format |
API 金鑰這一列取自文件中的本機伺服器範例。至於雲端,頁面顯示的是 base_url https://ollama.com/v1,並搭配你的 Ollama 帳號所取得的 API 金鑰,屬於不同的情況。
結構化輸出:format 欄位
format 欄位用來限制回應。它可以接受字串 json(表示一般的 JSON),也可以接受 JSON schema 物件。在文件的 cURL 範例中,請求主體有四個欄位:model、messages、設為 false 的 stream,以及 format。範例中的 schema 包含 type、properties 與 required。
| format 的值 | 依文件所述的效果 |
|---|---|
| "json" | 模型以一般的 JSON 回答 |
| JSON schema 物件 | 回應會被限制在該 schema 之內 |
- 文件指出,最好同時在提示詞中以字串形式附上 JSON schema,以便讓模型的回應有所依據。
- 文件也提到,可以調低 temperature(例如設為 0),以得到較具確定性的結果。
- 在 Python 與 JavaScript 中,文件建議用 Pydantic 或 Zod 來定義 schema,這樣之後也能重複用於驗證。
- 視覺模型同樣接受 format 參數。文件中的視覺範例會將圖片與 schema 一起傳入。
- 依該頁面所述,Ollama 的雲端目前不支援結構化輸出。
在依賴某個 schema 之前,請先檢查它。下方的 JSON Schema Validator 可以告訴你 schema 本身是否有效,以及範例回答是否符合它。
檢查你要送出的 schema
有錯誤的 schema 可能要等到第一個請求送到模型時才出問題。請貼上 schema 與你預期的 JSON 範例,看看兩者是否一致。
對於所支援的關鍵字,遵循 JSON Schema Draft 2020-12。$ref 只會讀取同一份 schema 內的目標。
所有處理都在你的瀏覽器中執行。schema 與資料都不會被上傳。
OpenAI-compatible 端點
| 端點 | 頁面列出的功能 | 列為不支援的項目 |
|---|---|---|
| /v1/chat/completions | 聊天、串流、JSON mode、可重現的輸出、視覺、tools、推理控制 | logprobs、tool_choice、logit_bias、user、n;圖片 URL(請改用 base64) |
| /v1/completions | 文字補全、串流、JSON mode、可重現的輸出 | logprobs、best_of、echo、logit_bias、user、n |
| /v1/models | 列出與取得模型 | 未列出 |
| /v1/embeddings | 字串或字串陣列的輸入、編碼格式、維度 | token 陣列、user |
| /v1/responses | 串流、function-calling 的 tools、推理摘要 | 具狀態的請求:previous_response_id、conversation、truncation |
- 在聊天端點上,頁面將下列請求欄位列為支援項目:response_format、tools、stream、stream_options、seed、stop、temperature、top_p、max_tokens、frequency_penalty 與 presence_penalty。
- 頁面指出,結構化輸出可透過 OpenAI-compatible API 的 response_format 使用。
- 如果你的程式碼用到了「不支援」欄中的欄位,請修改程式碼,而不要指望伺服器會直接忽略它。文件沒有說明各個不支援欄位會如何處理,只有 speech 例外:不支援的值會回傳 400 錯誤。
tools 與工具定義的格式
Native API 與 OpenAI-compatible 的聊天端點都接受 tools。如果你是以 OpenAI 的格式描述工具,可以在送出之前,用本站的 Tool Definition Checker 依該格式檢查名稱、說明與參數 schema。
回答仍然不是有效 JSON 時
限制輸出的目的是讓你得到有效的 JSON,但你的程式碼仍可能收到來自其他模型、舊版本,或未帶 format 的請求所產生的文字。下方的工具可以修復常見的問題,例如程式碼區塊標記、結尾多餘的逗號與錯誤的引號,並在修復會改變原意時提出警告。
試試看: LLM JSON Repair
只會套用有唯一明確答案的修正。其他情況會回報位置,而不是用猜的。
所有處理都在你的瀏覽器中執行,貼上的文字不會被上傳。
關於存取的說明
文件中的本機範例指出,API 金鑰為必填但會被忽略。以下是我們的解讀,並非文件中的說法:這把金鑰並不保護伺服器,因此請讓 Ollama 維持預設位址;如果其他機器必須連上它,請在前面加上驗證機制。
資料來源
接著閱讀
- 在 VPS 上用 Docker 執行 Open WebUI,並連接 Ollama在自己的伺服器上用 Docker 執行 Open WebUI 並連接 Ollama:指令、第一個帳號、兩種連線類型與更新方式。
- 本機模型能做什麼?Ollama 的 tools、thinking、vision 與 embedding,以及 VPS 跑得動什麼tools、thinking、vision、embedding:Ollama 模型庫中的標籤代表什麼、哪些模型帶有這些標籤,以及下載大小有多大。
- 在 VPS 上安裝 Ollama 並讓它持續運作:安裝、systemd 服務、設定與更新在 Linux VPS 上安裝 Ollama 並讓它持續運作:依官方文件整理安裝指令、systemd 服務、環境變數、模型儲存位置與更新方式。
- 在 VPS 上跑本機 LLM 需要多少記憶體?模型檔加上 KV cache模型檔加上 KV cache:Ollama 函式庫、Ollama FAQ 與官方模型設定檔,對在 VPS 上跑本機 LLM 所需的記憶體有哪些說明。