适用对象:已经接触过 API / Ollama / 本地模型部署,希望系统理解大模型生成流程与常见参数的学习者。
核心目标:理解模型不是一次性写完整答案,而是不断预测“下一个 token”。
快速索引
按问题查
一句话总表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| model / messages / input # 决定用哪个模型、给模型什么上下文 max_tokens / max_output_tokens # 控制最多生成多长 num_predict # Ollama / 本地模型里常见的输出长度上限 stop / stop_sequences # 命中特定字符串就刹车 temperature # 控制随机性,低温稳,高温发散 top_p # 只保留累计概率达到 p 的候选 top_k # 只保留前 K 个候选,本地模型常见 min_p # 过滤相对最高概率太低的候选,本地模型常见 typical_p # 典型采样,控制局部自然度 mirostat # 动态控制随机程度,本地长文常见 logit_bias # 直接给指定 token 加分或扣分 frequency_penalty # 出现越多,惩罚越大 presence_penalty # 出现过就惩罚,鼓励新内容 repeat_penalty # 本地模型重复惩罚 repeat_last_n # 回看多少 token 判断重复 seed # 固定随机种子,方便复现实验 logprobs / top_logprobs # 返回 token 概率,方便调试 num_ctx / context window # 上下文窗口大小 num_keep / n_keep # 上下文滑动时保留开头 token stream # 是否边生成边返回 format / response_format # JSON / Schema / grammar 格式约束 tools / tool_choice # 工具调用相关 reasoning.effort / think # 推理模型的思考预算或思考开关 verbosity # 控制输出详略,部分 API 支持 keep_alive # Ollama 模型驻留内存时间 num_gpu / num_thread # 本地推理硬件调度 timeout / retry # 客户端超时和重试策略 base_url / api_key # API 地址和鉴权
|
0. 使用约定
0.1 名词约定
1 2 3 4 5
| API 模型 # OpenAI、Anthropic、Gemini、云服务模型等 本地模型 # Ollama、llama.cpp、LM Studio、vLLM 等本地或自部署模型 生成端参数 # 影响输出文本的参数,如 temperature、top_p、stop 运行端参数 # 影响推理性能的参数,如 num_ctx、num_batch、num_gpu 应用端参数 # 影响编排体验的参数,如 stream、tools、format、store
|
0.2 参数名字会因平台不同而变化
1 2 3 4 5
| OpenAI:max_output_tokens、temperature、top_p、text.format、tools 旧 Chat Completions:max_tokens、messages、response_format Anthropic:max_tokens、stop_sequences、thinking、tool_choice Ollama:num_predict、num_ctx、repeat_penalty、keep_alive、format llama.cpp:n_predict、n_ctx、top_k、min_p、typ_p、mirostat、samplers
|
同一个概念,不同平台可能叫不同名字。
0.3 不要迷信默认值
1 2 3 4
| 默认值会随模型、平台、SDK、服务版本变化 同名参数在不同模型上可能有不同范围 有些推理模型不支持传统采样参数 生产环境要固定配置并记录版本
|
1. 核心心智模型
大模型生成文本的本质是:
1 2 3 4 5
| 读入上下文 预测下一个 token 把 token 接回上下文 再预测下一个 token 直到停止
|
可以用一句口诀记:
1 2 3 4
| 先切词,再算分; 先改分,再抽样; 抽一个,接回去; 看停没,继续跑。
|
1.1 模型不是一次性写完整答案
例如用户输入:
模型第一步可能生成:
上下文变成:
下一步继续预测:
这就是为什么模型有时会“越说越偏”:
1 2 3 4
| 前面生成错了 错误内容进入上下文 后续 token 继续受错误内容影响 最后整体答案越来越歪
|
2. 完整生成流水线
2.1 总流程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| Prompt / Messages / Input ↓ Tokenizer 分词 ↓ Prefill:模型读完整上下文,建立 KV Cache ↓ Decode 循环: 模型计算下一个 token 的 logits ↓ logit_bias / penalty / grammar / tool mask 修改 logits ↓ temperature / top_p / top_k / min_p / mirostat 采样 ↓ 选出一个 token ↓ 拼回上下文,更新 KV Cache ↓ 检查 max_tokens / stop / EOS / tool call / timeout ↓ stream 返回或缓存到最后一次性返回
|
2.2 两个核心阶段
| 阶段 |
名称 |
作用 |
性能特点 |
| 阶段一 |
Prefill / Prompt Processing |
读取完整 Prompt、历史消息、RAG、工具定义 |
输入越长越慢,KV Cache 越大 |
| 阶段二 |
Decode / Generation |
一个 token 一个 token 地生成输出 |
输出越长越慢,通常串行 |
2.3 应用端能控制哪些地方
1 2 3 4 5 6 7 8
| 输入组装 # system / developer / user / history / RAG / tools 上下文裁剪 # 摘要、滑动窗口、保留 system prompt 采样策略 # temperature / top_p / top_k / min_p / seed 重复控制 # penalties / repeat_penalty / dry 输出格式 # JSON schema / grammar / stop 工具编排 # tools / tool_choice / parallel_tool_calls 返回方式 # stream / 非 stream 运行性能 # num_ctx / batch / GPU offload / keep_alive
|
3. 输入层:Prompt、Messages 与上下文组装
3.1 Chat API 不是只有用户一句话
常见输入是消息数组:
1 2 3 4 5 6 7 8 9 10
| [ { "role": "system", "content": "你是一个严谨的数学老师" }, { "role": "user", "content": "解释一下二次函数" } ]
|
3.2 应用端常拼进去的内容
1 2 3 4 5 6 7 8 9
| system prompt # 角色、边界、语气、全局规则 developer prompt # 应用开发者规则,部分平台支持 user message # 用户本轮输入 conversation history # 历史对话 RAG context # 检索到的文档片段 tool/function schema # 可用工具定义 output format instruction # JSON、表格、固定字段等 safety instruction # 安全策略、拒答边界 metadata # 用户 ID、会话 ID、业务标签
|
教学类比:
1 2
| Prompt 像考试卷。 题干、背景资料、答题要求、评分标准、可用工具都被拼在一起。
|
3.3 输入顺序很重要
1 2 3 4 5
| 系统规则放前面 长期记忆放前面或单独注入 RAG 资料靠近用户问题 输出格式要求放在用户问题附近或明确重复 不要把互相冲突的规则混在一起
|
3.4 常见输入层参数
| 参数 |
常见平台 |
作用 |
model |
几乎所有平台 |
选择模型 |
messages |
Chat API / Ollama Chat |
多轮消息数组 |
input |
OpenAI Responses |
文本、消息、图片、文件等输入 |
instructions |
OpenAI Responses |
插入模型上下文的系统/开发者指令 |
system |
Ollama Generate |
覆盖 Modelfile 的 system message |
template |
Ollama |
覆盖模型 Prompt 模板 |
raw |
Ollama |
跳过模板,直接使用完整 prompt |
previous_response_id |
OpenAI Responses |
接续上一轮 response,维护会话状态 |
conversation |
OpenAI Responses |
使用服务端 conversation 状态 |
metadata |
多平台 |
业务追踪、过滤、分析 |
4. Tokenizer:文字变 token ID
模型不能直接处理自然语言文字,它处理的是 token ID。
例如:
可能被切成:
再映射成数字:
1
| [37046, 99872, 15321, 88490]
|
4.1 token 不等于字,也不等于词
1 2 3 4
| 一个英文单词可能是一个 token,也可能拆成多个 token 一个中文词可能是一个 token,也可能拆成多个 token 一个标点、空格、换行也可能占 token 不同模型 tokenizer 不一样
|
4.2 token 会影响哪些功能
| 功能 |
影响 |
context window / num_ctx |
上下文窗口按 token 计数 |
max_tokens / num_predict |
输出长度按 token 计数 |
stop |
停止字符串可能跨 token |
logit_bias |
是 token 级控制,不是词级控制 |
top_logprobs |
返回 token 级概率 |
| 计费 |
多数 API 按输入/输出 token 计费 |
4.3 估算 token 的经验
1 2 3 4 5
| 英文:1 token 约 3~4 个字符,粗略估算 中文:1 token 可能接近 1~2 个汉字,取决于 tokenizer 代码:符号、缩进、换行会增加 token JSON:字段名、引号、括号都占 token RAG:重复片段会浪费大量 token
|
5. Prefill、Decode 与 KV Cache
5.1 Prefill 是读题阶段
模型先读完整输入:
1 2 3 4 5 6
| system prompt history user message RAG content tool schema format instruction
|
这个阶段叫:
1
| Prefill / Prompt Processing
|
5.2 Decode 是答题阶段
1 2 3 4 5
| 生成第 1 个 token 生成第 2 个 token 生成第 3 个 token ... 直到停止
|
5.3 KV Cache 是什么
KV Cache 缓存上下文中每个 token 的 Key / Value 信息。
作用:
1 2
| 后续生成新 token 时,不需要每次重新计算完整上下文 只需要处理新 token,并复用之前缓存
|
5.4 为什么长上下文耗显存
1 2 3 4 5 6
| 上下文 token 越多 KV Cache 越大 显存 / 内存占用越高 并发越高 每个请求都要占一份或多份 KV Cache 总占用继续放大
|
5.5 num_ctx 不要盲目拉大
1 2 3 4 5
| 更大的 num_ctx 不等于更聪明 长上下文会增加 prefill 延迟 长上下文会增加 KV Cache 占用 模型在超长上下文中也可能注意力稀释 RAG 要先筛资料,不是全塞进去
|
6. Logits、Softmax 与概率分布
6.1 logits 是原始分
模型每一步都会为词表里的每个 token 打分,这个分数叫 logits。
例如输入:
可能得到:
| 候选 token |
logit 原始分 |
| 北京 |
8.5 |
| 上海 |
3.1 |
| 南京 |
2.7 |
| 巴黎 |
-1.2 |
| 苹果 |
-3.4 |
注意:
1 2 3
| logits 不是概率 logits 可以是负数 logits 经过修改和 softmax 后才变成概率分布
|
6.2 softmax 把分数变概率
经过 softmax 后:
| token |
概率 |
| 北京 |
98.7% |
| 上海 |
0.9% |
| 南京 |
0.4% |
| 巴黎 |
接近 0% |
核心理解:
1 2
| 大模型不是直接写答案 而是在概率分布里选择下一个 token
|
7. 改 logits:logit_bias、penalty、grammar mask
采样之前,应用端或推理引擎可以修改 logits。
7.1 logit_bias
作用:
示例:
1 2 3 4 5 6 7
| 原始: "北京": 8.5 "上海": 3.1
给“上海”加 bias 后: "北京": 8.5 "上海": 8.1
|
结果:“上海”被抽中的概率会提高。
注意:
1 2 3
| logit_bias 是 token 级控制 你以为禁止了一个词,可能只禁止了这个词的一种 token 形式 空格、大小写、前缀、中文分词都可能导致漏网
|
7.2 penalty
常见惩罚参数:
| 参数 |
逻辑 |
适合 |
frequency_penalty |
出现次数越多,扣分越多 |
减少“非常非常非常” |
presence_penalty |
只要出现过就扣分 |
鼓励新话题 |
repeat_penalty |
本地模型常见,降低最近重复 token 概率 |
抑制复读 |
repeat_last_n |
回看最近多少 token 判断重复 |
控制重复检测范围 |
penalize_newline |
是否惩罚换行 |
控制模型换行倾向 |
dry_multiplier |
llama.cpp 的重复序列惩罚 |
抑制短语级复读 |
7.3 grammar mask / JSON schema
格式约束会把不合法 token 的概率压掉。
例如要求输出 JSON:
1 2 3 4
| { "name": "string", "age": 18 }
|
模型在某些位置只能输出:
这类约束常见于:
1 2 3 4 5
| JSON schema grammar regex grammar function arguments tool call arguments
|
8. 采样参数:temperature、top_p、top_k、min_p
8.1 temperature
temperature 通常作用在 logits 上:
1
| new_logits = logits / temperature
|
低温:
效果:
适合:
1 2 3 4 5
| 客服问答 RAG 问答 代码修复 结构化抽取 数学 / 逻辑任务
|
高温:
效果:
适合:
8.2 temperature = 0
1 2 3 4
| 通常接近 greedy decoding 也就是每步选概率最高的 token 但不同平台实现细节不完全一致 不保证跨机器、跨版本、跨并发完全一致
|
8.3 top_k
top_k:只保留前 K 个候选。
例如:
只从排名前三的 token 中采样。
特点:
| 优点 |
缺点 |
| 简单直接,能过滤长尾低质量 token |
K 是固定值,不够自适应 |
常见范围:
8.4 top_p
top_p 也叫 nucleus sampling。
逻辑:
1 2 3
| 从最高概率 token 开始累加 直到累计概率达到 p 只在这批 token 中采样
|
示例:
| token |
概率 |
累计概率 |
| 北京 |
70% |
70% |
| 上海 |
10% |
80% |
| 南京 |
8% |
88% |
| 广州 |
4% |
92% |
如果:
保留:
8.5 top_k 和 top_p 对比
| 参数 |
逻辑 |
更适合 |
top_k |
固定保留前 K 个 |
本地模型、简单截断 |
top_p |
保留累计概率达到 p 的集合 |
通用 API、自适应采样 |
8.6 min_p
min_p 通常相对于最高概率 token 过滤。
例如最高概率:
如果:
保留概率至少:
低于 6% 的 token 被过滤掉。
适合:
1 2 3
| 过滤长尾噪声 保持一定多样性 本地模型替代或配合 top_p
|
8.7 typical_p
typical_p 是“局部典型采样”。
粗略理解:
1 2
| 不只看概率高低 还看 token 在当前上下文里是不是“典型”
|
适合:
1 2 3
| 长文本生成 希望自然但不太死板 本地模型采样实验
|
8.8 tfs_z
tfs_z 是 Tail Free Sampling。
作用:
1 2
| 削掉概率分布尾部变化很小的低质量候选 减少离谱长尾 token
|
常见:
8.9 xtc
xtc 是 llama.cpp 新采样器之一。
常见参数:
1 2
| xtc_probability xtc_threshold
|
粗略用途:
1 2 3
| 在可控范围内避免总是选择太常见的 token 增加表达变化 适合实验,不建议新手一上来就调
|
9. 重复惩罚参数
9.1 frequency_penalty
逻辑:
适合抑制:
建议:
1 2 3
| 0.0 ~ 0.3:轻微抑制重复 0.3 ~ 0.8:明显鼓励换词 > 1.0:可能让输出变怪
|
9.2 presence_penalty
逻辑:
效果:
适合:
9.3 repeat_penalty
本地模型常见。
示例:
1 2
| repeat_penalty = 1.1 repeat_last_n = 64
|
含义:
1 2 3
| 生成下一个 token 时 检查最近 64 个 token 降低重复 token 的概率
|
常见范围:
1
| repeat_penalty = 1.05 ~ 1.2
|
9.4 repeat_last_n
1 2 3
| repeat_last_n = 64 # 只看最近 64 token repeat_last_n = 256 # 看更长范围 repeat_last_n = -1 # 某些引擎表示看整个上下文
|
注意:
1 2
| 范围太小:长距离复读压不住 范围太大:正常主题词也被惩罚
|
9.5 dry
llama.cpp 中常见的 DRY 采样器用于抑制重复序列。
常见参数:
1 2 3 4
| dry_multiplier dry_base dry_allowed_length dry_penalty_last_n
|
适合:
1 2 3
| 模型反复输出同一句话 长文重复段落 列表项模板化复读
|
10. Mirostat 与动态采样
10.1 mirostat 是什么
普通采样参数是固定规则,mirostat 更像自动调节器。
目标:
10.2 常见参数
| 参数 |
含义 |
mirostat |
0 关闭,1 / 2 开启不同版本 |
mirostat_tau / mirostat_ent |
目标随机度 / 目标熵 |
mirostat_eta / mirostat_lr |
调整速度 |
10.3 怎么理解 tau 和 eta
1 2 3 4 5
| tau 越高:更发散 tau 越低:更保守
eta 越高:调整更快 eta 越低:调整更慢
|
适合:
1 2 3
| 本地模型长文本生成 防止越写越无聊 防止越写越失控
|
11. 停止条件与长度控制
每生成一个 token 后,系统会检查是否该停止。
11.1 常见停止条件
| 停止条件 |
说明 |
max_tokens |
旧 Chat API 或部分平台最大输出 token 数 |
max_output_tokens |
OpenAI Responses API 输出上限 |
num_predict / n_predict |
Ollama / llama.cpp 输出 token 上限 |
stop / stop_sequences |
命中特定字符串就停止 |
| EOS token |
模型自己输出结束标记 |
| tool call |
模型输出工具调用,进入工具执行阶段 |
| JSON schema 完成 |
结构化输出闭合后停止 |
| timeout |
服务端或客户端超时 |
| user cancel |
前端中断、用户取消 |
11.2 max_tokens / max_output_tokens / num_predict
1 2 3
| max_tokens = 200 max_output_tokens = 200 num_predict = 200
|
含义:
1 2
| 最多生成 200 个 token 不是 200 个字
|
11.3 stop sequence
示例:
1 2 3
| { "stop": ["用户:", "</answer>", "\n\n###"] }
|
用途:
1 2 3 4 5
| 防止模型继续扮演用户 控制多轮对话模板 结束结构化片段 Agent 分段控制 避免输出后续无关内容
|
注意:
1 2 3 4
| stop 是字符串层面的匹配 可能跨 token 有些平台返回内容不包含 stop 字符串 有些平台会返回 stop_reason / done_reason
|
11.4 EOS token
EOS = End Of Sequence。
含义:
本地引擎里有时可以设置:
高危:
1 2
| 模型可能停不下来 需要配合 max token 或 stop
|
12. 返回方式:stream 与非流式
12.1 非流式返回
模型生成完整答案后一次性返回。
1 2 3
| { "content": "中国的首都是北京。" }
|
优点:
1 2 3 4
| 实现简单 方便整体校验 适合结构化 JSON 适合短回答
|
缺点:
12.2 流式返回 stream
模型边生成边返回。
示意:
1 2 3 4 5 6
| 中 中国 中国的 中国的首都 中国的首都是北京 中国的首都是北京。
|
真实接口通常返回 delta chunk:
1 2 3 4
| {"delta": "中国"} {"delta": "的首都"} {"delta": "是北京"} {"delta": "。"}
|
优点:
1 2 3 4
| 首 token 延迟低 用户体验更好 适合长回答、聊天、写作助手 可以边生成边显示、边 TTS、边做取消
|
缺点:
1 2 3 4
| 前端拼接更复杂 中途错误处理更复杂 JSON 在中途通常不完整 要处理断线、重试、取消、光标状态
|
重要提醒:
1 2 3
| stream 只影响返回方式 不会让模型更聪明 不会提高答案准确率
|
12.3 stream chunk size
有些系统会在应用层控制 chunk 大小:
1 2
| 更小 chunk:更实时,但网络和 UI 更新更频繁 更大 chunk:更省开销,但显示延迟更明显
|
13. 结构化输出与格式约束
13.1 JSON mode
常见写法:
或:
1 2 3 4 5
| { "response_format": { "type": "json_object" } }
|
特点:
1 2 3 4
| 通常只能保证是合法 JSON 不一定保证字段完整或类型严格正确 必须在 prompt 里明确要求输出 JSON 否则某些模型可能输出大量空白或奇怪内容
|
13.2 JSON Schema / Structured Outputs
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| { "text": { "format": { "type": "json_schema", "name": "person_info", "strict": true, "schema": { "type": "object", "properties": { "name": { "type": "string" }, "age": { "type": "integer" } }, "required": ["name", "age"], "additionalProperties": false } } } }
|
适合:
1 2 3 4 5
| 信息抽取 表单填充 分类打标 业务系统入库 Agent 工具参数生成
|
13.3 grammar
一些本地推理或 API 支持 grammar:
1 2 3
| { "grammar": "root ::= ..." }
|
用途:
1 2 3 4
| 强约束 DSL 固定格式命令 SQL / 表达式子集 特定业务协议
|
13.4 结构化输出排错
1 2 3 4 5 6
| JSON 截断:增大 max_output_tokens 字段缺失:schema 写 required 类型错:schema 写 enum / integer / number 多余字段:additionalProperties = false 模型输出解释文字:开启 schema 或加强格式要求 流式 JSON 中途无法 parse:等 done 后再 parse,或用增量 parser
|
14. 工具调用参数
tools 描述模型可以调用哪些工具。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| { "tools": [ { "type": "function", "name": "get_weather", "description": "查询城市天气", "parameters": { "type": "object", "properties": { "city": { "type": "string" } }, "required": ["city"] } } ] }
|
常见语义:
1 2 3 4
| auto # 模型自己决定是否调用工具 none # 禁止调用工具 required # 必须调用工具 指定工具 # 强制调用某个工具
|
1 2
| true:允许模型一次请求多个工具调用 false:一次只允许一个工具调用
|
适合开启:
1 2 3
| 多个互不依赖的查询 并行查天气、库存、价格 批量读取多个资料源
|
适合关闭:
1 2 3
| 工具有副作用 需要严格顺序 下一个工具依赖上一个工具结果
|
14.4 工具调用流程
1 2 3 4 5 6 7 8 9 10 11
| 用户问题 ↓ 模型判断需要工具 ↓ 输出 tool_call 和 arguments ↓ 应用端执行真实函数 ↓ 把 tool result 追加回上下文 ↓ 模型基于结果生成最终回答
|
14.5 工具调用常见坑
1 2 3 4 5 6
| 工具描述太模糊,模型不会用 参数 schema 太宽,模型乱填 工具返回太长,占满上下文 工具有副作用但没有确认步骤 工具执行失败没有把错误回传给模型 并行工具调用导致顺序问题
|
15. 推理模型参数
15.1 reasoning.effort
推理模型常见参数:
1 2 3 4 5
| { "reasoning": { "effort": "medium" } }
|
常见值:
1
| none / minimal / low / medium / high / xhigh
|
具体支持值取决于模型。
作用:
1 2 3 4
| 控制模型在内部推理上花多少预算 越高通常越慢、越贵、推理 token 越多 复杂数学、代码、规划更适合提高 简单问答、分类、抽取可以降低
|
15.2 reasoning.summary
1 2 3 4 5
| { "reasoning": { "summary": "concise" } }
|
用途:
1 2 3 4
| 返回推理过程摘要 方便调试模型为什么这么答 不等于完整隐藏思维链 生产环境一般谨慎展示
|
15.3 think
Ollama 等本地接口里常见:
含义:
1 2 3 4
| 对支持 thinking 的模型,控制是否在响应中包含思考内容 有的平台支持 true / false 有的平台支持 low / medium / high 具体看模型和服务实现
|
llama.cpp / OpenAI 兼容服务里可能见到:
1 2 3
| reasoning_format reasoning_in_content chat_format
|
用途:
1 2 3
| 控制推理内容是否单独字段返回 控制是否混在 content 中 适配不同模型模板
|
15.5 调参建议
| 场景 |
建议 |
| 简单分类 |
低 reasoning,低输出 |
| 代码审查 |
medium / high |
| 数学证明 |
high |
| Agent 多步骤规划 |
medium 起步,失败再加 |
| RAG 摘要 |
usually low / medium |
| 低延迟客服 |
尽量低 |
16. 通用参数速查表
| 参数 |
所属环节 |
作用 |
常见用途 |
model |
输入 |
选择模型 |
成本、速度、能力 |
messages / input |
输入 |
给模型上下文 |
对话、任务、RAG |
instructions / system |
输入 |
全局规则 |
角色、边界、格式 |
temperature |
采样 |
控制随机性 |
低温稳,高温发散 |
top_p |
采样 |
nucleus sampling |
自适应候选集合 |
top_k |
采样 |
保留前 K 个候选 |
本地模型常见 |
min_p |
采样 |
过滤低相对概率候选 |
本地模型长文 |
typical_p |
采样 |
典型采样 |
本地自然文本 |
mirostat |
采样 |
动态控制随机度 |
长文生成 |
seed |
采样 |
固定随机种子 |
实验复现 |
logprobs / top_logprobs |
调试 |
返回 token 概率 |
置信度、排查 |
logit_bias |
logits |
指定 token 加减分 |
禁词、偏好词 |
frequency_penalty |
logits |
次数越多惩罚越大 |
减少复读 |
presence_penalty |
logits |
出现过就惩罚 |
鼓励新内容 |
repeat_penalty |
logits |
本地重复惩罚 |
抑制复读 |
repeat_last_n |
logits |
重复检测窗口 |
控制惩罚范围 |
max_tokens |
停止 |
最大输出 token |
控成本、防跑飞 |
max_output_tokens |
停止 |
OpenAI Responses 输出上限 |
控输出长度 |
num_predict |
停止 |
Ollama 输出上限 |
本地生成长度 |
stop |
停止 |
命中字符串停止 |
模板、Agent |
stream |
返回 |
边生成边返回 |
交互体验 |
format |
输出 |
JSON / Schema |
结构化输出 |
tools |
编排 |
工具定义 |
Function Calling |
tool_choice |
编排 |
工具选择策略 |
强制/禁止工具 |
parallel_tool_calls |
编排 |
并行工具调用 |
提升工具吞吐 |
metadata |
应用 |
业务附加信息 |
日志、归因、筛选 |
user / safety_identifier |
应用 |
稳定用户标识 |
风控、审计 |
timeout |
客户端 |
请求超时 |
防卡死 |
retry |
客户端 |
失败重试策略 |
抗网络波动 |
base_url |
客户端 |
API 服务地址 |
代理、私有化 |
api_key |
客户端 |
鉴权密钥 |
认证 |
reasoning.effort |
推理 |
推理预算 |
复杂任务 |
think |
推理 |
是否输出思考 |
本地思考模型 |
num_ctx |
上下文 |
上下文窗口 |
长文/RAG |
num_keep |
上下文 |
滑窗保留开头 |
保留系统提示 |
keep_alive |
运行 |
模型驻留内存 |
降低冷启动 |
num_gpu |
运行 |
GPU offload |
本地加速 |
num_thread |
运行 |
CPU 线程数 |
CPU 推理 |
num_batch |
运行 |
prompt 批大小 |
Prefill 性能 |
use_mmap |
加载 |
内存映射 |
本地模型加载 |
use_mlock |
加载 |
锁内存 |
减少换出 |
17. Ollama 参数速查
17.1 Generate 请求常用结构
1 2 3 4 5 6 7 8 9 10
| { "model": "llama3.2", "prompt": "解释一下 KV Cache", "stream": false, "options": { "temperature": 0.3, "top_p": 0.9, "num_predict": 300 } }
|
17.2 Chat 请求常用结构
1 2 3 4 5 6 7 8 9 10 11
| { "model": "llama3.2", "messages": [ { "role": "system", "content": "你是一个严谨的老师" }, { "role": "user", "content": "解释一下 top_p" } ], "stream": true, "options": { "temperature": 0.5 } }
|
17.3 Ollama 外层参数
| 参数 |
作用 |
model |
模型名 |
prompt |
generate 模式输入 |
messages |
chat 模式消息 |
system |
覆盖 Modelfile 的 system |
template |
覆盖 Prompt 模板 |
raw |
不套模板,直接使用 prompt |
format |
json 或 JSON Schema |
stream |
是否流式 |
keep_alive |
响应后模型驻留内存多久 |
think |
thinking 模型是否思考 |
tools |
工具调用定义 |
images |
多模态图片输入 |
17.4 Ollama options 常用生成参数
| 参数 |
作用 |
num_predict |
最大生成 token 数 |
temperature |
随机性 |
top_k |
保留前 K 个候选 |
top_p |
nucleus sampling |
min_p |
最小相对概率 |
typical_p |
典型采样 |
repeat_last_n |
重复惩罚回看窗口 |
repeat_penalty |
重复惩罚强度 |
presence_penalty |
出现过就惩罚 |
frequency_penalty |
出现越多惩罚越大 |
penalize_newline |
是否惩罚换行 |
stop |
停止字符串 |
seed |
随机种子 |
17.5 Ollama options 常用运行参数
| 参数 |
作用 |
num_ctx |
上下文窗口大小 |
num_keep |
上下文滑动时保留开头 token |
num_batch |
Prompt 处理批大小 |
num_gpu |
GPU offload 层数或 GPU 使用 |
main_gpu |
主 GPU |
num_thread |
CPU 线程数 |
use_mmap |
内存映射加载 |
use_mlock |
锁定内存,减少换出 |
numa |
NUMA 优化 |
17.6 keep_alive 用法
1 2 3 4 5
| { "model": "llama3.2", "prompt": "", "keep_alive": "10m" }
|
含义:
1 2 3
| 空 prompt 可用于预加载模型 keep_alive 控制模型生成后留在内存多久 keep_alive = 0 可卸载模型
|
适合:
1 2 3
| 低频调用:keep_alive 短一点,省内存 高频调用:keep_alive 长一点,减少冷启动 固定服务:可以设为 24h 或更长,但要看内存
|
18. llama.cpp 参数速查
18.1 采样链
llama.cpp server 支持配置采样器顺序。
常见链路:
1 2 3 4 5 6 7 8
| penalties dry top_k typ_p top_p min_p xtc temperature
|
顺序会影响最终分布。
18.2 常用生成参数
| 参数 |
作用 |
n_predict / max_tokens |
最大生成 token 数 |
temperature / temp |
随机性 |
top_k |
前 K 截断 |
top_p |
累计概率截断 |
min_p |
最小相对概率 |
typ_p / typical_p |
典型采样 |
seed |
随机种子 |
stop |
停止字符串 |
ignore_eos |
忽略 EOS |
logit_bias |
token 偏置 |
n_probs |
返回 top token 概率数量 |
return_tokens |
返回 token ID |
18.3 重复控制参数
| 参数 |
作用 |
repeat_last_n |
回看多少 token |
repeat_penalty |
重复惩罚 |
frequency_penalty |
频率惩罚 |
presence_penalty |
存在惩罚 |
dry_multiplier |
DRY 惩罚强度 |
dry_allowed_length |
允许重复长度 |
dry_penalty_last_n |
DRY 回看窗口 |
18.4 运行参数
| 参数 |
作用 |
n_ctx |
上下文窗口 |
n_batch |
prompt 处理批大小 |
n_keep |
保留开头 token |
n_discard |
上下文满后丢弃多少 |
cache_prompt |
复用 KV Cache |
id_slot |
指定 server slot |
timings_per_token |
返回每 token 耗时 |
return_progress |
stream 时返回 prefill 进度 |
lora |
请求级 LoRA adapter |
18.5 speculative decoding
常见参数:
1 2 3
| speculative.n_max speculative.n_min speculative.p_min
|
用途:
1 2 3 4
| 使用 draft model 预测多个 token 主模型验证 提升生成速度 但配置复杂,结果受模型和硬件影响
|
19. OpenAI Responses API 参数速查
19.1 最小请求
1 2 3 4
| { "model": "<model-name>", "input": "解释一下 temperature 和 top_p 的区别" }
|
19.2 常用文本请求
1 2 3 4 5 6 7 8 9
| { "model": "<model-name>", "instructions": "你是一个严谨的技术讲师,回答要结构清晰。", "input": "解释一下 KV Cache", "max_output_tokens": 600, "temperature": 0.3, "top_p": 0.9, "stream": false }
|
19.3 常用参数表
| 参数 |
作用 |
model |
选择模型 |
input |
输入文本、消息、图片、文件等 |
instructions |
插入模型上下文的系统/开发者消息 |
max_output_tokens |
输出 token 上限 |
temperature |
采样温度 |
top_p |
nucleus sampling |
top_logprobs |
返回每步 top token logprob |
text.format |
文本 / JSON Schema 等输出格式 |
text.verbosity |
控制输出详略,部分模型支持 |
reasoning.effort |
推理预算 |
reasoning.summary |
推理摘要 |
tools |
工具定义 |
tool_choice |
工具选择策略 |
parallel_tool_calls |
是否允许并行工具调用 |
previous_response_id |
接续上一轮响应 |
conversation |
使用服务端会话 |
stream |
SSE 流式返回 |
stream_options |
流式选项 |
store |
是否存储响应供后续检索 |
truncation |
输入超上下文时是否自动截断 |
prompt_cache_key |
提高相似请求缓存命中 |
prompt_cache_retention |
Prompt cache 保留策略 |
service_tier |
服务处理层级 |
safety_identifier |
稳定用户标识,用于安全风控 |
19.4 text.format
普通文本:
1 2 3 4 5 6 7
| { "text": { "format": { "type": "text" } } }
|
JSON Schema:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| { "text": { "format": { "type": "json_schema", "name": "answer", "strict": true, "schema": { "type": "object", "properties": { "summary": { "type": "string" }, "items": { "type": "array", "items": { "type": "string" } } }, "required": ["summary", "items"], "additionalProperties": false } } } }
|
19.5 truncation
1 2 3
| { "truncation": "auto" }
|
含义:
1 2
| auto:输入超过上下文窗口时,自动从对话开头丢弃部分内容 disabled:默认,不自动截断,超限时报错
|
建议:
1 2 3
| 生产环境不要悄悄丢重要上下文 关键业务优先自己做上下文裁剪和摘要 truncation=auto 适合非关键聊天或兜底
|
20. 更多应用端参数
这些参数不一定直接改变“下一个 token 怎么采样”,但真实业务里经常会用到。
20.1 logprobs / top_logprobs
用途:
1 2 3 4
| 查看每一步最可能的 token 分析分类任务置信度 排查模型为什么选了某个词 做自动评估和可视化
|
注意:
1 2 3
| 不是所有模型和接口都支持 返回体会明显变大 logprob 是 token 级,不是整句级
|
20.2 n / candidate_count
用途:
1 2 3 4
| 一次生成多个候选答案 让应用端自己 rerank 创意写作多方案 分类任务投票
|
代价:
1 2 3
| 输出 token 成本接近成倍增加 延迟也会上升 很多新接口不再推荐大量使用 n
|
20.3 best_of
含义:
注意:
1 2 3
| 不是所有平台支持 成本通常按生成过的候选计算 生产环境更常见做法是应用端多次请求 + 自己评分
|
20.4 modalities / audio / image
多模态接口常见:
1 2 3
| { "modalities": ["text", "audio"] }
|
音频输出参数可能长这样:
1 2 3 4 5 6
| { "audio": { "voice": "alloy", "format": "mp3" } }
|
用途:
1 2 3 4
| 文本 + 语音输出 图像理解 截图问答 语音对话
|
注意:
1 2
| 多模态输入也会占 token 或额外计费单位 图片分辨率、音频时长会影响成本和延迟
|
20.5 user / safety_identifier
或:
1 2 3
| { "safety_identifier": "user_123" }
|
用途:
注意:
1 2
| 不要直接上传敏感个人信息 用稳定但不可逆的业务 ID 更合适
|
1 2 3 4 5 6 7
| { "metadata": { "scene": "rag_qa", "user_level": "free", "trace_id": "abc123" } }
|
用途:
1 2 3 4 5
| 日志检索 后台筛选 成本归因 A/B 测试 问题追踪
|
20.7 timeout
客户端常配:
1 2 3
| timeout = 30s connect_timeout = 5s read_timeout = 60s
|
建议:
1 2 3 4
| 短分类:超时短一点 长文生成:读超时长一点 stream:按 chunk 间隔判断超时,不要只看总时长 工具调用:模型超时和工具超时分开设置
|
20.8 retry
常见策略:
1 2 3 4
| 429:指数退避重试 5xx:短暂重试 网络断开:可重试 工具副作用请求:谨慎重试
|
建议:
1 2 3
| 重试要有最大次数 重试要有幂等 key 不要对扣款、下单、发消息类工具盲目重试
|
20.9 base_url / api_key
1 2 3 4
| base_url # API 服务地址 api_key # 鉴权密钥 organization # 组织 ID,部分平台支持 project # 项目 ID,部分平台支持
|
用途:
1 2 3
| 切换官方 API / 代理 / 私有化服务 多租户项目隔离 灰度环境和生产环境分离
|
安全建议:
1 2 3 4 5
| 不要把 API Key 写进前端 不要提交到 Git 后端通过环境变量读取 日志里打码 定期轮换
|
20.10 rate limit / concurrency
常见控制:
1 2 3 4 5
| requests per minute tokens per minute concurrent requests queue length max retries
|
应用端要做:
20.11 cache / prompt_cache
常见参数:
1 2 3
| prompt_cache_key prompt_cache_retention cache_prompt
|
用途:
1 2 3 4
| 相同系统提示 长工具 schema 固定知识库前缀 高频重复请求
|
注意:
1 2
| 缓存命中依赖前缀稳定 动态时间、随机 ID、用户私有信息会降低命中
|
21. 平台参数对照表
| 概念 |
OpenAI Responses |
旧 Chat API / 常见 API |
Ollama |
llama.cpp |
| 输入 |
input |
messages |
prompt / messages |
prompt / messages |
| 系统指令 |
instructions |
system message |
system |
prompt template |
| 最大输出 |
max_output_tokens |
max_tokens |
num_predict |
n_predict / max_tokens |
| 温度 |
temperature |
temperature |
options.temperature |
temperature / temp |
| nucleus |
top_p |
top_p |
options.top_p |
top_p |
| top-k |
通常不暴露 |
部分平台支持 |
options.top_k |
top_k |
| min-p |
通常不暴露 |
部分平台支持 |
options.min_p |
min_p |
| 重复惩罚 |
penalties 视平台 |
frequency_penalty / presence_penalty |
repeat_penalty |
repeat_penalty |
| 停止 |
stop 视模型/API |
stop |
options.stop |
stop |
| JSON |
text.format |
response_format |
format |
grammar / JSON schema |
| 工具 |
tools |
tools / functions |
tools |
OpenAI compatible tools 视服务 |
| 流式 |
stream |
stream |
stream |
stream |
| 上下文 |
模型窗口 |
模型窗口 |
num_ctx |
n_ctx |
| 模型驻留 |
服务托管 |
服务托管 |
keep_alive |
server slot / cache |
22. 实战参数配方
22.1 严谨问答 / RAG
1 2 3 4 5 6 7 8
| temperature: 0.1 ~ 0.3 top_p: 0.8 ~ 1.0 max_tokens / max_output_tokens / num_predict: 明确限制 frequency_penalty: 0 ~ 0.3 presence_penalty: 0 stop: 按模板设置 reasoning_effort: medium 或 high stream: true
|
目标:
22.2 结构化抽取
1 2 3 4 5 6
| temperature: 0 ~ 0.2 top_p: 1 format / response_format: JSON Schema strict max_output_tokens: 按 schema 预估 stop: 通常不需要,交给 schema reasoning_effort: low / medium
|
目标:
22.3 代码生成 / 修复
1 2 3 4 5 6 7
| temperature: 0.1 ~ 0.4 top_p: 0.9 ~ 1.0 max_output_tokens: 留足 reasoning_effort: medium / high stop: 可按 Markdown 或工具协议设置 frequency_penalty: 0 presence_penalty: 0
|
目标:
22.4 创意写作
1 2 3 4 5 6
| temperature: 0.8 ~ 1.1 top_p: 0.9 ~ 0.95 top_k: 40 ~ 100 presence_penalty: 0.3 ~ 0.8 repeat_penalty: 1.05 ~ 1.2 max_output_tokens: 较大
|
目标:
22.5 客服机器人
1 2 3 4 5 6 7
| temperature: 0.1 ~ 0.3 top_p: 0.8 ~ 1.0 max_output_tokens: 300 ~ 800 format: 可选 JSON,用于意图识别 tools: 查订单、查知识库、转人工 reasoning_effort: low / medium stream: true
|
目标:
22.6 Agent 工具调用
1 2 3 4 5 6 7
| temperature: 0.1 ~ 0.4 tools: 明确 schema tool_choice: auto 或 required parallel_tool_calls: 按工具副作用决定 max_output_tokens: 给最终总结留足 reasoning_effort: medium stop: 谨慎使用,避免截断 tool call
|
目标:
22.7 本地 Ollama 低延迟
1 2 3 4 5 6 7
| stream: true num_ctx: 够用即可 num_batch: 根据显存压测 num_gpu: 尽量 offload 到 GPU num_thread: 接近物理核心数起步 keep_alive: 10m / 1h / 24h,按并发决定 temperature: 按任务设
|
目标:
1 2 3
| 降低首 token 延迟 减少冷启动 平衡显存占用与吞吐
|
22.8 本地长文生成
1 2 3 4 5 6 7 8
| num_ctx: 按长文需要设置 num_predict: 留足 temperature: 0.7 ~ 0.9 top_p: 0.9 ~ 0.95 min_p: 0.03 ~ 0.1 repeat_penalty: 1.05 ~ 1.15 repeat_last_n: 256 或更高 mirostat: 可实验
|
目标:
23. 参数调试与排错清单
23.1 回答太发散
优先调:
1 2 3 4 5
| 降低 temperature 降低 top_p 降低 top_k 提高 prompt 约束 使用 JSON Schema 或工具
|
23.2 回答太死板
优先调:
1 2 3 4 5
| 提高 temperature 提高 top_p 提高 top_k 增加 presence_penalty 减少过强 repeat_penalty
|
23.3 经常复读
检查:
1 2 3 4 5 6 7
| frequency_penalty presence_penalty repeat_penalty repeat_last_n dry_multiplier stop 是否缺失 prompt 是否诱导重复格式
|
23.4 输出被截断
检查:
1 2 3 4 5 6
| max_tokens / max_output_tokens / num_predict 太小 上下文窗口不足 stop 误命中 服务端 timeout JSON schema 太复杂 stream 客户端中断
|
23.5 JSON 不合法
检查:
1 2 3 4 5 6
| 是否启用 JSON mode / JSON schema prompt 是否明确“只输出 JSON” max_output_tokens 是否足够 是否 stream 中途 parse 是否把 Markdown ```json 也输出了 schema 是否太复杂
|
23.6 RAG 幻觉
检查:
1 2 3 4 5 6
| temperature 是否过高 检索资料是否真的相关 资料是否太长导致重点稀释 是否要求“只根据资料回答” 是否要求缺资料时说不知道 是否返回引用和证据片段
|
23.7 本地模型首 token 很慢
检查:
1 2 3 4 5 6
| 模型是否冷启动 keep_alive 是否太短 num_ctx 是否过大 prompt 是否太长 GPU offload 是否不足 磁盘加载是否慢
|
23.8 本地模型显存爆了
检查:
1 2 3 4 5 6 7
| 模型量化等级 num_ctx 并发数 KV Cache 类型 num_gpu / offload batch size 是否多个模型同时 keep_alive
|
23.9 seed 固定但结果还不完全一致
可能原因:
1 2 3 4 5
| 并发和 batch 导致计算顺序不同 GPU 非确定性 模型或推理引擎版本变化 prompt 中时间等动态内容变化 采样链或默认参数变化
|
24. 课堂互动问题
24.1 temperature 在 Tokenizer 前还是后?
参考:
1 2 3
| Tokenizer 先把文本变成 token ID 模型计算 logits temperature 再作用于 logits / 概率分布
|
24.2 客服机器人回答太发散,优先调什么?
参考:
1 2 3
| 优先降低 temperature 必要时收紧 top_p 再加强 system prompt 和 RAG 约束
|
24.3 模型经常复读同一句话,查哪些参数?
参考:
1 2 3 4 5 6
| frequency_penalty presence_penalty repeat_penalty repeat_last_n dry stop
|
24.4 stream=true 会不会让答案更准确?
参考:
1 2 3
| 不会 stream 只是返回方式 不改变模型内部推理质量
|
24.5 max_tokens 是字数吗?
参考:
1 2 3
| 不是 它是 token 数 token 不等于字,也不等于词
|
25. 一张图总结
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| 用户输入 ↓ 应用端组装 Prompt / Messages / Tools / RAG ↓ Tokenizer:文本 -> token ID ↓ Prefill:读取完整上下文,建立 KV Cache ↓ Transformer 前向计算 ↓ 输出 logits:下一个 token 的候选分数 ↓ logit_bias / penalty / grammar mask / tool mask ↓ softmax + sampling ↓ 选出一个 token ↓ 追加到上下文,更新 KV Cache ↓ 停止了吗? ├─ 否:继续预测下一个 token └─ 是:stream 或一次性返回最终结果
|
最终一句话:
1 2 3 4 5 6 7 8 9 10
| max_tokens 管长度, stop 管刹车, temperature / top_p / top_k / min_p 管随机性, penalty 管重复, num_ctx 管记忆范围, format 管输出形状, tools 管外部能力, reasoning_effort / think 管思考预算, stream 管交互体验, num_thread / num_gpu / keep_alive 管本地运行性能。
|
26. 建议学习顺序
1 2 3 4 5 6 7 8 9
| 先理解“每次只预测下一个 token” 再理解 tokenizer:token 不是字也不是词 再理解 logits 和 softmax:分数变概率 再理解 temperature / top_p / top_k:随机性控制 再理解 penalty:重复控制 再理解 stop / max_tokens:什么时候停 再理解 stream:怎么返回 再理解 num_ctx / KV Cache:为什么长上下文贵 最后理解 tools / format / reasoning:应用编排能力
|
课堂小活动:
1 2 3 4
| 给学生一句:“中国的首都是____” 让学生假装模型,为候选 token 打分 再用 temperature / top_k / top_p 改变候选集合 最后抽样选出一个 token
|
这样最容易看懂:
1 2
| 参数不是魔法 参数只是在改“下一个 token 怎么选”
|
27. 官方参考入口