Skip to content

04 · Prompt 与采样参数:怎么让模型听话 ​

学完你能说出:

  • 一次对话里的 system / user / assistant 三种角色分别是干什么的。
  • 几种常用提示技巧(给角色、给例子、让它一步步想、规定输出格式)为什么有效。
  • 温度(Temperature)和 Top-p 在控制什么,什么场景调高、什么场景调低。
  • 上下文窗口是什么,超了会怎样。

先看地图 ​

第 01 篇说模型在「接龙」,每一步都要「选一个 Token」。这一篇讲两件事: ① 怎么给它好的开头(Prompt),以及 ② 选 Token 时怎么选(采样参数)。

本篇讲 4 个点:① 消息的三种角色 → ② 四个提示技巧 → ③ 温度和 Top-p → ④ 上下文窗口。

一句话本质 ​

Prompt(提示词)= 给接龙写的开头。开头写得越清楚,接出来的内容越符合预期。

生活类比:给新来的实习生派活 ​

  • 只说「写个总结」,他交上来的东西大概率不合心意。
  • 说清楚「你是运营助理(角色);按这个范例的格式写(例子);先列要点再写正文(步骤);输出 3 条,每条不超过 20 字(格式)」,交上来的就靠谱多了。

大模型也一样:它不会读心,只会顺着你给的开头往下接。

一步步看 ​

1. 三种角色 ​

调用大模型 API 时,发过去的是一个消息列表:

[system]    你是一个简洁的面试辅导助手,回答不超过 100 字。     ← 规则、人设,整场对话都生效
[user]      什么是进程?                                       ← 用户说的话
[assistant] 进程是正在运行的程序及其资源……                     ← 模型之前的回答
[user]      那线程呢?                                         ← 新问题

模型其实没有记忆:每次调用,程序都把整段历史重新发一遍,模型再接着往下写。所谓「多轮对话」,就是每轮把之前的记录都带上。

2. 四个常用技巧 ​

技巧写法示例为什么有效
给角色「你是资深面试官」把接龙引向某一类文本的风格和深度
给例子(Few-shot,少样本示例)先给 2 个「问题 → 标准答案」的例子模型照着例子的格式和长度去接
一步步想(CoT,思维链)「先列出推理步骤,再给结论」把中间步骤写出来,后面的 Token 能「看到」前面的推理,复杂题更容易做对
规定输出格式「只输出 JSON:{"answer": ..., "source": ...}」方便程序解析,也减少废话

3. 温度和 Top-p:选 Token 时的「随机程度」 ​

还用第 01 篇的例子,「今天天气」后面候选的概率是:

候选原始概率温度低(如 0.2)时温度高(如 1.5)时
真0.45接近 1,几乎必选降一些
很0.30很小升一些
怎么0.15很小升一些
其他0.10接近 0明显升高

(右边两列只表示变化方向,不是精确数值。)

  • 温度(Temperature):把概率分布「压尖」或「摊平」。
    • 低温:几乎总选最高的那个,输出稳定、可复现,适合问答、写代码、抽取信息。
    • 高温:冷门选项也有机会,输出更多样,适合头脑风暴、写文案。
  • Top-p(核采样):只在「累计概率达到 p 的那几个候选」里选。例如 p = 0.8:真 0.45 + 很 0.30 = 0.75 还不够 0.8,再加上「怎么」到 0.90,于是只在这 3 个里选,其他全部排除。作用是砍掉长尾里的离谱选项。

4. 上下文窗口 ​

上下文窗口(Context Window) = 模型一次最多能「看」多少 Token,输入和输出加在一起算。

  • 超了会怎样:API 直接报错,或者程序得把最早的对话删掉,模型就「忘了」前面说过的话。
  • 所以长对话、长文档要做取舍:做摘要、只放相关片段(这就是 RAG 的思路)。

为什么这么设计 ​

为什么要分 system 和 user? ​

  • 问题:如果规则和用户输入混在一起,用户一句「忽略上面的要求」就可能把规则冲掉;开发者也不好统一管理人设。
  • 方案:把开发者定的规则单独放进 system 消息,模型在训练时被教会更重视它。
  • 好处:规则和用户内容分层,人设稳定、更好维护。(注意:这只是「更重视」,不是绝对安全,见 Agent 安全篇。)

一句话答法

system 放开发者的规则和人设,user 放用户输入,分层后模型更遵守规则,也方便统一管理;但它不能完全防住提示注入。

为什么「让它一步步想」能提高正确率? ​

  • 问题:模型是一个 Token 一个 Token 生成的。直接让它报答案,相当于要求一步算出复杂结果。
  • 方案:让它先把中间步骤写出来。
  • 好处:写出来的步骤成了后续 Token 的「上下文」,等于给自己打草稿。多步推理、算术题的正确率明显上升。代价是输出更长、更慢、更贵。

一句话答法

因为生成是逐 Token 的,把推理过程写出来相当于打草稿,后面的结论能参考前面的步骤,复杂问题更容易做对;代价是输出更长。

为什么需要温度这个参数? ​

  • 问题:总选概率最高的词,输出会死板、重复;完全随机,又会胡言乱语。不同任务需要的随机程度不一样。
  • 方案:用温度这一个旋钮,控制概率分布是变尖还是变平。
  • 好处:同一个模型,既能稳定地答题,也能发散地写创意。

一句话答法

温度控制采样的随机性:低温输出稳定、适合事实类任务;高温输出多样、适合创意类任务。

英文术语拆解 ​

术语拆开看一句话意思
Prompt提示给模型的输入,即接龙的开头
System / User / Assistant系统 / 用户 / 助手消息的三种角色:规则 / 用户输入 / 模型回答
Few-shotfew 少量 + shot 一次尝试在提示里放几个示例
Zero-shotzero 零 + shot不给示例,直接提问
CoTChain 链 + of + Thought 思考思维链:先写推理步骤再给结论
Temperature温度控制随机程度的参数
Top-ptop 最前面的 + p 概率只在累计概率达到 p 的候选里抽
Context Windowcontext 上下文 + window 窗口一次能处理的最大 Token 数

面试怎么问 ​

Q:temperature 和 top-p 有什么区别?

温度通过缩放 logits(未归一化的分数)改变整个概率分布的陡峭程度;top-p 是截断,只保留累计概率达到 p 的候选再采样。一般只调其中一个。事实类任务用低温,创意类任务用高温。

Q:怎么让模型稳定输出 JSON?

在 system 里规定格式,并给出示例;温度调低;如果 API 支持结构化输出或 JSON 模式就打开;程序端一定要做解析校验,失败就重试或修复。

Q:多轮对话里,模型怎么「记住」前面的内容?

模型本身没有状态,是应用每次把历史消息一起发过去。历史太长会超出上下文窗口,常用做法是截断最早的轮次、对历史做摘要,或者把长期信息存到外部,需要时再检索。

容易混的地方 ​

  • 温度 0 也不一定每次完全一样:服务端的并行计算等因素可能带来细微差异。「温度 0 更稳定」是对的,说「绝对确定」不严谨。
  • 上下文窗口包括输出:输入占满了,就没有空间输出了。
  • Prompt 写得越长越好 ✗:无关内容会分散注意力、增加成本。清楚比长重要。

和其他知识的连接 ​

  • ← 来自 大模型在做什么:「选一个 Token」就是采样参数在管。
  • ← 来自 注意力与 Transformer:上下文窗口有上限,根源在注意力的平方计算量。
  • → 影响 RAG 是什么:把查到的资料拼进 Prompt,就是 RAG。
  • → 影响 工具调用:工具说明也是写进 Prompt(或专门字段)里告诉模型的。

自测 3 问 ​

Q1:多轮对话中,模型自己有记忆吗?

点开看答案

没有。每次调用,应用都把之前的消息记录重新发给模型。历史太长会超出上下文窗口,就要截断或做摘要。

Q2:Top-p = 0.8,候选概率是 0.45、0.30、0.15、0.10,会在哪几个里面选?

点开看答案

按概率从高到低累加:0.45 → 0.75(还不到 0.8)→ 0.90(够了)。所以在前 3 个里选,最后那个 0.10 被排除。

Q3:写代码、做信息抽取时,温度应该调高还是调低?为什么?

点开看答案

调低。这类任务要准确、稳定、可复现,低温让模型几乎总选最可能的 Token,减少随机发挥。

✅ 验收清单 ​

  • 能说出 system / user / assistant 三种角色的作用
  • 能解释「多轮对话的记忆」其实是每次重发历史
  • 能举例说明 Few-shot、CoT、规定输出格式各自为什么有效
  • 能手算一个 Top-p 的例子,并说清温度高低分别适合什么任务
  • 能说出上下文窗口包含哪些内容,超出后常见的处理办法

下一步该懂什么 ​