介绍
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 中是类型化对象,两者的字段名完全相同。
请求流程
- 用模型 id 和客户端类型创建一个
AutoLLMClient:厂商的官方客户端,或对接任何提供该协议端点的兼容客户端。模型 id 以已知系列开头时,可以省略客户端类型,由它指定官方客户端。 - 调用流式方法,传入消息和配置。客户端将两者转换为服务商的请求格式。
- 服务商流式返回其原生事件。客户端将每个事件转换为
UniEvent片段,MMSP 再用完整形式收尾每个内容项。 - 完整的内容项按顺序组成助手消息。有状态调用在返回最后一个事件前,会先将这条消息记录到客户端的历史中。
服务商返回的、你的代码不需要但服务商要求原样传回的数据(例如思考签名),会作为 fidelity 随内容项一起传递。
有状态与无状态
streaming_response_stateful 接收新消息,并在客户端内维护历史记录。它适用于 agent 循环:之前轮次的思考和工具调用会原样送回模型。
streaming_response 每次接收完整的消息列表,自身不保存任何状态。当你自行管理对话历史时使用它。