ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

textgen Parameters Tab 深度解析:采样参数、Preset 机制与源码实现

textgen Parameters Tab 深度解析:采样参数、Preset 机制与源码实现 textgen Parameters Tab 深度解析采样参数、Preset 机制与源码实现【免费下载链接】textgenOpen-source desktop app for local LLMs. Text, vision, tool-calling, OpenAI/Anthropic-compatible API. 100% private.项目地址: https://gitcode.com/GitHub_Trending/te/textgen本文基于 textgen 官方文档 Parameters Tab 编写完整覆盖 Generation 参数面板中全部采样参数、Preset 预设机制、右侧辅助控件、Instruction template 与 Character 子页的用法并结合 modules/presets.py、modules/ui_parameters.py、modules/loaders.py 中的源码逐一给出默认值、取值范围与底层实现依据。读完本文你可以独立完成本地 LLM 生成行为的调优从贪心解码切换到各类采样器、自定义 sampler 执行顺序、用 GBNF 语法约束模型输出并将一套可复用的参数组合保存为预设。1. Generation 参数面板文本生成的原理与参数总览Parameters 标签页下的 Generation 子页集中管理所有控制文本生成的参数。理解这些参数前先建立 LLM 生成的基本心智模型LLM 逐 token 生成文本。给定当前 prompt模型会为词表中每一个可能的下一个 token 计算概率分布贪心解码greedy decoding每一步永远取概率最高的 token输出完全确定采样sampling通过一系列截断分布 调整分数的采样器sampler以更非平凡的方式从分布中挑选 token目标是提升生成文本质量。textgen 的绝大多数 Generation 参数本质上就是在配置这条采样器流水线。参数面板按语义分组Curve shape曲线整形temperature、动态温度、Quadratic Sampling负责整体缩放/重塑 logits 分布Curve cutoff分布截断top_p、top_k、min_p、tfs、top_a等负责从候选分布中砍掉尾部Repetition suppression重复抑制DRY、各类 repetition penalty负责压制复读Alternative sampling methods替代采样方法Mirostat、Contrastive Search、CFG、adaptive-pOther optionsdo_sample、sampler 执行顺序等全局开关。以下按原文档的完整参数清单逐一说明并补充 modules/presets.py 中定义的默认值。1.1 基础生成参数参数含义与调参方向默认值源码max_new_tokens允许生成的最大 token 数。不要设得高于必要值它参与截断计算公式为(prompt_length) min(truncation_length - max_new_tokens, prompt_length)设太高会挤压 prompt 空间导致截断UI 上界由模型上下文决定temperature控制随机性的主参数。0 确定性只取最可能 token越高越随机。源码默认 1UI 滑块范围 0.01–5见 modules/ui_parameters.py1top_p若不为 1则只保留累计概率不超过该值的 token 集合。越高可能的随机结果范围越大1即不启用min_p丢弃概率小于(min_p) × (最高概率 token 的概率)的 token。与 top_a 类似但不对概率取平方0不启用top_k只保留概率最高的 k 个 token。越高随机结果范围越大。UI 范围 0–2000不启用repetition_penalty对已出现 token 施加的乘性惩罚。1 无惩罚越高重复越少越低重复越多1presence_penalty与 repetition_penalty 类似但在原始 token 分数上做加性偏移而非乘性因子效果往往更好。0 无惩罚越高重复越少原名additive_repetition_penalty0frequency_penalty按 token 在上下文中的出现次数线性缩放惩罚。注意对单个 token 的惩罚没有上限使用时需谨慎0repetition_penalty_rangerepetition penalty 只考虑最近 N 个 token0 表示考虑全部 token1024dry_multiplier大于 0 时启用 DRYDont Repeat Yourself采样惩罚那些会延续上下文中已出现过的序列的 token。推荐值 0.80关闭dry_allowed_length允许无惩罚重复的最长序列长度。值越小 DRY 越激进2dry_base控制 DRY 惩罚随重复序列长度增长的快慢1.75typical_p若不为 1只保留给定前文、出现概率至少是随机 token 该倍数的 token1tfsTail-Free Sampling检测分布中低概率 token 构成的尾部并整段移除。越接近 0 丢弃越多1top_a丢弃概率小于(top_a) × (最高概率 token 概率)²的 token0top_n_sigma只保留落在平均 log-probability N 个标准差以内的 token是一种随分布形状自适应的截断。0 关闭0xtc_thresholdXTCeXclusion from Top Choices采样当 2 个及以上 token 的概率超过该阈值时可能移除 top token鼓励模型少用高频词、提升创造性0.1xtc_probability满足阈值条件时 XTC 移除实际发生的概率1 总是生效0 关闭0epsilon_cutoff单位为 1e-4合理值约 3。设定一个概率下限低于它的 token 不参与采样0eta_cutoff单位为 1e-4合理值约 3。Eta Sampling 技术的主参数原理见 Eta Sampling 相关论文0guidance_scaleClassifier-Free GuidanceCFG主参数CFG 论文建议 1.5 是较好取值。可配合 negative prompt 也可不配合1penalty_alpha设为大于 0 且取消勾选 do_sample时启用 Contrastive Search应搭配较低的 top_k如 4使用0do_sample取消勾选则完全禁用采样使用贪心解码Trueseed设置 PyTorch 随机种子。注意部分 loader 不走 PyTorch尤其 llama.cpp对这些 loader seed 无效-1随机encoder_repetition_penalty又称幻觉过滤器惩罚不在前文中的 token。越高越容易贴合上下文越低越容易发散1no_repeat_ngram_size非 0 时完全禁止重复指定长度的 token 组合。越高屏蔽的短语越长。多数情况下 0 或较大值更合理01.2 高级采样方法Mirostat 系列——自适应解码方法动态控制输出的困惑度perplexity以获得更高质量文本mirostat_mode0 关闭1 论文中的经典 Mirostat 算法可能不够稳定、文字偏晃动wobbly2 改进版更稳定、困惑度更低多数场景推荐。原文档特别提示Mirostat 与 dynamic_temperature 二选一不能同时开启。mirostat_tau目标困惑度控制文本的惊喜程度。越高越多样越低越可预测。Preset Arena 建议 8 是较好取值源码默认 5。mirostat_etaMirostat 困惑度调节的学习率。越高适应越快但越不稳定越低越慢越稳。Preset Arena 建议 0.1源码默认即 0.1。动态温度 / 自适应 / 整形系列dynamic_temperature启用后温度不再是固定值而是按基于熵的缩放方式在dynatemp_low下限与dynatemp_high上限之间动态变化曲线陡峭程度由dynatemp_exponent控制。同样不要与 Mirostat 同时使用。UI 中勾选该选项后会显示dynatemp_low/dynatemp_high/dynatemp_exponent三个滑块modules/ui_parameters.py。adaptive_targetadaptive-p 采样的目标概率。该方法根据近期 token 概率的指数滑动平均EMA动态调整采样阈值。0 关闭。adaptive_decayadaptive-p 的 EMA 衰减率控制滑动平均的更新快慢历史窗口约1/(1-decay)个 token。默认 0.9UI 范围 0–0.99。smoothing_factor启用 Quadratic Sampling。0 smoothing_factor 1时 logits 分布变平 1时变尖。默认 0关闭。smoothing_curve调整 Quadratic Sampling 的衰减曲线值越大越陡仅在smoothing_factor非零时生效。默认 1。Negative prompt负向提示词仅在guidance_scale ! 1时使用配合 CFG 生效。它对 instruct 模型和自定义 system message 特别有用——把完整 prompt 填进该字段同时把 system message 替换为该模型的默认版本例如 You are Llama, a helpful assistant...让模型更加关注你的自定义 system message。1.3 sampler_priority自定义采样器执行顺序Sampler priority是一个拖拽列表让你自定义各采样器的应用顺序——列表中排在最前面的采样器最先应用因此可以定义top_p - temperature - top_k这类自定义顺序。源码中该参数默认值是一个换行分隔的字符串modules/presets.py默认顺序为repetition_penalty presence_penalty frequency_penalty dry top_n_sigma temperature dynamic_temperature quadratic_sampling top_k top_p typical_p epsilon_cutoff eta_cutoff tfs top_a min_p adaptive_p mirostat xtc encoder_repetition_penalty no_repeat_ngram可以看到默认流水线是先抑制重复 → 再整形温度曲线 → 最后截断分布。temperature_last参数会让 temperature/dynamic_temperature/quadratic_sampling强制移到栈尾并覆盖 Sampler priority 中它们的原有位置——典型用法是先用min_p等采样器砍掉低概率尾部再用高温提升创造性而不损失连贯性。2. Preset 预设机制保存、加载与内置预设2.1 界面操作Generation 面板顶部的 Preset 下拉菜单用于保存和加载参数组合下拉框选择预设切换时自动应用到全部参数 按钮保存当前参数为预设️ 删除选中的预设Restore preset把当前参数重置回所选预设文件的保存值对应 modules/presets.py 中reset_preset_for_uiNeutralize samplers把所有采样器重置为中性默认值对应neutralize_samplers_for_ui相当于一键清空所有调参 随机预设按钮生成一套随机但可解释的预设——在截断尾部 token、避免重复、压平分布三类中每类只随机取 1 个参数。即top_p与top_k不会混用repetition_penalty与frequency_penalty也不会混用。文档推荐它的用途当你连续多次点 Regenerate 都得不到满意结果时用它跳出坏循环。Filter by loader按 loader 过滤出该 loader 支持的采样器。这一点在源码中有直接依据——modules/loaders.py 的loaders_samplers字典为每个 loaderTransformers、ExLlamav3_HF、ExLlamav3、llama.cpp 等维护各自支持的采样器集合切换过滤项时通过loaders.blacklist_samplers置灰不支持的参数。2.2 预设的存储与加载实现预设文件是存放在user_data/presets/下的 YAML。modules/presets.py 的加载逻辑是先取default_preset()的全部默认值再用 YAML 文件中的键值逐项覆盖因此预设文件只需记录与默认值不同的参数。保存时generate_preset_yaml会先调用remove_defaults剔除等于默认值的键——所以仓库自带的预设文件极其精简user_data/presets/Creative.yaml仅两行min_p: 0.02xtc_probability: 0.5user_data/presets/Deterministic.yamldo_sample: falsetop_k: 1user_data/presets/Top-P.yaml仅top_p: 0.95。这三个文件就是可直接复制修改的最小预设模板新建一个user_data/presets/xxx.yaml、只写需要偏离默认值的键即可得到自己的预设。2.3 内置预设来自 Preset Arena 盲测原文档说明内置预设来自一场名为 Preset Arena 的盲测活动由数百名投票者共同评选。关键结论Instruct 模型推荐Divine Intellect、Big O、simple-1Chat 对话推荐Midnight Enigma、Yara、Shortwave。其余预设的定位Mirostat特殊的自适应解码技术最先在 llama.cpp 中实现后被移植进本仓库并适配所有 loader许多人在 chat 场景下取得了正向效果LLaMA-Precise遗留预设是 Preset Arena 之前 Web UI 的默认预设Debug-deterministic关闭采样。适合调试或你有意使用贪心解码时。2.4 portable 模式下的采样器裁剪一个容易忽略的源码细节在 portable 模式下default_preset()会把默认sampler_priority裁剪为dry、top_k、top_p、top_n_sigma、min_p、temperature、xtc、typical_p、repetition_penalty九项modules/presets.py因为该模式只捆绑 llama.cpp 后端其余采样器可能不可用。3. 面板右侧移动端为下方的辅助参数原文档在 Generation 主参数之外还有一组影响生成流程的控制项。以下逐条继承并补充源码依据Truncate the prompt up to this lengthtruncation_length防止 prompt 超过模型上下文长度。对动态分配显存的 transformers loader它同时起到 VRAM 上限作用可预防 OOM。加载模型时该值会被自动更新为模型上下文长度。源码里 modules/ui_parameters.py 的get_truncation_length展示了取值优先级若命令行显式提供了--ctx_size则用shared.args.ctx_size否则回落到shared.settings[truncation_length]。UI 说明明确超长时移除最左侧 token。Maximum number of tokens/secondmax_tokens_second限流让生成过快的模型在实时阅读时不至于刷屏。UI 范围 0–20modules/ui_parameters.py。Custom system message非空时替代 instruction template 中的默认 system message常用于定制聊天机器人性格。示例You are a duck.Custom stopping stringscustom_stopping_strings生成中一旦出现该字段中的任一字符串立即停止。注意 Chat 页生成时无论如何都内置了一些默认停止串如 chat 模式下的\nYour Name:、\nBot name:这正是参数名里带 Custom 的原因。UI 的 placeholder 即\n, \nYou:。Custom token banscustom_token_bans彻底禁止模型生成某些 token。token ID 可在 Default/Notebook 页的 Tokens 面板查到或直接查模型的tokenizer.json。UI 中以逗号分隔填写modules/ui_parameters.py。auto_max_new_tokens勾选后后端把max_new_tokens扩展到可用上下文长度上限为truncation_length。适合在 Chat 页获得长回复而不必反复点 Continue。Ban the eos_tokenEOSEnd of Sequence是模型可生成的普通候选之一一旦生成就会提前结束。勾选后禁止生成该 token生成将总是跑满max_new_tokens。Add the bos_token to the beginning of prompts默认 tokenizer 会在 prompt 前加 BOSBeginning of Sequencetoken——训练时 BOS 用于分隔不同文档。取消勾选后模型会把 prompt 理解为文档中间而非文档开头输出会显著变化、可能更有创造性。UI 注释进一步限定它只作用于文本补全Notebookchat 模式下 BOS 由模板控制modules/ui_parameters.py。Skip special tokens解码时跳过特殊 token 到文本的转换不勾选时 BOS 会显示为s、EOS 为/s等。部分特殊模型需要取消勾选此项。prompt_lookup_num_tokens启用 Prompt Lookup Decoding——Transformers loader 的一种推测解码形式通过查找 prompt 中的匹配模式猜测未来 token对重复或改写输入内容的任务可加速生成。UI 范围 0–10modules/ui_parameters.py。Activate text streaming取消勾选则整段一次性输出不逐词流式。原文档建议在 Google Colab 或--share等高延迟网络下取消勾选。Static KV cache为 Transformers loader 使用静态 KV cache 提升性能可能不兼容所有模型。4. 语法约束GBNF Grammar 控制输出格式Generation 面板右下角的两个控件配合使用Load grammar from file从user_data/grammars加载.gbnf文件到下方的 Grammar 文本框同一菜单支持保存和删除自定义语法。源码 modules/ui_parameters.py 的load_grammar就是简单地读取user_data/grammars/{name}文件内容填入grammar_string。Grammar把模型输出约束到特定格式——列表、JSON、特定词汇等。原文档评价语法非常强大强烈推荐。仓库自带多个可直接启用的语法文件例如 user_data/grammars/arithmetic.gbnf 让模型逐行输出形如2 3 5的算式root :: (expr ws term \n) expr :: term ([-*/] term)* term :: ident | num | ( ws expr ) ws ident :: [a-z] [a-z0-9_]* ws num :: [0-9] ws ws :: [ \t\n]*目录中还有 c.gbnf、json.gbnf、chess.gbnf、list.gbnf、roleplay.gbnf 等模板。注意从 modules/loaders.py 的loaders_samplers看grammar_string仅部分 loader如 Transformers、llama.cpp、ExLlamav3_HF支持使用前可在 Filter by loader 中确认当前后端是否置灰了该项。5. Chat 页的专属推理控制项以下两项不出现在 Parameters 页而在 Chat 页侧边栏对应 modules/ui_chat.py 构建的create_chat_settings_ui由 modules/ui_parameters.py 挂载到 Parameters 布局内reasoning_effort控制支持推理深度调节的模型GPT-OSS 使用的思考深度。选项low / medium / high。enable_thinking为支持该特性的模型Seed-OSS 与 2025 年 7 月之前的 Qwen3开启扩展思考模式开启后模型在给出回复前可先进行一步思考。6. Instruction template 子页定义 instruct/chat 的提示格式Parameters 页内的 Instruction template 子页定义当 Mode 选择 instruct 或 chat-instruct 时 Chat 页使用的指令模板Saved instruction templates下拉选择模板点Load应用 保存当前模板️ 删除所选模板。仓库自带模板位于 user_data/instruction-templates/包括 ChatML.yaml、Alpaca.yaml、Llama-v3.yaml、Mistral.yaml、Open Assistant.yaml、Vicuna-v1.1.yaml。Instruction template一段 Jinja2 模板定义指令式对话的 prompt 格式。Send to notebook把完整模板以字符串形式发送到 Notebook 页便于排查模型实际看到的提示。Chat template另一段 Jinja2 模板定义与角色character进行常规对话时的 prompt 格式。7. Character 页角色、用户与聊天记录管理Character 是独立的顶级标签页包含四个子页。7.1 Character 子页定义 Mode 选择 chat 或 chat-instruct 时 Chat 页使用的角色参数Character下拉选择已保存角色示例见 user_data/characters/Assistant.yaml 与 Example.yaml 保存新角色️ 删除Restore character把角色重置到最后保存的状态。Characters nameprompt 中显示的机器人名字。Context永远位于 prompt 顶部的字符串从不被截断通常定义机器人性格和对话关键要素。Greeting开场白设置后每次开启新聊天都会显示。Character picture / Your picture机器人头像 / 你的头像。机器人头像需要点 保存后才生效你的头像在所有对话中通用。占位符替换规则生成 chat prompt 时context 与 greeting 字段会发生如下替换——{{char}}和BOT替换为 Characters name{{user}}和USER替换为 Your name。因此角色定义里可以使用这些占位符它们在 TavernAI 角色卡中也很常见。7.2 User 子页创建与管理用户档案示例见 user_data/users/Default.yamlUser下拉选择、 保存、️ 删除用户档案Nameprompt 中显示的你的名字Description可选的自我描述可被对话引用。7.3 Chat history 子页支持以 JSON 格式下载当前聊天记录以及上传之前保存的聊天记录。上传时会新建一个聊天来容纳历史记录——不会丢失 Chat 页当前的对话。7.4 Upload character 子页支持两种角色上传格式YAML or JSON上传 Web UI 自身格式的角色YAML可附带头像TavernAI PNG上传 TavernAI 角色卡 PNG上传后自动转换为 Web UI 内部 YAML 格式。8. 调参实践建议与验证路径结合原文档与源码给出一套可落地的调参顺序先选预设再微调用 Preset 下拉载入与模型类型匹配的预设instruct 模型取 Divine Intellect / Big O / simple-1 一类chat 角色取 Midnight Enigma / Yara / Shortwave 一类只改动需要偏离的少数参数——预设文件本身也只存偏离值这正是推荐的小步调参方式单一截断器原则按 按钮的设计逻辑同一语义类别尾部截断 / 重复抑制尽量只开一个采样器避免top_ptop_k或repetition_penaltyfrequency_penalty互相干扰遇到复读优先试 DRYdry_multiplier 0.8文档推荐值默认 0 关闭配合dry_allowed_length、dry_base微调强度需要严格格式输出时上 Grammar从 user_data/grammars/ 复制现成.gbnf修改而不是手写复杂约束调试时关闭采样载入do_sample: false的确定性预设参照 user_data/presets/Deterministic.yaml 的写法复现问题或用 Debug-deterministic 预设固定行为验证 loader 兼容性调任何采样器前用 Filter by loader 确认当前后端支持源码级依据是 modules/loaders.py 中按 loader 划分的loaders_samplers集合——例如 ExLlamav3 支持集较小不含 DRY、Mirostat 与 grammar。以上参数与机制均可在当前仓库中直接对照参数默认值见 modules/presets.py界面控件与取值范围见 modules/ui_parameters.py原文档全文见 docs/03 - Parameters Tab.md。【免费下载链接】textgenOpen-source desktop app for local LLMs. Text, vision, tool-calling, OpenAI/Anthropic-compatible API. 100% private.项目地址: https://gitcode.com/GitHub_Trending/te/textgen创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表