# OpenAI と Ollama の互換性

> LMSP サービスが、1 つの実行コアの上に置いた薄いデータ変換層によって、既存の OpenAI クライアントと Ollama クライアントとの互換性を保つ方法と、その互換性の限界を説明します。

Source: https://madeforagent.com/ja/lmsp/1.0/compatibility/
Language: ja
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 インターフェースと同じベアラートークンを受け付ける。OpenAI プロトコルを話すクライアントは、LMSP トークンを API キーとして設定する。

最初の実装は、`/v1/models` と `/v1/chat/completions` から始めてよい（[第 12 章](https://madeforagent.com/ja/lmsp/1.0/mvp.md)）。

## 8.2 Ollama 互換エンドポイント {#ollama}

サービスは、Ollama 向けに書かれたクライアントも動作するよう、次のエンドポイントも提供する**べきである**。

| エンドポイント | 備考 |
| --- | --- |
| `GET /api/tags` | LMSP カタログのモデルを一覧する。 |
| `POST /api/chat` | チャット。 |
| `POST /api/generate` | プレーンテキスト生成。 |

これらを提供するサービスは、`kind` を `ollama` としたインターフェースを宣言する。

## 8.3 1 つの実行コア {#core}

互換層は、データの変換だけを行わ**なければならない**。モデル管理のロジックを第 2 の系統として作っ**てはならない**。互換インターフェース上のリクエストは 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 に対応したクライアントだけである。
- 設定できず、公式のクラウドアドレスだけを受け付けるクライアントを動作させられるサーバー側プロトコルは存在しない。
