上一篇20-3《SSE 流式——响应怎么写一半就发给客户端》下一篇21-2《对话模板与角色注入》真机实测通过本文实验已在 RK3588 板端实测完成2026-09方法学与原始记录见仓库 docs 与《实验脚本》目录一句话导读OpenAI 兼容的最小面怎么定先声明实现哪些字段、其余忽略或明确拒绝messages 必填与 400 分支、被尊重与被忽略的字段用板端实测逐一摊开。关键词chat/completions、OpenAI 兼容、兼容最小面、推理引擎、RK3588Day 20 把 HTTP 传输层与路由讲完。Day 21 进业务层让引擎能冒充 OpenAI 的/v1/chat/completions。这篇讲兼容的最小面——不是把 OpenAI 的全部参数搬过来而是搬够用且诚实的一小撮并用板端实测把哪些字段被尊重、哪些被忽略、哪里会 400摊开。1. 知识点兼容协议是接口契约不是功能对赌OpenAI 的 chat/completions 请求字段很多temperature/top_p/max_tokens/n/stream/tools/…。对推理引擎而言每个字段背后都是一段采样/调度/协议逻辑——支持 n1 意味着要改批处理面支持 tools 意味着要引入函数调用。一个小引擎的正确姿势是先声明自己实现了哪些字段其余字段要么忽略要么明确拒绝而不是假装全兼容。引擎的实际最小面vllm_server.c2014–2042 行逐字段读取请求字段类型处理messages数组必填缺失 →400 messages array is required20-2 实测max_tokensnumber生成长度上限读进后参与调度/截断finish_reason:lengthtemperaturenumber采样温度无值时用默认top_pnumbernucleus 采样streambooltrue 走 SSE20-3 实测modelstring只作回显标签未指定时回qwen3-vl-8b默认串见 2239 行响应里的自家扩展要单独说明history_tokens2593 行服务端回显会话 token 流与 SSE 的metrics/tokens事件——它们是非 OpenAI 标准字段客户端不认识就跳过本系列刻意保留它们是为了让测试能对着 token 验证而不是让生态依赖它。2. 对应代码一个 chat 请求的生命周期沿 Day 15 主循环的路径服务层再看一遍全链POST /v1/chat/completions → 自研 JSON 解析vllm_http.c VJson → 字段映射vllm_server.c 2014-2042messages/temp/top_p/max_tokens/stream → 多模态? detect_media19-2: 纯文本 qwen_tokenizer_encode → 前缀复用判定 → prefill → decode 循环逐 token / SSE → 组装 OpenAI 形状响应choices[0].message.roleassistant … → 附 history_tokens / metrics自家扩展注意messages的裁剪2083–2084 行超长时按行clipped——兼容层还要管上下文太长怎么办这是它比转发器多出来的部分。3. 改动后果参数被尊重与被忽略的实证实测口径板端 serve模型已加载 x86 客户端2026-09-07。全部请求max_tokens限制 history_tokens回显验证。① messages 缺失 → 400 messages array is required 最严 ② temperature0.0 的请求 → 200确定性采样方向 被尊重 ③ stream:false → 200 整包 JSON含 choices[0].message ④ stream:true → SSE 流20-3 已实测 ⑤ 未知字段如 n3 → 200未解析即忽略不报错 宽容 ⑥ roleuserr → 200角色按字面 token 化20-2 已实测给前端/测试的两个铁律测试兼容性别只看 200——要看choices/delta结构加字段前先看它会不会被静默忽略n3会被当成 1 处理这个在文档里要写明避免调用方以为拿到了 3 条候选。4. 学员调试任务A 档本地动手对着 §1 表逐字段发请求temperature:0、top_p:0.1、max_tokens:3看finish_reason:length、stream:true看事件序列、n:3看是否被忽略把messages传成{}与[]各看一次返回。B 档纯读源码读vllm_server.c2000–2100 与 2580–2600回答①messages裁剪2083发生在哪个阶段、为什么裁剪要保留首条 system 消息②history_tokens2593在什么条件下写入响应、它是prompt tokens还是含生成 token 的全序列用你 21-1 实测的一轮对比③ 若你要加seed字段支持固定随机种子需要动哪几处解析 → 采样器 → 文档预期输出一张参数 × 行为实测表并能解释为什么n3这类字段会 200 但没实现是兼容层的诚实设计而非 bug。收尾本篇源码点名vllm_server.c字段映射 2014–2042、history_tokens 2593、模型 id 回显 2239开源仓库Kestrel-LLM (Gitee)AGPL-3.0-or-later 或商业许可二选一下篇预告字段映射完messages里的 system/user/assistant 怎么变成模型真正看到的 prompt21-2 讲对话模板与角色注入——|im_start|那套标记是谁拼的、拼错会怎样。
企业数字化 ERP 产品动态
相关推荐
Atlas 300V 24G推理加速卡上部署YOLO全流程指南 先说结论:Atlas 300V 24G 是一块不折不扣的 AI 运算加速卡,而且是一块很典型的 推理加速卡 ,不是拿来训模型的训练卡。最近群里好几个朋友都在问这个卡能不能跑 YOLO,答案当然能,而且上手之后你会发现,在… · 2026/9/26 19:10:02
2.4 首次引导与配置加载:setup.ts 与配置系统接入 TaoToken 实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 19:10:02
MCP 协议实战:用 TaoToken 统一 Key 打通 Cline 与 CC Switch 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 19:09:50
物理信息神经网络PINN实战:将声学波动方程教给深度学习模型 在声学工程和深度学习圈子里,“将物理声学,教给神经网络”这句话这两年越来越多出现在论文和项目讨论里。我第一次听到这说法时还觉得有点玄:神经网络不是靠数据喂出来的吗?物理声学是方程和边界条件,这两者怎么“教”… · 2026/9/26 19:47:49
AI自动剪辑实战:从素材到成片,VideoUse如何重构视频工作流 最近圈子里好几个做自媒体的朋友都在聊 VideoUse,说靠它把一周的剪辑量直接压缩到了一上午。刚开始我没太当回事,毕竟“AI自动剪视频”这个概念这两年大家听得太多了,宣传一个比一个唬人,真正上手能用的没几个。直到我自己完整跑通… · 2026/9/26 19:47:43
本地Docker部署OpenHands人工智能软件开发代理平台及远程访问配置指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 19:47:43
Text2API 实践:用 TaoToken 统一 Key 打通 Cline 配置链路 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 19:47:43
Python随机森林时间序列预测:从CSV到可复现结果 简介:这份资源面向计算机、电子信息工程、数学等专业的大学生及算法入门者,提供一套可直接运行的随机森林(RF)时间序列预测完整方案,适用于课程设计、期末大作业与毕业设计等场景。压缩包共3个文件,包含2个… · 2026/9/26 19:47:43
OpenClaw 最新必安装 10 个 Skills(一):从 ClawHub 到自动化工作流的配置清单 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 19:47:43
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46