MMSP
GitHub123

介绍

MMSP 是什么,它由哪三个对象组成,以及一次请求如何流经它。

MMSP(Model Message Stream Protocol)为所有模型服务商提供了一套统一的消息格式和流式文法。它以 Python 包和 TypeScript 包的形式发布,两者行为一致。

各家模型 API 的基本构件相同:消息、思考、工具调用、流式输出。但编码方式各异。Anthropic 流式输出 content block,OpenAI 流式输出 output item,Gemini 流式输出 step,而 Chat Completions 流出的 chunk 不标明自己装的是什么。MMSP 按各家协议读取,最终交给你的代码统一的结构。

三个对象

你发送和接收的所有数据,都属于以下三个对象之一:

对象 说明
UniConfig 请求的配置项:工具、思考级别、系统提示词等。
UniMessage 对话中的一条消息,来自用户或助手。它只包含完整的内容项。
UniEvent 流式响应中的一个事件。一条流由多个 delta 事件和一个 stop 事件组成。

在 Python 中它们是字典,在 TypeScript 中是类型化对象,两者的字段名完全相同。

请求流程

  1. 用模型 id 和客户端类型创建一个 AutoLLMClient:厂商的官方客户端,或对接任何提供该协议端点的兼容客户端。模型 id 以已知系列开头时,可以省略客户端类型,由它指定官方客户端。
  2. 调用流式方法,传入消息和配置。客户端将两者转换为服务商的请求格式。
  3. 服务商流式返回其原生事件。客户端将每个事件转换为 UniEvent 片段,MMSP 再用完整形式收尾每个内容项。
  4. 完整的内容项按顺序组成助手消息。有状态调用在返回最后一个事件前,会先将这条消息记录到客户端的历史中。

服务商返回的、你的代码不需要但服务商要求原样传回的数据(例如思考签名),会作为 fidelity 随内容项一起传递。

有状态与无状态

streaming_response_stateful 接收新消息,并在客户端内维护历史记录。它适用于 agent 循环:之前轮次的思考和工具调用会原样送回模型。

streaming_response 每次接收完整的消息列表,自身不保存任何状态。当你自行管理对话历史时使用它。

后续阅读

在 GitHub 上编辑本页以 Markdown 打开