首页/AI/大模型部署与运维速查/logit_bias:按 token 施加偏置
推理参数与优化50 条

logit_bias:按 token 施加偏置

对指定 token 的 logits 加固定偏置:正值提升、负值抑制,-100 常用来硬性排除特定 token;字段为 token id 到偏置值的映射。

logit_bias 是什么

采样前的模型输出是一整排候选 token 的分数(logits),logit_bias 允许你在这些分数上加一个固定偏置:正值提高某个 token 被选中的倾向,负值压低,判到极端值就等价于禁止。它不是提示词技巧,而是在采样阶段直接改分布,所以对「必须不出现某个词」或「必须强制以某段文本开头」这类硬性约束比在提示里反复强调可靠。

基本信息

字段形态token id 到偏置值的映射,键为字符串形式的 token id
取值范围以服务实现为准,常见约定为 -100 到 100 的整数区间
生效阶段采样之前,直接加到对应 token 的 logits 上
适用接口多数兼容 OpenAI 协议的对话与补全接口,vLLM 的采样参数也提供同类能力
前置依赖需要知道目标模型分词器的 token id 映射

典型使用场景

  • 禁止输出特定词:把敏感词对应 token 压到最低,比在提示里约定更稳定
  • 强制结构化开头:让回答以指定 JSON 键名或前缀开始,方便下游解析
  • 抑制重复与口头禅:对高频重复片段的 token 施以负偏置,改善长文本可读性
  • 分类任务收窄候选:把答案限制在少数类别 token 上,减少无效输出
  • 多语言输出控制:压掉非目标语种的高频 token,降低语言串台概率

请求片段

请求片段
# 排除某个 token(id 需按目标模型 tokenizer 查询)
client.chat.completions.create(
    model="<模型名>",
    messages=[{"role": "user", "content": "输出一个城市的名字"}],
    logit_bias={"12345": -100},
)

# 多 token 组合:分别加压或提升
logit_bias = {"12345": -100, "678": -50, "9012": 20}

# 查询 token id(以 transformers 为例)
from transformers import AutoTokenizer
tok = AutoTokenizer.from_pretrained("<模型路径>")
print(tok.encode("敏感词"))   # 得到 id 列表,注意前缀空格与大小写会造成不同 id

偏置值语义

取值效果使用建议
正数(如 100)显著提高被选中概率仅用于确定性要求的开头强制,容易造成输出僵化
小数(如 5 到 20)轻微提升倾向用于表达风格微调,副作用小于极端值
0不改变分布等价于不加该条目,用于保留开关但临时失效
负数(如 -20)明显压低但不完全禁止适合抑制口头禅,仍保留语义灵活性
极端负值(如 -100)实际等于禁止该 token慎用:被禁 token 若原本必需,会出现语法破碎或反复绕行
token id 与具体分词器绑定:换模型必须重新映射,取值范围与上限也以所用服务的实现为准,不同引擎对键的格式要求可能不同。
把所有敏感词一次性列成禁止表容易产生漏网与副作用:分词切分方式决定了哪些词能被精确匹配,建议先小流量验证再全量启用。

易错点

  • 跨模型复用同一份 logit_bias:token id 语义错位,偏置打到了完全无关的词上
  • 直接用词语而非 token id:多数实现只接受映射表,传错格式会被忽略或直接报错
  • 禁止过宽导致语义残缺:把常用字或标点全部压掉后,模型绕行输出反而更冗长
  • 忽略分词的前缀差异:同一个中文词在句首与句中可能是不同 id,只压其中一个没有效果

数据来源与参考

  • OpenAI API 参考:logit_bias(platform.openai.com/docs)
  • vLLM 官方文档:SamplingParams(docs.vllm.ai)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌