OpenAI 与 Ollama 兼容层

8.1 兼容 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 章)。

8.2 兼容 Ollama 的接口

服务应同时提供以下接口,让为 Ollama 编写的客户端也能使用:

接口 说明
GET /api/tags 列出 LMSP 目录中的模型。
POST /api/chat 对话。
POST /api/generate 纯文本生成。

提供这些接口的服务以 kind 为 ollama 声明一个接口。

8.3 同一个执行内核

兼容层必须只做数据转换,不得另建第二套模型管理逻辑。兼容接口上的请求会被映射为 LMSP 响应,与原生请求在同一个内核和适配器上运行,使用同一个模型目录和同一套认证。

OpenAI Chat Completions
          |  请求映射
          v
     LMSP Response
          |  后端适配
          v
llama.cpp / Ollama / vLLM / 其他运行时

在 /v1 和 /api 接口上,服务应按对应 API 所定义的格式报告错误,让未修改的客户端能够解析。LMSP 接口始终使用 application/problem+json。

8.4 边界

兼容性有其限度,值得直说:

  • 现有的 OpenAI 兼容客户端通常只需修改 base_url,但不能自动获得 LMSP 的发现能力。
  • 只有支持 LMSP 的客户端,才能自动发现服务、读取详细能力、恢复事件流和管理异步任务。
  • 没有任何服务端协议能让完全不可配置、且只接受官方云地址的客户端接入本地服务。