4、纯文本推理基础:使用main命令进行文本生成、理解上下文窗口(context size)、温度与top_p采样参数调优
好,咱们进入正题。
纯文本推理,说白了就是让模型「读一段话,接下一段话」。这是多模态推理的基石。你想想看,如果连纯文本都玩不转,后面加图片、加音频就更别想了。
我个人习惯,拿到一个新模型,第一件事就是跑一遍纯文本生成。不是为了看效果,而是为了摸清它的「脾气」——上下文窗口多大、温度该设多少、top_p要不要动。这些参数调好了,后面才能省心。
4.1 用main命令跑通第一个文本生成
llama.cpp 的 main 命令,就是你的主力工具。用法其实很简单:
./main -m models/qwen2.5-7b-instruct-q4_k_m.gguf \
-p "请用一句话解释什么是量子纠缠" \
-n 128 \
--temp 0.7 \
--top-p 0.9
解释一下这几个参数:
-m:模型路径。我建议用绝对路径,省得找半天。-p:提示词(prompt)。就是你要问的问题。-n:生成的最大 token 数。128 够用,想写长文可以设 512 或 1024。--temp:温度。控制随机性,后面细讲。--top-p:核采样。也是控制随机性的。
跑完之后,你会看到模型输出的文本。嗯,这里要注意:第一次跑可能很慢,因为要加载模型。后面就快了。
<|im_start|>user\n...<|im_end|>\n<|im_start|>assistant\n。我建议先查一下模型的官方文档。
4.2 理解上下文窗口(Context Size)
上下文窗口,就是模型一次能「记住」多少内容。单位是 token,不是汉字。一个汉字大约占 1-2 个 token。
举个例子:
- 如果 context size 是 4096,模型最多能处理约 2000-3000 个汉字。
- 如果 context size 是 32768,那就是 16000-20000 个汉字。
我在项目中遇到过一个问题:用 7B 模型做长文档摘要,context size 设了 8192,结果模型输出到一半就开始「胡言乱语」。后来发现,模型的有效上下文其实只有 4096,超过这个数,注意力就开始「飘」了。
怎么设置?用 -c 参数:
./main -m models/qwen2.5-7b-instruct-q4_k_m.gguf \
-p "请总结以下文章..." \
-c 8192 \
-n 512
--memory-f32 参数看看内存占用。一般 7B 模型,context size 设 4096 比较稳妥。
为什么会这样?因为 context size 越大,KV cache 占的内存就越多。公式是:内存占用 ≈ context size × 层数 × 头数 × 精度。你想想看,从 4096 翻到 8192,内存直接翻倍。
4.3 温度(Temperature)与 top_p 采样参数调优
这两个参数,说白了就是控制模型「敢不敢冒险」。温度低,模型就保守,输出确定性高;温度高,模型就「放飞自我」,输出更随机。
| 参数 | 取值范围 | 效果 | 典型场景 |
|---|---|---|---|
| 温度(temp) | 0.0 - 2.0 | 低值:输出稳定、重复性高;高值:输出多样、可能跑题 | 0.7 用于对话,1.2 用于创意写作 |
| top_p | 0.0 - 1.0 | 低值:只从概率最高的词中选;高值:考虑更多候选词 | 0.9 用于通用场景,0.5 用于代码生成 |
我个人习惯,先固定 top_p 为 0.9,然后调温度。为什么?因为 top_p 的作用是「截断低概率词」,而温度是「重新分配概率」。两者配合使用,效果更好。
举个例子:
# 保守模式:适合代码生成、事实问答
./main -m models/qwen2.5-7b-instruct-q4_k_m.gguf \
-p "用Python写一个快速排序" \
--temp 0.2 \
--top-p 0.5
# 创意模式:适合故事写作、头脑风暴
./main -m models/qwen2.5-7b-instruct-q4_k_m.gguf \
-p "写一个关于时间旅行的短故事" \
--temp 1.0 \
--top-p 0.95
- 温度 0.0 就是「贪心采样」,每次都选概率最高的词。输出稳定但无聊。
- 温度 1.0 就是「原始概率分布」,不做任何调整。
- 温度 > 1.0 就是「鼓励冒险」,但容易跑题。
- top_p 0.9 的意思是:只从累计概率达到 90% 的词中选。剩下的 10% 直接扔掉。
嗯,这里要提醒一句:不要同时把温度和 top_p 都设得很高。我曾经试过 temp=1.5, top_p=0.99,结果模型输出了一堆「意识流」文字,完全没法看。建议先调温度,再微调 top_p。
4.4 知识体系总览
下面这张图,帮你理清本章的核心逻辑:
4.5 实战建议
最后,给你几个实战建议:
- 先跑默认参数:别一上来就调参。先用 temp=0.7, top_p=0.9 跑一遍,看看效果。
- 观察输出质量:如果输出太重复,就调高温度;如果输出太散,就调低温度。
- 注意 context size 上限:我建议设成模型支持的最大值的 80%,留点余量。
- 善用
--repeat-penalty:如果模型总爱重复同一句话,可以设--repeat-penalty 1.1来惩罚重复。
好了,纯文本推理的基础就这些。记住:main 命令是你的瑞士军刀,context size 是你的工作台,温度和 top_p 是你的调色盘。用好它们,你就能让模型「听话」地输出你想要的内容。
公众号:蓝海资料掘金营,微信deep3321