首页 中文文档 采样参数

采样参数:先调哪个,别动哪个

基于 SillyTavern 1.18.0最后更新:2026-07-26
非官方文档。本站由 PokiTavern 维护,与 SillyTavern 开源项目没有隶属关系, 内容也未经该项目审核。文中的行为描述以 SillyTavern 1.18.0 源码为准,并附出处链接。

采样参数决定模型在「下一个词」的概率分布里怎么挑。模型每一步都会给出 一张候选词的概率表,采样参数做两件事:先砍掉一部分候选,再决定从剩下的里面怎么随机选。 大部分「文风不对」「老是复读」的问题都出在这一层。

最该先动的三个

temperature(temp

把概率分布拉平或拉尖。低于 1 会让高概率词更占优,输出更稳但更单调; 高于 1 则相反,更有变化也更容易跑偏。它是唯一一个绝大多数场合都值得 先调的参数。SillyTavern 自带的文本补全默认值就是 0.7, 多数模型在 0.71.1 之间表现合理。

min-p(min_p

按「相对于最高概率词的比例」砍掉尾巴。设为 0.05 意味着概率低于最高候选 5% 的词全部丢弃。它比 top-p 更适应不同的分布形状,是目前较通用的截断方式。

在模型很确定时(最高概率词遥遥领先),min-p 会自动砍得很狠;在模型犹豫时会放宽。 这正是想要的行为。常用值 0.020.1

重复惩罚(rep_pen

对已出现过的词降权。调高它是处理复读最直觉但最粗暴的办法:它不区分 「不该重复的句式」和「本来就该重复的人名、代词」,压过头会让文字变得别扭。 酒馆的默认值是 1.2,通常在 1.01.2 之间取值,再往上要谨慎。

其余截断类参数

参数做什么说明
top_k只保留概率最高的 K 个候选最粗糙的一种。设为 1 等于贪心解码,会导致逐字复读
top_p保留累计概率达到 P 的那批候选经典做法,分布很尖时可能只剩一个词
top_a按最高概率的平方比例设阈值思路与 min-p 相近
typical_p按信息量偏离度筛选倾向于挑「不过分意外也不过分平庸」的词
tfsTail-Free Sampling,按概率曲线的二阶导找尾巴较少用
nsigma按标准差设阈值较新的截断方式;发给后端时字段名可能是 top_n_sigma

这些参数互相叠加,同时开好几个通常没有好处:每一个都在砍候选,叠起来很容易 砍到只剩一个词,于是又回到了复读。一般只留一个截断类参数生效,其余置于关闭值。

进阶:动态温度、DRY、XTC

动态温度(dynatemp

让温度随分布的不确定度浮动,而不是固定一个值。你在酒馆里调的是 dynatemp(开关)、min_tempmax_tempdynatemp_exponent;请求发出前,酒馆会把这几个值换算成后端认识的字段 (dynatemp_low / dynatemp_high / dynatemp_rangedynatemp_min / dynatemp_max,视后端而定)。 模型确定时压低温度保稳,犹豫时抬高温度求变化。

DRY

DRY(Don't Repeat Yourself)专门对付成串的重复:它检测的是重复的词序列 而不是单个词,因此比 rep_pen 精准得多,不会误伤正常复现的人名。

参数包括 dry_multiplier(惩罚强度,为 0 时关闭)、 dry_base(惩罚随长度增长的底数)、dry_allowed_length (允许重复的最大长度,超过才开始罚)和 dry_penalty_last_n(回看范围)。 另有 dry_sequence_breakers 用于指定哪些符号算作序列的断点。 处理复读,DRY 通常比调高 rep_pen 更值得先试。

XTC

XTC(Exclude Top Choices)反其道而行:按概率剔除掉部分最高候选,逼模型 选次优解,用来打破套路化表达。由 xtc_threshold(候选需高于此概率才可能被剔除) 和 xtc_probability(剔除发生的概率)控制。用得过猛会明显损伤连贯性。

mirostat

另一套思路:不设固定截断,而是动态调整以维持目标困惑度。由 mirostat_modemirostat_tau(目标值)和 mirostat_eta(调整速率)控制。启用它时,通常应关闭其他截断类参数。

调参顺序建议

  1. 先把所有截断类参数关掉,只留 temp 和一个 min_p
  2. temp 到文风合适
  3. 如果出现复读,先试 DRY,而不是先加 rep_pen
  4. 确认 top_k 没有被设成 1
  5. 其余参数在确有需要时再逐个开,一次只动一个

最后一条尤其重要:同时改三个参数然后觉得「好像好了一点」,是调参最常见的浪费方式。 参数名与默认值可在 public/scripts/textgen-settings.js 中核对。

另外注意:不是每个后端都支持全部参数。端侧模型和各家云 API 支持的子集 差别很大,不被支持的参数会被静默忽略。调了没反应,先确认后端认不认。

本文讲的功能,在 PokiTavern 的安卓端可以直接用:它内嵌了一个 SillyTavern 兼容服务端,不用 Termux、不用电脑。项目开源在 GitHub