File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -122,7 +122,7 @@ HTTP chunked 更底层。很多服务端框架在没有 `Content-Length` 的情
122122
123123### SSE 协议的事件边界
124124
125- SSE 在传输层仍是 HTTP,但 ** 应用层是一份 UTF-8 纯文本协议 ** 。每个事件由若干行字段组成,事件之间必须用 ** 空行** 结束,也就是连续两个换行符 ` \n\n ` 。
125+ SSE 通常通过 HTTP 响应承载,媒体类型是 ` text/event-stream ` ,消息格式是一份 UTF-8 文本事件流 。每个事件由若干行字段组成,事件之间用 ** 空行** 分隔;实际换行可以是 ` \n ` 或 ` \r\n ` ,所以事件分隔常见写法是 ` \n\n ` 或 ` \r\n\r \n` 。
126126
127127常用字段如下:
128128
@@ -133,7 +133,7 @@ SSE 在传输层仍是 HTTP,但**应用层是一份 UTF-8 纯文本协议**。
133133| ` id ` | 事件序号;配合浏览器重连语义可做断点提示 |
134134| ` retry ` | 建议的重连间隔(毫秒) |
135135
136- ** ` \n\n ` 是事件分隔符 ** 。只要在“本应属于同一段模型增量”的字符串里出现了“裸的换行”,就有可能被客户端解析成“上一个事件已结束、下一个事件开始”。这是很多团队在 Demo 里没问题、一上对话界面加 Markdown 或列表就炸裂的根因。
136+ ** 空行才是事件分隔符 ** 。单个换行只是结束当前字段行,不会直接结束事件;真正容易出问题的是业务内容里混入了未转义的空行,或者服务端手写拼接 ` data: ` 时没有按行拆分,导致客户端把同一段模型增量误解析成多个事件。这也是很多团队在 Demo 里没问题、一上对话界面加 Markdown 或列表就炸裂的根因。
137137
138138小 G 在[ 《SpringAI 智能面试平台+RAG 知识库》] ( https://javaguide.cn/zhuanlan/interview-guide.html ) 的知识库问答里用的就是 SSE:模型一边生成,浏览器一边打字机展示;链路不长,但协议细节一个不落下。
139139
Original file line number Diff line number Diff line change 3434理解了自回归生成,后面所有概念都好办了:
3535
3636- ** Token** :模型每一步“补”的文本碎片。
37- - ** 上下文窗口** :模型在“补”之前能看到多少文本 。
37+ - ** 上下文窗口** :一次调用里模型可处理的总 Token 上限,系统提示词、历史消息、当前输入和输出预算都会占用 。
3838- ** Temperature / Top-p** :模型选哪个候选碎片的策略。
3939- ** Max Tokens** :允许模型最多“补”多少步。
4040
You can’t perform that action at this time.
0 commit comments