Skip to content

1.3 生成参数详解

这些参数控制 AI"怎么生成"文字,理解它们能帮你在不同场景下调出更好的效果。

Temperature(温度):控制随机性

这是最常被误解的参数。

Temperature 不是"思考深度",是"随机程度"。

AI 每次生成一个 Token,其实是从所有可能的词里按概率选一个。Temperature 控制这个选择有多随机:

Temperature = 0:每次都选概率最高的那个词 → 输出很稳定,但可能显得死板
Temperature = 1:按原始概率随机选 → 正常状态
Temperature = 2:放大随机性 → 输出更"创意",但也更容易出错

💡 类比:你写作文,Temperature 低 = 你总是用最常见、最保险的词;Temperature 高 = 你更愿意用奇特的词,文章更有个性,但可能也更容易写出奇怪的句子。

实际使用建议:

场景推荐 Temperature
写代码、数据提取0 ~ 0.3(要稳定、准确)
回答问题、写文档0.5 ~ 0.7(正常)
写文案、头脑风暴0.8 ~ 1.2(要创意)

Top-P 和 Top-K:缩小候选范围

这两个参数控制"每次生成下一个词时,从多大的候选池里选"。

Top-K:只从概率最高的 K 个词里选。

假设下一个词的候选:
"猫" 40%
"狗" 30%
"鸟" 20%
"鱼" 8%
"树" 2%

Top-K = 3 时:只从"猫/狗/鸟"里选,砍掉了"鱼"和"树"

Top-P:从概率累计到 P% 为止的候选词里选(英文叫 Nucleus Sampling,这个名字来自数学概念,你不需要管它为什么叫这个名字)。

Top-P = 0.9 时:从概率加起来到 90% 的词里选
(上例中:猫40% + 狗30% + 鸟20% = 90%,选这三个)

实际使用:

  • 大多数情况下保持默认值就好
  • 如果觉得输出太"发散",降低 Top-P(比如 0.7)
  • Top-K 和 Top-P 通常只用一个,不同时调

Max Tokens:最大输出长度

控制 AI 最多生成多少 Token 的回复。

⚠️ 注意:这个是上限,不是"让 AI 生成这么多"。如果 AI 完成了任务,它会自然停止,不会强行凑满。

如果 AI 的回复被截断(中途停了),通常是 Max Tokens 设得太低了。


Stop Sequence:让 AI 在特定词处停止

你可以设置一些"停止符",当 AI 生成到这个词时,立刻停止输出。

常见用途:

javascript
// 只让 AI 生成 JSON,遇到 ``` 就停
stopSequences: ["```"]

// 生成多个条目,每个用 ### 分隔,只需要第一个
stopSequences: ["###"]

Seed:让输出可复现

设置相同的 Seed 值 + 相同的 Prompt + 相同的参数 → 大概率得到相同的输出。

什么时候用:

  • 调试时,你想复现一个特定的输出
  • 测试时,你想让结果稳定可比较

注意:不同模型版本之间,即使相同 Seed 也不保证相同输出。


Streaming(流式输出)

你已经理解这个了。Streaming = AI 生成一个 Token 就立刻发给客户端,而不是等全部生成完才发送。

为什么大多数场景要用 Streaming:

  • 用户体验好,不用盯着空白等
  • 对于长回复,减少"首字等待时间"(Time to First Token)
  • 出错了可以提前看到,不用等到最后


🛠️ 实战练习:Temperature 对比实验

用同一个 Prompt,分别用不同 Temperature 调用 API,观察输出差异:

javascript
import OpenAI from "openai"

// —— 后端配置(换模型/换服务只改这里)——
// 默认:DeepSeek 云端 API
const client = new OpenAI({
  baseURL: "https://api.deepseek.com",
  apiKey: process.env.DEEPSEEK_API_KEY
})
const MODEL = "deepseek-v4-flash"

// 替代方案:本地 Ollama(先运行 `ollama serve`,完全离线免费)
// const client = new OpenAI({ baseURL: "http://localhost:11434/v1", apiKey: "ollama" })
// const MODEL = "qwen2.5:14b"   // 或 "gemma4:12b"

const prompt = "给我写一个函数名,这个函数的作用是:把用户列表按注册时间排序"

async function testTemperature(temp) {
  const response = await client.chat.completions.create({
    model: MODEL,
    max_tokens: 50,
    temperature: temp,
    messages: [{ role: "user", content: prompt }]
  })
  console.log(`Temperature ${temp}: ${response.choices[0].message.content.trim()}`)
}

// 跑5次,每次用不同的 temperature
for (const temp of [0, 0.3, 0.7, 1.0, 1.5]) {
  await testTemperature(temp)
}

运行之前准备:先 npm install openai,再设置环境变量 DEEPSEEK_API_KEY(用本地 Ollama 则不需要 key)。DeepSeek 和 Ollama 都兼容 OpenAI 协议,所以同一份代码只要改最上面的 baseURLMODEL 就能在云端和本地间切换。

观察要点

  • Temperature = 0 时,多次运行是否总是同一个答案?
  • Temperature = 1.5 时,答案是否有时候显得"奇怪"?
  • 哪个 Temperature 的结果最符合你的期望?

📌 参数速查表

参数作用常用取值
temperature随机性/创意度代码: 0.2,对话: 0.7,创意: 1.0
top_p候选词范围(概率)通常 0.9,不稳定时降到 0.7
top_k候选词数量通常不手动设置
max_tokens最大输出长度根据任务设置,不要卡太死
stop停止符需要精确控制输出结构时用
seed随机种子调试和测试时用
stream流式输出几乎所有用户交互场景都应开启

下一节:1.4 Tool Use 深度使用

写给自己的 AI 学习地图