# OpenAI 与 Ollama 兼容层

> LMSP 服务如何通过叠加在同一个执行内核之上的轻量数据转换层，兼容现有的 OpenAI 和 Ollama 客户端，以及这种兼容性的边界。

Source: https://madeforagent.com/zh-cn/lmsp/1.0/compatibility/
Language: zh-CN
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-cn/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 的客户端，才能自动发现服务、读取详细能力、恢复事件流和管理异步任务。
- 没有任何服务端协议能让完全不可配置、且只接受官方云地址的客户端接入本地服务。
