第 21-1 篇:/v1/chat/completions——兼容协议的最小面

发布时间:2026/9/26 19:10:23

第 21-1 篇:/v1/chat/completions——兼容协议的最小面 上一篇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|那套标记是谁拼的、拼错会怎样。
延伸阅读

更多相关文章

2026/9/26 19:10:23

Atlas 300V 24G推理加速卡上部署YOLO全流程指南

先说结论:Atlas 300V 24G 是一块不折不扣的 AI 运算加速卡,而且是一块很典型的 推理加速卡 ,不是拿来训模型的训练卡。最近群里好几个朋友都在问这个卡能不能跑 YOLO,答案当然能,而且上手之后你会发现,在…

2026/9/26 19:10:23

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:23

临床研究选题没思路?拆解柳叶刀子刊高分论文的切入点与操作路径

朋友圈今天早上又被一篇柳叶刀子刊刷屏了。8.1分,中国团队,通讯作者是国内某大三甲的主任。说实话,8分这个段位在医学领域不算顶破天,但评论区里大家的关注点几乎都落在同一句话上——“这个切入点有点意思”。这些年我帮人审稿、…

2026/9/26 20:20:26

Windows下ComfyUI报错Cannot find ptxas.exe:CUDA工具链配置全解

Windows 下跑 ComfyUI 的 LBM_Relighting 节点,工作流加载到一半,控制台直接甩出一行Cannot find ptxas.exe,然后整条链路卡死。这个问题我在社区里见人问过不下十次,自己也踩过一回,说穿了就是 CUDA 工具链不完整&…

2026/9/26 20:20:26

LF-AI-STREAM-AI人工智能资源:从零搭建流式推理链路实战

简介:这是一套面向物联网视频监控开发者的AI系统资源包,遵循GB28181国家标准,聚焦智能视频分析与设备互联场景,适合具备Java与Vue基础、希望搭建智能监控平台的中高级开发者参考学习。压缩包共约2000个文件,整体50.33M…

2026/9/26 20:20:26

Agent编排实战:基于Kubernetes的调度与Workspace管理

1. 从“ax”这个标题说起:一个被低估的调度内核第一次看到“ax”这个标题,很多人会以为是某个命令行工具的缩写,或者某个前端库的名字。但结合热搜词里的 agent、orchestrator、kubernetes、workspace 这几个关键词,方向就清晰了—…

2026/9/26 20:20:26

基于Kubernetes的Agent编排与Workspace隔离实践指南

1. 从“ax”这个标题说起:一个被低估的Agent编排入口 第一次看到“ax”这个标题,很多人会以为是某个命令行工具的缩写,或者某个内部代号。但结合热搜词里的 agent、orchestrator、kubernetes、workspace 这几个关键词,基本可以判断…

2026/9/26 20:15:25

思科网络设备巡检命令大全:交换机/路由器/无线控制器排查实战

做网工这些年,我越来越觉得,巡检才是检验基本功的试金石。别看思科网络设备巡检命令翻来覆去就是那几条 show 命令,真到设备告警、业务中断的时候,能不能从输出里一眼看出隐患,靠的就是平时对每一个字段背后含义的理解…

2026/9/25 21:00:17

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/25 20:59:52

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/26 0:04:28

画质修复APP怎么选?Wink影像修复能力与产品实力解析

现如今手机拍摄场景愈发丰富,演唱会直拍、漫展记录、老视频翻新、日常vlog录制,都会遇到画面模糊、噪点多、曝光失衡等问题,不少用户在挑选工具时比较在意一款画质修复APP能够兼顾修复效果与自然质感。Wink作为美图公司推出的全球化AI影像增强…

2026/9/26 0:04:28

超低能耗建筑K值要求能否满足?浙东铝业建筑型材解析

核心摘要浙东铝业的超低能耗系统门窗产品,资料显示保温性能可达 K≤1.4W/(㎡K),能够对应上海地区超低能耗住宅对门窗保温性能的应用需求。判断建筑是否满足超低能耗要求,不能只看铝型材本身,还需要结合玻璃、隔热条、密封系统、开…

2026/9/25 20:55:38

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/26 19:58:38

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/25 18:34:56

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑