大模型应用端参数与生成流水线速查

适用对象:已经接触过 API / Ollama / 本地模型部署,希望系统理解大模型生成流程与常见参数的学习者。
核心目标:理解模型不是一次性写完整答案,而是不断预测“下一个 token”。


快速索引

按问题查

我想查什么 先看
大模型到底怎么生成文字 1. 核心心智模型
一次请求完整经过哪些环节 2. 完整生成流水线
Prompt / Messages 怎么拼 3. 输入层:Prompt、Messages 与上下文组装
token 和字数有什么区别 4. Tokenizer:文字变 token ID
上下文越长为什么越耗显存 5. Prefill、Decode 与 KV Cache
logits / softmax 是什么 6. Logits、Softmax 与概率分布
temperature / top_p / top_k 怎么调 8. 采样参数:temperature、top_p、top_k、min_p
怎么减少复读 9. 重复惩罚参数
怎么控制输出长度和停止 11. 停止条件与长度控制
stream 有什么用 12. 返回方式:stream 与非流式
JSON / Schema 怎么约束 13. 结构化输出与格式约束
Function Calling / Tool Calling 参数 14. 工具调用参数
推理模型的 reasoning / think 怎么理解 15. 推理模型参数
Ollama 常用参数 17. Ollama 参数速查
llama.cpp 常用参数 18. llama.cpp 参数速查
OpenAI Responses API 常用参数 19. OpenAI Responses API 参数速查
还有哪些应用端常用参数 20. 更多应用端参数
不同平台参数怎么对照 21. 平台参数对照表
不同场景该怎么配 22. 实战参数配方
常见问题怎么排查 23. 参数调试与排错清单

一句话总表

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
中国的首都是

模型第一步可能生成:

1
北京

上下文变成:

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
我喜欢人工智能

可能被切成:

1
["我", "喜欢", "人工", "智能"]

再映射成数字:

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。

例如输入:

1
中国的首都是

可能得到:

候选 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
直接给某些 token 加分或扣分

示例:

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
{、"、字段名、:、数字、字符串、逗号、}

这类约束常见于:

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
temperature = 0.0 ~ 0.3

效果:

1
2
3
4
更稳定
更保守
更像标准答案
更少发散

适合:

1
2
3
4
5
客服问答
RAG 问答
代码修复
结构化抽取
数学 / 逻辑任务

高温:

1
temperature = 0.8 ~ 1.2

效果:

1
2
3
4
更多变化
更有创意
更容易发散
也更容易胡说

适合:

1
2
3
4
故事创作
广告文案
头脑风暴
角色扮演

8.2 temperature = 0

1
2
3
4
通常接近 greedy decoding
也就是每步选概率最高的 token
但不同平台实现细节不完全一致
不保证跨机器、跨版本、跨并发完全一致

8.3 top_k

top_k:只保留前 K 个候选。

例如:

1
top_k = 3

只从排名前三的 token 中采样。

特点:

优点 缺点
简单直接,能过滤长尾低质量 token K 是固定值,不够自适应

常见范围:

1
top_k = 20 ~ 100

8.4 top_p

top_p 也叫 nucleus sampling。

逻辑:

1
2
3
从最高概率 token 开始累加
直到累计概率达到 p
只在这批 token 中采样

示例:

token 概率 累计概率
北京 70% 70%
上海 10% 80%
南京 8% 88%
广州 4% 92%

如果:

1
top_p = 0.9

保留:

1
北京、上海、南京、广州

8.5 top_k 和 top_p 对比

参数 逻辑 更适合
top_k 固定保留前 K 个 本地模型、简单截断
top_p 保留累计概率达到 p 的集合 通用 API、自适应采样

8.6 min_p

min_p 通常相对于最高概率 token 过滤。

例如最高概率:

1
北京:60%

如果:

1
min_p = 0.1

保留概率至少:

1
60% * 0.1 = 6%

低于 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

常见:

1
tfs_z = 1.0 表示基本关闭

8.9 xtc

xtc 是 llama.cpp 新采样器之一。

常见参数:

1
2
xtc_probability
xtc_threshold

粗略用途:

1
2
3
在可控范围内避免总是选择太常见的 token
增加表达变化
适合实验,不建议新手一上来就调

9. 重复惩罚参数

9.1 frequency_penalty

逻辑:

1
2
某个 token 出现次数越多
惩罚越大

适合抑制:

1
2
3
非常非常非常
分析分析分析
我们需要需要需要

建议:

1
2
3
0.0 ~ 0.3:轻微抑制重复
0.3 ~ 0.8:明显鼓励换词
> 1.0:可能让输出变怪

9.2 presence_penalty

逻辑:

1
2
只要 token 出现过
就给一次惩罚

效果:

1
提醒模型“这个内容说过了,换点新的”

适合:

1
2
3
4
头脑风暴
创意列表
开放式写作
多角度分析

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 更像自动调节器。

目标:

1
让生成文本的随机程度保持在某个目标水平附近

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
模型认为当前回答已经结束

本地引擎里有时可以设置:

1
ignore_eos = true

高危:

1
2
模型可能停不下来
需要配合 max token 或 stop

12. 返回方式:stream 与非流式

12.1 非流式返回

模型生成完整答案后一次性返回。

1
2
3
{
"content": "中国的首都是北京。"
}

优点:

1
2
3
4
实现简单
方便整体校验
适合结构化 JSON
适合短回答

缺点:

1
2
用户必须等完整生成结束
长回答首屏等待时间长

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
{
"format": "json"
}

或:

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. 工具调用参数

14.1 tools

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"]
}
}
]
}

14.2 tool_choice

常见语义:

1
2
3
4
auto       # 模型自己决定是否调用工具
none # 禁止调用工具
required # 必须调用工具
指定工具 # 强制调用某个工具

14.3 parallel_tool_calls

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
{
"think": true
}

含义:

1
2
3
4
对支持 thinking 的模型,控制是否在响应中包含思考内容
有的平台支持 true / false
有的平台支持 low / medium / high
具体看模型和服务实现

15.4 reasoning_format

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
{
"top_logprobs": 5
}

用途:

1
2
3
4
查看每一步最可能的 token
分析分类任务置信度
排查模型为什么选了某个词
做自动评估和可视化

注意:

1
2
3
不是所有模型和接口都支持
返回体会明显变大
logprob 是 token 级,不是整句级

20.2 n / candidate_count

1
2
3
{
"n": 3
}

用途:

1
2
3
4
一次生成多个候选答案
让应用端自己 rerank
创意写作多方案
分类任务投票

代价:

1
2
3
输出 token 成本接近成倍增加
延迟也会上升
很多新接口不再推荐大量使用 n

20.3 best_of

1
best_of = 5

含义:

1
2
服务端生成多个候选
只返回其中最优的一个或几个

注意:

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
{
"user": "user_123"
}

或:

1
2
3
{
"safety_identifier": "user_123"
}

用途:

1
2
3
4
安全风控
滥用追踪
限流和审计
问题请求定位

注意:

1
2
不要直接上传敏感个人信息
用稳定但不可逆的业务 ID 更合适

20.6 metadata

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

应用端要做:

1
2
3
4
5
排队
降级
限流
缓存
按用户级别分配额度

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

目标:

1
2
3
4
稳定
少发散
忠于检索资料
减少编造

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

目标:

1
2
3
字段稳定
类型稳定
方便程序解析

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

目标:

1
2
3
正确性优先
少乱发挥
避免中途截断代码

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: 较大

目标:

1
2
3
有变化
有想象力
避免机械重复

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

目标:

1
2
3
4


可追踪
不要乱承诺

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

目标:

1
2
3
会用工具
参数填得准
工具结果能正确总结

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: 可实验

目标:

1
2
3
长文不复读
不越写越无聊
不越写越失控

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. 官方参考入口