️ 大模型随机性完全指南:从概率抽签到 LangChain 实战
来源:互联网
时间:2026-07-22 07:58:15
:了解 LLM 基础调用,想深入理解随机性参数 & LangChain 链式编程的开发者。
目录
- 1. 控制随机性的关键参数
- 2. LangChain:让随机变得可控
- 3. 实战演示:用 LangChain 搭建 AI 写作工作流
- 4. 踩坑指南
1. 控制随机性的关键参数
先抛一个问题:大模型每次输出,是直接选那个“概率最高”的词吗?答案是:不,它更像在“抽签”。
比如看到“你好”,模型给每个可能的下一字分配了概率,就像这样:
复制代码吗(0.35)> 啊(0.18)> 呀(0.08)> 嘛(0.05)> 吧(0.04)> 呢(0.03)> ...
↑ 大概率生成"吗" ↑ 不可能生成"坏"
这里的
,就是控制这个“抽签”过程有多随机的开关。
1.1 temperature(温度)️
| 取值 | 效果 | 适合场景 |
|---|
| 几乎每次都选第一名,很死板 | 写代码、翻译、法律合同、技术文档 |
| 适度随机,兼顾准确和变化 | 日常对话、总结 |
| 天马行空,跳跃性强 | 写小说、起标题、广告语、头脑风暴 |
1.2 Top K & Top P(核采样)
:从“概率最高的 K 个词”里抽签,其余直接淘汰。
| K 值 | 效果 |
|---|
| 1 | 永远选第一名,完全不随机 |
| 3~10 | 极小范围采样,防止跑偏 |
| 20~50 | 适度范围,常用默认值 |
| 越大 | 随机性越强 |
这里有个关键区别:
temperature 只管“敢不敢选第二名”,而 Top K 管“有没有资格参赛”
。它们干的是不同的事——先用 Top K 过滤掉那些“垃圾候选”,再用 temperature 控制随机的程度。
| 对比维度 | Top K | Top P |
|---|
| 固定取前 K 个候选词 | 动态取,概率累加到 P 为止 |
| 固定不变 | 自适应变化 |
| 分布平坦时可能漏掉好词 | 分布集中时自动收紧,分散时放宽 |
| 早期主流方案 | |
1.3 temperature 和 Top K 如何搭配
| 策略 | 搭配 | 适合 |
|---|
| 靠谱创意 | temperature 0.71.0 + Top K 小(2050) | 写文案、起标题、角色对话 |
| 保守准确 | temperature 低 + Top K 无所谓 | 写代码、翻译、法律合同 |
1.4 其他辅助参数
| 参数 | 作用 | 通俗理解 |
|---|
maxToken | 限制一次输出最多多少个 token | 给 AI 划“字数上限” |
frequency_penalty | 惩罚重复用词 | 值越大越不爱说同样的话 |
presence_penalty | 惩罚聊过的话题 | 值越大越爱换新话题 |
1.5 场景速查

2. LangChain:让随机变得可控
LangChain = Lang(语言模型)+ Chain(工作链)
️
2.1 为什么需要 LangChain?
直接调用 LLM 有两个明显的痛点:
| 痛点 | 说明 |
|---|
| | 单次调用能力有限,无法串联复杂任务 |
| | 不知道它怎么得出结果的,难以调试 |
LangChain 的核心是 chain(链条):
把 AI 工作流拆成一个个节点串起来,每一步都可追踪、可调试
。
2.2 架构思路:拆、串、换、看
2.3 核心模块速览
| 模块 | 作用 | 什么时候用 |
|---|
prompts | 提示词模板,动态填变量 | 每次都要搭“填空题” |
output_parsers | 把 LLM 文本转成 JSON/数组 | 需要结构化输出时 |
runnables | 用 .pipe() 串联各步骤 | 搭建工作流时必用 |
callbacks | 监听 LLM 调用全过程 | 需要日志/计费/限流时 |
memory | 记住对话历史 | 多轮对话场景 |
retrievers | 从知识库捞相关内容 | RAG 应用必备 |
3. 实战演示:用 LangChain 搭建 AI 写作工作流
3.1 工作流全景

同一个 PromptTemplate,接两条不同的链——只换模型参数,就能得出两种风格。
3.2 关键组件拆解
① 两套模型参数,两种风格
复制代码
const creativeModel = new ChatOpenAI({
model: 'deepseek-v4-pro',
temperature: 0.8,
topK: 4,
maxToken: 600,
apiKey: process.env.DEEPSEEK_API_KEY,
configuration: { baseURL: 'https://api.deepseek.com' }
});
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' }
});
② PromptTemplate — 复用提示词
复制代码const storyPrompt = PromptTemplate.fromTemplate(
'请写一篇短篇散文,主题:{theme},风格温柔治愈,篇幅200字左右'
);
storyPrompt.invoke({ theme: "秋日山野晚风" });
③ OutputParser — 自动解析
复制代码
const outputParser = new StringOutputParser();
④ Chain 串联
复制代码const creativeChain = storyPrompt.pipe(creativeModel).pipe(outputParser);
const preciseChain = storyPrompt.pipe(preciseModel).pipe(outputParser);const creativeText = await creativeChain.invoke({ theme: "秋日山野晚风" });
const preciseText = await preciseChain.invoke({ theme: "秋日山野晚风" });
3.3 真实运行结果对比
| 对比维度 | 创意模式(t=0.8) | 严谨模式(t=0.2) |
|---|
| “情人微凉的指尖”、“山水画” 跳跃灵动,意象出奇 | “清凉的丝绸帕子”、“金色的波浪” 平实温暖,用词常规 |
| 长句连绵,节奏起伏如诗 | 复合句居多,起承转合清晰 |
| 主观 · 通感 | 客观 · 引导读者 |
| 像诗人即兴挥洒 | 像老师写范文 |
点击展开完整散文原文
创意模式(temperature=0.8, topK=4)
严谨模式(temperature=0.2, topK=8)
3.4 Callbacks:监控摄像头
复制代码class MonitorHandler extends BaseCallbackHandler {
async handleLLMStart(llm, prompts) {
console.log(" LLM 开始调用, prompt:", prompts[0].substring(0, 80) + "...");
}
async handleLLMEnd(output) {
console.log(" token 用量:", output.llmOutput?.tokenUsage);
}
}await creativeChain.invoke(
{ theme: "秋日山野晚风" },
{ callbacks: [new MonitorHandler()] }
);
3.5 换模型有多简单?
同一套代码,切换不同厂商只需改 baseURL,
:
| 厂商 | baseURL |
|---|
| DeepSeek | |
| 阿里通义千问 | |
| 智谱 GLM | |
| 本地 Ollama | |
3.6 Memory:让 AI 记住上下文
复制代码const memory = new BufferMemory();const creativeChat = new ConversationChain({
llm: creativeModel,
memory: memory,
});const preciseChat = new ConversationChain({
llm: preciseModel,
memory: memory,
});
4. 踩坑指南 ️
| 坑点 | 说明 | 解决方案 |
|---|
| 部分 API(如 OpenAI)不支持同时设置,会报错或忽略其中一个 | 查阅对应厂商文档,一般二选一即可 |
| 浮点精度问题 + 底层采样器可能有微小随机,多次运行仍有细微差异 | 设置 seed 参数固定随机种子(部分厂商支持) |
| DeepSeek 用 top_k,OpenAI 用 topK,LangChain 对大小写敏感 | 统一使用 LangChain 官方参数名,让框架帮你转换 |
| 不同厂商参数名不同,混用会导致配置不生效 | 用 LangChain 的 maxToken,框架会自动映射 |
| temperature > 1.5 时概率分布被压太平,可能输出无意义内容 | 控制范围在 0~1.5,超出后质量急剧下降 |
总结
| 概念 | 一句话总结 |
|---|
| 控制“敢不敢选第二名”,越高越疯,越低越乖 |
| 固定取前 K 个候选词参赛 |
| 动态保留概率累加到 P 的候选词,更智能 |
| 把 AI 工作流拆成可串可换可看的流水线 |
| .pipe() 串联所有零件 |
| 装监控,看每一环节的耗时和 token |
参数速查卡
| 场景 | ️ temperature | Top P |
|---|
| 代码/翻译/合同 | | 0.1 - 0.3 |
| 日常对话/总结 | | 0.5 - 0.7 |
| 文案/小说/头脑风暴 | | 0.8 - 0.95 |