概述

1.1 摘要

本地模型服务协议(LMSP)规定了客户端如何发现并使用运行在用户自己设备或局域网中的语言模型服务。它定义了服务发现、模型目录、同步与流式生成,以及在服务重启后仍然保留的异步任务,还规定了同一个服务如何在 LMSP 接口之外提供兼容 OpenAI 的接口,使现有客户端可以继续使用。

LMSP 并不取代 OpenAI API、Ollama 或 MCP,而是把它们的优点组合成一个适合本地常驻服务的协议层。

1.2 本文档的状态

这是 LMSP 1.0 的首个公开草案,发布于 2026-11-08。“LMSP”是暂定名称。本文欢迎反馈,在 1.0 定稿之前可能发生不兼容的修改。

英文文本是规范性文本。译文仅为方便阅读而提供;两者如有差异,以英文为准。

1.3 设计依据

LMSP 复用已被验证的设计,而不是另起炉灶:

  • OpenAI Responses API。 结构化的输出项、语义化的服务器发送事件,以及支持查询和取消的长任务后台执行。它是 LMSP 核心对话接口的参考。参见流式响应和后台模式。
  • Ollama。 它提供兼容 OpenAI 的 /v1/models、/v1/chat/completions 和 /v1/responses 接口,说明“统一服务+OpenAI 适配层”能显著降低现有客户端的接入成本。参见 Ollama 的 OpenAI 兼容性。
  • 模型上下文协议(MCP)。 其最新设计已从强制初始化会话转向无状态发现:每个请求独立携带版本信息,客户端通过发现接口获取服务端能力。这非常适合本地服务,因为服务重启、客户端崩溃和连接断开都不应破坏协议状态。参见 MCP。
  • Agent2Agent(A2A)。 服务卡片、显式任务状态、任务订阅和取消机制,为 LMSP 的服务描述和异步任务模型提供了借鉴。参见 A2A。

1.4 架构

LMSP 分为三层,其下是对接各模型运行时的适配器:

+---------------------------------------------------------------+
| Discovery      mDNS / DNS-SD + well-known service document    |
+---------------------------------------------------------------+
| Core           model catalog, responses, SSE, async tasks     |
+---------------------------------------------------------------+
| Compatibility  OpenAI API, optional Ollama API                |
+---------------------------------------------------------------+
| Adapters       llama.cpp, Ollama, vLLM, custom runtimes       |
+---------------------------------------------------------------+
  • 发现层。 mDNS/DNS-SD 与 Well-Known 服务描述文档(第 3 章)。
  • 核心层。 模型目录、同步响应、服务器发送事件和异步任务(第 5 至 7 章)。
  • 兼容层。 兼容 OpenAI 的 API,以及可选的兼容 Ollama 的 API(第 8 章)。
  • 适配器。 对接 llama.cpp、Ollama、vLLM 或自研运行时的桥接层。

核心原则是:一个模型执行内核,对外同时提供 LMSP 和 OpenAI 两种接口。服务在同一个内核之上提供这两类接口,因此模型加载、请求执行和任务跟踪都只有一处实现。

1.5 规范性用语

本文中的关键词 必须(MUST)、不得(MUST NOT)、必需(REQUIRED)、应(SHOULD)、不应(SHOULD NOT)、建议(RECOMMENDED)、可以(MAY)和可选(OPTIONAL),仅当以粗体出现时,才按 BCP 14(RFC 2119、RFC 8174)中的含义解释。

每一章都标明是规范性的还是资料性的。规范性章节定义要求,资料性章节提供指引,示例均为资料性内容。JSON 使用 UTF-8 编码,字段名使用 snake_case。

1.6 术语

术语 含义
服务 实现 LMSP 并通过适配器运行模型的常驻进程。
客户端 发现并调用服务的软件:智能体、应用或工具。
适配器 把服务连接到某个模型运行时(如 llama.cpp、Ollama 或 vLLM)的组件。
模型 本地可用的模型,由稳定的 id 标识。
响应 一次生成请求的结果:输出项、用量和状态。
任务 对响应请求的持久化异步执行,具有明确的状态。
事件 生成响应期间发出的一条带序号的服务器发送事件。