首页 > 教程攻略 > ai资讯 >️ 大模型随机性完全指南:从概率抽签到 LangChain 实战

️ 大模型随机性完全指南:从概率抽签到 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)> ...
↑ 大概率生成"吗"                     ↑ 不可能生成"坏"

这里的

temperature

,就是控制这个“抽签”过程有多随机的开关。


1.1 temperature(温度)️

取值效果适合场景

0 ~ 0.3

几乎每次都选第一名,很死板写代码、翻译、法律合同、技术文档

0.5 ~ 0.7

适度随机,兼顾准确和变化日常对话、总结

0.8 ~ 1.5

天马行空,跳跃性强写小说、起标题、广告语、头脑风暴

1.2 Top K & Top P(核采样)

Top K

:从“概率最高的 K 个词”里抽签,其余直接淘汰。

K 值效果
1永远选第一名,完全不随机
3~10极小范围采样,防止跑偏
20~50适度范围,常用默认值
越大随机性越强

这里有个关键区别:

temperature 只管“敢不敢选第二名”,而 Top K 管“有没有资格参赛”

。它们干的是不同的事——先用 Top K 过滤掉那些“垃圾候选”,再用 temperature 控制随机的程度。


对比维度Top KTop 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,                           // 只在前 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,                           // temp 低时 Top K 大小无所谓
   maxToken: 600,
   apiKey: process.env.DEEPSEEK_API_KEY,
   configuration: { baseURL: 'https://api.deepseek.com' }
});

② PromptTemplate — 复用提示词

 复制代码const storyPrompt = PromptTemplate.fromTemplate(
    '请写一篇短篇散文,主题:{theme},风格温柔治愈,篇幅200字左右'
);
storyPrompt.invoke({ theme: "秋日山野晚风" });
// → 自动替换 {theme}

③ OutputParser — 自动解析

 复制代码//  无 LangChain:LLM 返回 AIMessage 对象,需手动 .content 获取文本
//  有 LangChain:链上自动提取 content,直接返回字符串
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,   // temperature=0.8
  memory: memory,
});const preciseChat = new ConversationChain({
  llm: preciseModel,    // temperature=0.2
  memory: memory,
});

4. 踩坑指南 ️

坑点说明解决方案

topK 与 topP 同时设置

部分 API(如 OpenAI)不支持同时设置,会报错或忽略其中一个查阅对应厂商文档,一般二选一即可

temperature=0 并非完全确定

浮点精度问题 + 底层采样器可能有微小随机,多次运行仍有细微差异设置 seed 参数固定随机种子(部分厂商支持)

参数名大小写不一致

DeepSeek 用 top_k,OpenAI 用 topK,LangChain 对大小写敏感统一使用 LangChain 官方参数名,让框架帮你转换

maxToken 与 maxTokens

不同厂商参数名不同,混用会导致配置不生效用 LangChain 的 maxToken,框架会自动映射

温度太高导致输出乱码

temperature > 1.5 时概率分布被压太平,可能输出无意义内容控制范围在 0~1.5,超出后质量急剧下降

总结

概念一句话总结

temperature

控制“敢不敢选第二名”,越高越疯,越低越乖

Top K

固定取前 K 个候选词参赛

Top P

动态保留概率累加到 P 的候选词,更智能

LangChain

把 AI 工作流拆成可串可换可看的流水线

Chain

.pipe() 串联所有零件

Callbacks

装监控,看每一环节的耗时和 token

参数速查卡

场景️ temperature Top P
代码/翻译/合同

0.0 - 0.3

0.1 - 0.3
日常对话/总结

0.5 - 0.7

0.5 - 0.7
文案/小说/头脑风暴

0.8 - 1.2

0.8 - 0.95