# OpenAI 與 Ollama 相容層

> LMSP 服務如何透過疊加在同一個執行核心之上的輕量資料轉換層，相容現有的 OpenAI 和 Ollama 客戶端，以及這種相容性的邊界。

Source: https://madeforagent.com/zh-tw/lmsp/1.0/compatibility/
Language: zh-TW
Specification: LMSP 1.0 (draft)
Updated: 2026-11-08

## 8.1 相容 OpenAI 的介面 {#openai}

服務**應**在 LMSP 介面之外提供相容 OpenAI 的介面，並在 `interfaces` 中以 `kind` 為 `openai` 宣告。為覆蓋現有客戶端，提供該介面的服務**必須**在 `/v1` 字首下至少實作以下介面：

| 介面 | 說明 |
| --- | --- |
| `GET /v1/models` | 列出 LMSP 目錄中的模型。每個 `id` 都是 LMSP 模型 id。 |
| `POST /v1/chat/completions` | Chat Completions，支援串流和非串流。 |
| `POST /v1/responses` | OpenAI Responses 格式。 |
| `POST /v1/embeddings` | LMSP 1.0 核心介面沒有 embeddings 介面。轉接器直接提供此介面，供 `capabilities.embeddings` 為 `true` 的模型使用。 |

這些介面接受與 LMSP 介面相同的 Bearer Token。使用 OpenAI 協定的客戶端把 LMSP 權杖設定為 API Key 即可。

首個實作可以先從 `/v1/models` 和 `/v1/chat/completions` 開始（[第 12 章](https://madeforagent.com/zh-tw/lmsp/1.0/mvp.md)）。

## 8.2 相容 Ollama 的介面 {#ollama}

服務**應**同時提供以下介面，讓為 Ollama 編寫的客戶端也能使用：

| 介面 | 說明 |
| --- | --- |
| `GET /api/tags` | 列出 LMSP 目錄中的模型。 |
| `POST /api/chat` | 對話。 |
| `POST /api/generate` | 純文字生成。 |

提供這些介面的服務以 `kind` 為 `ollama` 宣告一個介面。

## 8.3 同一個執行核心 {#core}

相容層**必須**只做資料轉換，**不得**另建第二套模型管理邏輯。相容介面上的請求會被對映為 LMSP 回應，與原生請求在同一個核心和轉接器上執行，使用同一個模型目錄和同一套驗證。

```text
OpenAI Chat Completions
          |  請求對映
          v
     LMSP Response
          |  後端轉接
          v
llama.cpp / Ollama / vLLM / 其他執行環境
```

在 `/v1` 和 `/api` 介面上，服務**應**按對應 API 所定義的格式報告錯誤，讓未修改的客戶端能夠解析。LMSP 介面始終使用 `application/problem+json`。

## 8.4 邊界 {#boundaries}

相容性有其限度，值得直說：

- 現有的 OpenAI 相容客戶端通常只需修改 `base_url`，但不能自動獲得 LMSP 的發現能力。
- 只有支援 LMSP 的客戶端，才能自動發現服務、讀取詳細能力、恢復事件流和管理非同步任務。
- 沒有任何伺服端協定能讓完全不可設定、且只接受官方雲位址的客戶端接入本地服務。
