🎀 大模型说"呀"还是"吗"?temperature 和 Top K 在偷偷控制它的"性格"

写在前面:今天老师问了一个很有意思的问题------"大模型是怎么随机说话的?" 你用同样的 Prompt 问 AI 两次,它给的答案可能不完全一样。这不是 bug,是设计。LLM 预测下一个词时,会给每个候选词分配一个概率------"吗"的概率 0.6,"啊"的概率 0.15,"呀"的概率 0.1......最后选哪个?这就靠 temperature 和 Top K 这两个参数来控制。老师说,这两个参数就是 AI 的"性格旋钮"------你调一调,它就从"严谨的律师"变成"狂放的诗人的"。


一、LLM 怎么"选词"?

1.1 概率分布

老师举了一个例子:

上一句是"你好",LLM 预测下一个词的概率分布可能是:

arduino 复制代码
"吗"   0.60  ← 概率最高
"啊"   0.15
"呀"   0.10
"美"   0.05
"坏"   0.01
......    其他

LLM 本质上是根据前面的词,算每个候选词的概率。概率最高的词就叫"最优解"。

但问题来了------每次都选概率最高的那个吗?

  • 如果是 → 每次输出都一样 → 确定性高,但缺乏创意。
  • 如果不一定 → 有时选概率第二的 → 多样性高,但可能"跑偏"。

temperature 和 Top K 就是控制"怎么选"的关键参数。


二、Temperature:随机性的"温度计"

2.1 温度的作用

老师说:

"temperature------温度,随机性,0 - 1,文艺创作 | 写代码。"

temperature 控制的是概率分布的"陡峭程度":

  • 低温度(0.1 - 0.3):让高概率更高,低概率更低。模型几乎只选最高概率的词 → 严谨、确定性高。
  • 高温度(0.7 - 1.0):拉平概率分布,低概率的词也有机会被选中 → 创意、多样性高。
temperature 效果 适合场景
0.1 几乎每次都选"吗" 代码生成、法律合同
0.2 大概率选"吗",偶尔选别的 数据分析、客服回复
0.5 平衡,既有质量又有创意 文案辅助、邮件撰写
0.8 可能选"啊""呀",不再单调 故事创作、广告文案
1.0 随意选,完全放飞 头脑风暴、诗歌生成

看 main.mjs 中两个模型的配置:

javascript 复制代码
// 创意写作模型------温度高
const creativeModel = new ChatOpenAI({
    model: 'deepseek-v4-pro',
    temperature: 0.8,  // 创意发散
    topK: 4,           // 限制不跑偏
    maxTokens: 600,
});

// 严谨写实模型------温度低
const preciseModel = new ChatOpenAI({
    model: 'deepseek-v4-pro',
    temperature: 0.2,  // 保守严谨
    topK: 8,           // 保证信息完整
    maxTokens: 600,
});

同一个 model(deepseek-v4-pro),只改了 temperature 和 Top K,性格就完全不一样了。

2.2 做个试验

如果用两个模型写同一个主题"秋日山野晚风":

严谨模式(temperature=0.2):

"秋天的山野,晚风轻拂,带来阵阵凉意。树叶在风中沙沙作响,远处的天空渐渐暗了下来......"

创意模式(temperature=0.8):

"晚风像一只调皮的手,撩动着山野的裙摆。秋叶在风中打着旋儿,像是在跳一支无人能懂的舞......"

明明是同一个 LLM、同一个 Prompt,输出风格天差地别。这就是 temperature 的魔力。


三、Top K:限制"候选名单"

3.1 Top K 的作用

老师说:

"Top K------随机样本得分排序。"

Top K 限制模型在选词时,只看概率最高的前 K 个词。

  • Top K = 1:每次都选概率最高的那个 → 完全确定。
  • Top K = 4:只看前 4 个候选词,其他的完全不考虑。
  • Top K = 8:有更多选择,但质量依然有保障(默认值)。
java 复制代码
概率分布:
"吗"  0.60
"啊"  0.15
"呀"  0.10
"美"  0.05
"坏"  0.01
......

如果 Top K = 3:只看"吗""啊""呀"这三个。temperature 从这三个里选。
如果 Top K = 8:看前 8 个,"美"也有可能被选到。

3.2 Temperature 和 Top K 的配合

老师说了一句精辟的话:

"temperature 和 Top K 不可能都太大,都很小也没有必要。"

temperature Top K 效果 比喻
小 大 准确,艺术性高 只选好的,但不死板
大 小 靠谱的创意 发挥创意但不跑偏
大 大 完全放飞,可能乱来 两个疯子在一起
小 小 太死板,缺乏变化 机器人说话

老师推荐的最佳配合:

  • 代码/法律/合同 :temperature=0.2,TopK=8(低随机 + 大候选池)
  • 创意写作/多模态 :temperature=0.8,TopK=4(高随机 + 小候选池)

四、LangChain 的 Chain:把模型串成"流水线"

4.1 为什么要 Chain?

老师说:

"LangChain = Language + Chain(LLM 工作流编排)。"

之前我们每次都用 model.invoke(messages) 单独调用 LLM。但一个 AI 应用往往需要多个步骤:

复制代码
PromptTemplate(模板化) → Model(调用 LLM) → OutputParser(格式化输出)

Chain(链)就是把多个步骤串起来,像工厂里的流水线一样。

4.2 PromptTemplate:让 Prompt 可复用

javascript 复制代码
import { PromptTemplate } from '@langchain/core/prompts';

const storyPrompt = PromptTemplate.fromTemplate(`
    请写一篇短篇散文,主题是{theme}
    风格温柔治愈,篇幅200字左右,不要分段,文字细腻有画面感。
`);

{theme} 是一个占位符,可以在调用时动态替换。

  • 以前:每次都要硬编码写完整的 Prompt。
  • 现在:模板化,复用性高,维护方便。

4.3 StringOutputParser:自动格式化输出

javascript 复制代码
import { StringOutputParser } from '@langchain/core/output_parsers';

const outputParser = new StringOutputParser();

StringOutputParser 把 LLM 返回的复杂对象自动解析成纯文本。 以前要写 response.choices[0].message.content,现在 parser 自动帮你做了。

4.4 用 .pipe() 组装 Chain

javascript 复制代码
const creativeChain = storyPrompt
    .pipe(creativeModel)
    .pipe(outputParser);

const preciseChain = storyPrompt
    .pipe(preciseModel)
    .pipe(outputParser);

async function runWriteDemo() {
    const theme = '秋日山野晚风';

    console.log('创意写作模式');
    const creativeText = await creativeChain.invoke({ theme });
    console.log(creativeText);

    console.log('严谨写实模式');
    const preciseText = await preciseChain.invoke({ theme });
    console.log(preciseText);
}

.pipe() 把三个步骤串在一起:

复制代码
PromptTemplate(填好 theme)
  → ChatOpenAI(调用 LLM)
  → StringOutputParser(提取纯文本)

调用 creativeChain.invoke({ theme: '秋日山野晚风' }),一次执行整条流水线。


五、总结:控制 LLM 输出的四个参数

参数 作用 推荐值 比喻
temperature 控制随机性(0-1) 0.2(严谨)/ 0.8(创意) 温度计
Top K 限制候选项数量 4(创意)/ 8(严谨) 候选名单
maxTokens 最大输出 Token 数 600 字数限制
model 选择 LLM 型号 deepseek-v4-pro 大脑
LangChain 概念 作用
PromptTemplate 模板化 Prompt,占位符动态替换
StringOutputParser 自动提取 LLM 返回的纯文本
.pipe() 串联多个步骤,形成 AI 工作流

temperature 和 Top K 是控制 LLM 输出"性格"的关键参数。理解它们,你就能让同一个模型在不同场景下展现出不同的能力。


写在最后

今天最大的收获,是理解了 temperature 和 Top K 的配合关系。以前我只知道"temperature 高 = 创意,低 = 严谨",现在知道了还要搭配 Top K。而且 LangChain 的 Chain 机制------PromptTemplate.pipe(model).pipe(parser)------让 AI 工作流的组织变得清晰又优雅。

下次面试官问你:"怎么控制 LLM 输出的随机性?"

你可以淡定地说:

"LLM 的随机性主要通过两个参数控制:temperature 和 Top K。temperature(0-1)控制概率分布的陡峭程度,值越低越倾向于选最高概率的词,输出更严谨;值越高概率分布越平坦,低概率词也有机会被选中,输出更多样。Top K 限制模型只从前 K 个概率最高的词中采样,值小可以防止输出跑偏。两者需要配合使用:temperature 低 + Top K 大 → 准确且稳定;temperature 高 + Top K 小 → 有创意但不离谱。在 LangChain 中,可以通过 ChatOpenAI 的 temperature 和 topK 参数配置,再用 .pipe() 组装成完整的 AI 工作流。"

然后看着面试官满意的表情,心里默念:这波,又稳了。


本文所有代码示例均来自课堂学习资料,真实可运行。

相关推荐
miss27 分钟前
AI 改完不敢上线?OpenSpec 规约驱动开发实战
前端·代码规范·前端工程化
AiMan1 小时前
腾讯ima还是不可以导出左侧所有对话,只能单条导出,方法不对吗
前端
去伪存真1 小时前
并发量一高就装死?Agent 全链路“防猝死”手册
前端·agent
Moment1 小时前
AI 编程时代,聊聊我的 Mac mini 双屏桌面
前端·后端
AiMan1 小时前
先确认能不能一次把Microsofat Copilot所有内容打包一个文件导出
前端
总要学点什么1 小时前
第97篇:三维数据加载-城市建筑白模自定义着色器——让一条光带沿高度扫上去,快慢却由帧率说了算
前端·gis·webgl·cesium·着色器·空间分析·白模
上海懒图科技2 小时前
工厂厂区电子地图定位导航:厂区人车精准定位,安全合规双保障
前端·arcgis·vue
西安小哥2 小时前
端侧跑大模型,真正的门槛不在参数量:一次 596 秒到 10 秒的压缩路径复盘
前端·人工智能
陈随易3 小时前
Cloudflare 出钱,Vite 团队挑人,44 个维护者分 30 万美元
前端·后端·程序员
恋猫de小郭3 小时前
Flutter THLC 的 WebView 滚动终于从 70 FPS 提升到 120 FPS
android·前端·flutter