短剧《拥有纯阳仙体,我无敌了》剧情介绍
2026-07-23 3419969
2026-07-23 0
大模型每次生成的回复都不太一样,有时候很严谨,有时候天马行空。这种"随机性"到底是怎么控制的?本文从原理到代码,带你理解 Temperature 和 Top-k 这两个关键参数,并用 LangChain 搭一个可用的 AI 写作流水线。

大模型本质上是在"预测下一个词"。
比如你输入"你好",模型内部会对所有可能的后续词汇打分,形成一个概率分布(所有候选词的概率加起来等于 1):
"你好" 后面可能是:吗0.60啊0.15呀0.10美0.05坏0.01......
概率最高的"吗"最容易被选中,但模型不会总是选最高分的那个——否则每次回复都一样,就太死板了。我们需要两个参数来控制随机性。
取值范围通常在 0~1 之间,控制概率分布的"陡峭"程度:
| 值 | 效果 | 适用场景 |
|---|---|---|
| 0.2(低) | 大概率选最高分词,输出稳定、保守 | 代码生成、法律文书、合同 |
| 0.8(高) | 低分词也有机会被选中,输出发散、有创造力 | 文艺创作、脑暴、多模态内容 |
简单理解:Temperature 越低,模型越"老实";越高,越"敢想"。
Top-k 的做法很直接:按概率从高到低排序,只保留前 k 个候选词,后面的全部丢掉。
这两个参数不能同时都很大,也不能同时都很小——那就失去组合的意义了:
| 组合 | 效果 |
|---|---|
| 低 temperature + 高 top-k | 在较大候选池中保守选择,保证信息完整性——适合严谨任务 |
| 高 temperature + 低 top-k | 在靠谱的候选池中大胆发挥——创意可控,既能发散又不离谱 |
幻觉问题本质上就是随机性失控。理解这两个参数,开发者才能有效地让 AI 应用"靠谱地随机"。
直接在代码里拼 prompt 字符串、手动处理返回结果、硬编码模型参数——写一两个 demo 还行,但一旦 AI 工作流变复杂(多轮对话、工具调用、输出格式化),代码就会迅速失控。
LangChain = Language + Chain,核心思路是把 AI 工作流拆成链条上的节点,每个节点各司其职:
AI 应用本身带有"黑盒"属性——要么觉得不够智能,要么太智能不知道它怎么做到的。Chain 的思路就是把黑盒拆成可观测、可组合的链条。
下面用 LangChain 搭一条写作流水线,同一个主题,分别用"创意模式"和"严谨模式"生成两篇散文,直观感受 Temperature 和 Top-k 的效果差异。
import { ChatOpenAI } from '@langchain/openai';// 创意模型:高 temperature + 低 top-k = 靠谱池子里大胆发挥const creativeModel = new ChatOpenAI({model: 'deepseek-v4-pro',temperature: 0.8, // 增强发散性topK: 4,// 仅从概率前4的词汇里采样,防止跑偏maxToken: 600,apiKey: process.env.DEEPSEEK_API_KEY,configuration: {baseURL: 'https://api.deepseek.com'}});// 严谨模型:低 temperature + 高 top-k = 大池子里保守选择const preciseModel = new ChatOpenAI({model: 'deepseek-v4-pro',temperature: 0.2, // 保守,输出稳定topK: 8,// 更大候选池,保证信息完整性maxToken: 600,apiKey: process.env.DEEPSEEK_API_KEY,configuration: {baseURL: 'https://api.deepseek.com'}});
import { PromptTemplate } from '@langchain/core/prompts';const storyPrompt = PromptTemplate.fromTemplate(`请写一篇短篇散文,主题:{theme}风格温柔治愈,篇幅200字左右,不要分段,文字细腻有画面感。`);
{theme} 是占位符,调用时动态传入。同一个模板可以被不同模型复用——这就是 LangChain 把 prompt 从业务代码中解耦出来的好处。
import { StringOutputParser } from '@langchain/core/output_parsers';const outputParser = new StringOutputParser();const creativeChain = storyPrompt.pipe(creativeModel).pipe(outputParser);const preciseChain = storyPrompt.pipe(preciseModel).pipe(outputParser);
pipe 串联起整个工作流:PromptTemplate → LLM → OutputParser。像工厂流水线一样,原料(theme)从一头进去,成品(文章)从另一头出来。
async function runWriteDemo() {const theme = '秋日山野晚风';console.log('=== 创意写作模式 (temperature=0.8, topK=4) ===');const creativeText = await creativeChain.invoke({ theme });console.log(creativeText);console.log('n=== 严谨模式 (temperature=0.2, topK=8) ===');const preciseText = await preciseChain.invoke({ theme });console.log(preciseText);}runWriteDemo().catch(err => console.error(err));
创意模式下,同样的主题会产出更有文采、用词更大胆的散文;严谨模式下,输出更工整、平实、可预测。切换模式只需要改两个参数,chain 的结构完全不变。
两个参数,一条链,AI 就能既聪明又可控。