AI 大模型 API 常用参数怎么设?聊聊 temperature 和 max_tokens
调用 AI 大模型 API 的时候很多人一开始并不是卡在 SDK 上而是卡在参数上temperature到底该填多少max_tokens应该怎么估为什么同一个 prompt有时候回答不太一样又为什么模型经常写着写着突然停了先把结论放前面temperature主要影响回答的随机性和多样性它不负责控制长度max_tokens控制的是模型最多能生成多少 token但它不等于字数也不代表模型一定会写到这个上限。实际用在业务里这两个参数通常要一起看一个决定回答是稳一点还是发散一点另一个决定输出长度、成本和响应时间的上限。场景temperature 建议max_tokens 建议说明客服问答 / 知识库问答0-0.3300-800追求稳定、少跑偏适合事实型回答JSON 抽取 / 信息提取0-0.2按字段数量预留重点是格式稳定代码 / SQL 生成0-0.3800-2000复杂任务通常需要更大的输出空间摘要 / 改写0.2-0.5300-1200根据目标摘要长度灵活调整营销文案 / 标题生成0.6-0.9500-1500需要一些表达变化和备选方案创意写作 / 头脑风暴0.8-1.2800-2000多样性优先但不适合严肃事实任务temperature 是什么它到底在控制什么temperature控制的是模型生成内容时的随机程度。说得直白一点值越低模型越倾向于选择“最可能”的词输出也就更稳定、更保守值越高模型越愿意尝试不同表达结果会更丰富但也更容易跑远。可以大致这样理解temperature输出特点适合场景0-0.2稳定、保守、重复性高分类、抽取、JSON、客服、代码0.3-0.5有一点变化但整体仍可控摘要、改写、知识问答0.6-0.9表达更丰富结果差异更明显文案、标题、内容扩写1.0 以上创意更强但稳定性更差头脑风暴、创意写作这里有个容易误解的地方temperature0并不代表每次输出都 100% 一模一样。不同模型、不同平台、并发推理方式甚至底层实现细节都可能带来一些细微差异。更准确地说低 temperature 能让结果更稳定但不等于绝对固定。另外temperature不管回答长短。如果你想限制输出长度或者希望模型多写一些要看的主要是max_tokens同时也要在 prompt 里说清楚比如“用 3 条回答”“控制在 200 字以内”“输出 10 个标题”等。temperature 设多少比较合适如果你不知道从哪里开始建议先用temperature0.2测试。这个值通常比较稳又不会显得太僵硬。像 RAG 知识库问答、AI 客服、政策解释、数据查询这类事实型任务建议放在0-0.3。这类场景最怕的不是回答没文采而是编造、跑题或者不按给定资料回答。如果是 JSON 输出、字段抽取、标签分类、表格转结构化数据这类结构化任务可以用0-0.2甚至直接设成0。因为这时候最重要的是格式别乱、字段别漏而不是语言多漂亮。到了营销文案、标题生成、短视频脚本、活动文案这类内容生成任务0.6-0.9会更合适。用户通常希望看到不同角度的表达而不是每次都像套模板。至于创意写作、命名、脑暴可以尝试0.8-1.2。不过在生产业务里不建议长期把 temperature 设得特别高尤其是涉及事实、合规、客服、金融、医疗、合同这些严肃场景时高随机性往往会带来更高风险。max_tokens 是什么为什么它不是字数max_tokens表示模型最多可以生成多少 token。注意它是输出上限不是实际输出量更不是字数。比如你设置了max_tokens1000并不意味着模型一定会输出 1000 个 token。如果它觉得回答已经完整可能写到 300 个 token 就停了。但反过来如果你只给max_tokens100却要求它写一份完整方案那它很可能写到一半就被截断。token 可以粗略理解为模型处理文本的基本单位但它不等同于汉字、单词或字符。在中文里可以先粗略按“1 个汉字大约接近 1 个 token”估算但这只是方便理解实际还会受到 tokenizer、标点、英文、数字、空格、特殊符号等影响。英文里一个 token 通常大约是 3-4 个字符或者约 0.75 个单词。真正计费和截断时还是以平台实际 tokenizer 为准。所以max_tokens不能只按“我想要多少字”来设还要一起考虑输入长度、模型上下文窗口、成本以及接口延迟。max_tokens 怎么设先看这几个因素你希望模型输出多长短问答、分类、客服回复一般不需要太大的max_tokens300-800 通常就够了。摘要、改写、方案生成可以放到 600-1500。代码生成、长文草稿、复杂分析就可能需要 1500-3000甚至更高。但也别为了“保险”就无限调大。输出空间越大模型确实更可能写得更长接口响应也可能变慢成本也更难控。模型的上下文窗口有多大大模型都有总上下文限制。简单理解就是输入 token 输出 token 模型上下文窗口如果 prompt、历史对话、检索文档已经很长那么留给输出的空间自然就会变小。比如一个知识库问答请求里塞了大量文档片段又把max_tokens设得很高就可能超过模型上下文限制导致请求失败或者平台自动截断部分上下文。RAG 场景尤其要注意这一点。不要只想着调大输出上限也要控制召回文档数量、每段文档长度以及放进 prompt 里的无关内容。成本和延迟能不能接受大多数大模型 API 都按 token 计费而且通常会区分输入 token 和输出 token。max_tokens虽然只是输出上限不是固定消耗但它会影响潜在成本也会影响最长响应时间。放到生产环境里最好给不同业务设置不同上限。比如客服回复没必要动不动生成上千 token标题生成也完全不需要 2000 token。合理设置max_tokens可以避免异常长回复拖慢接口也能让预算更可控。temperature 和 max_tokens 怎么搭配这两个参数管的事情不一样但实际使用时经常要放在一起调。低 temperature 加短输出比较适合客服、分类、信息抽取、意图识别。目标就是稳定、简洁、可预测。低 temperature 加长输出适合技术文档、代码解释、严肃分析。这样可以让模型写得比较完整同时表达不会太发散。中等 temperature 加中长输出适合摘要、改写、内容扩写。它能在稳定性和表达丰富度之间取得一个比较舒服的平衡。高 temperature 加中长输出更适合标题备选、创意文案、脑暴清单。它能带来更多角度但通常也需要人工筛选。不太建议在严肃事实任务里使用“高 temperature 很大的 max_tokens”。这种组合很容易让模型越写越远幻觉和跑题的概率都会上升。常见任务的参数模板下面这些参数可以作为起点。真正落到项目里建议先固定 prompt再一点点微调参数不要一上来就同时改很多东西。知识库问答 / RAG{temperature:0.2,max_tokens:500}适合基于检索内容回答用户问题。建议在 prompt 里明确说明“仅根据提供资料回答资料不足时就说明不知道。”这句话看起来简单但对降低编造很有帮助。JSON 信息抽取{temperature:0,max_tokens:800}适合从简历、合同、工单、聊天记录里抽取字段。字段越多max_tokens就要适当留大一些。如果对格式要求很高可以配合 JSON mode、structured output或者平台提供的结构化输出能力。文章摘要{temperature:0.3,max_tokens:600}适合生成会议纪要、文章摘要、报告提炼。max_tokens要跟目标摘要长度匹配比如一句话摘要可以设小一点详细纪要就要多留一些空间。营销标题生成{temperature:0.8,max_tokens:300}适合一次生成 10-20 个标题候选。标题任务不需要太大的输出上限但需要一定随机性否则结果很容易重复、没新意。代码生成 / SQL 生成{temperature:0.2,max_tokens:1500}代码任务更看重稳定性所以 temperature 不宜太高。如果是复杂函数、SQL 优化、单元测试生成这类任务可以把max_tokens适当调大。长文草稿{temperature:0.6,max_tokens:2000}适合文章初稿、方案草案、脚本大纲。长文任务最好让模型先输出结构再分段生成正文。一次性让它写完整篇质量容易波动也更容易因为长度限制被截断。可复制的 API 示例下面示例使用的是 OpenAI 兼容风格写法。不同平台的字段名和支持能力可能不完全一样实际使用时还是要以当前模型 API 文档为准。低温客服问答fromopenaiimportOpenAI clientOpenAI(api_keyYOUR_API_KEY,base_urlhttps://api.example.com/v1)responseclient.chat.completions.create(modelyour-model-name,messages[{role:system,content:你是客服助手回答要准确、简洁不确定时说明无法确认。},{role:user,content:订单超过48小时还没发货怎么办}],temperature0.2,max_tokens500)print(response.choices[0].message.content)中温文案生成responseclient.chat.completions.create(modelyour-model-name,messages[{role:system,content:你是中文营销文案助手输出具体、有差异化。},{role:user,content:为一款 AI 会议纪要工具写 8 个推广标题。}],temperature0.8,max_tokens600)结构化 JSON 输出responseclient.chat.completions.create(modelyour-model-name,messages[{role:system,content:只输出合法 JSON不要输出解释文字。},{role:user,content:从这段文本中抽取姓名、公司、职位、联系方式……}],temperature0,max_tokens800)如果你用的是 Claude、Gemini、通义、智谱、DeepSeek或者 ClaudeAPI 这类第三方 Claude API 兼容接入服务平台参数名称、支持范围、上下文长度、结构化输出能力都可能不一样。ClaudeAPI 也不是 Anthropic 官方服务如果涉及兼容接入、多线路、企业充值、开票、中文支持或基础技术协助等信息最好以平台官网的最新说明为准。效果不好时怎么调可以先看这张表问题可能原因调整方式回答每次都不一样temperature 偏高降到 0-0.3并固定 prompt回答太死板temperature 偏低升到 0.6-0.9回答被截断max_tokens 太小增大上限或拆分任务回复太长max_tokens 太大 / prompt 没有限制降低上限并写清目标长度JSON 格式不稳定随机性偏高 / 格式约束太弱降低 temperature增强格式要求内容跑题temperature 偏高 / system prompt 太弱降低 temperature强化角色和边界成本太高输入或输出 token 太多压缩 prompt减少上下文降低 max_tokens延迟太高输入太长或输出上限太大减少输入长度降低 max_tokens拆分生成代码不完整输出空间不够提高 max_tokens要求分文件或分步骤输出调参时有个很实用的原则一次只改一个变量。比如先固定 prompt 和max_tokens只测试不同 temperature然后再固定 temperature测试不同输出上限。否则结果变了你很难判断到底是哪一个参数起了作用。temperature 和 top_p 要不要一起调top_p也是一个控制采样的参数。它的意思是模型会在累计概率达到某个阈值的候选 token 里进行选择。常见范围一般是 0 到 1比如top_p0.9可以理解为只在累计概率约 90% 的候选集合中采样。对大多数开发者来说刚开始接入时优先调temperature就够了top_p保持默认值或者设为 1。不要一上来同时大幅调整temperature和top_p否则输出变了以后很难判断到底是哪一个参数导致的。可以简单记成这样需求建议想让回答更稳定降低 temperature想让回答更多样提高 temperature需要更细地控制采样范围再考虑 top_p刚开始接入 APItop_p 保持默认新版 API 里字段名可能不一样不同接口对输出长度参数的命名并不完全统一。有的平台叫max_tokens有些新接口可能叫max_completion_tokens或max_output_tokens。Chat Completions、Responses API以及各家 OpenAI 兼容接口在字段名、默认值、最大值和返回格式上也可能存在差异。所以写代码时不要只复制旧教程里的参数。尤其要避免把旧版 Completions API、过时模型名称或者旧 SDK 写法当成唯一标准。更稳妥的做法是先确认当前模型支持哪种接口再查看这个接口对 temperature、max tokens、上下文窗口和结构化输出的说明。不同行业场景怎么选参数RAG / 知识库问答建议用temperature0.1-0.3max_tokens400-800。这里最关键的是检索上下文质量不能只指望调参数来解决幻觉问题。AI 客服可以放在temperature0.2左右max_tokens300-600。回答要短、稳、可控不确定时就引导转人工或者明确说明无法确认。内容生成通常可以用temperature0.6-0.8max_tokens800-2000。先生成大纲再生成正文往往比一次性生成整篇更稳。代码助手建议用temperature0-0.3max_tokens1000-3000。代码任务对逻辑稳定性要求高复杂需求最好拆成函数、测试、解释几个步骤来做。数据抽取建议temperature0max_tokens根据字段数量和输入复杂度预留。如果平台支持结构化输出优先用结构化输出能力效果通常更稳。Agent / 工具调用也建议低 temperature尤其是涉及函数调用、数据库查询、工作流执行时。随机性太高会增加选错工具、参数不稳定的概率。总结不知道怎么设时先用这套默认值如果你只是想快速接入 AI API可以先按下面这套参数测试任务推荐设置事实问答temperature0.2max_tokens500结构化输出temperature0max_tokens800摘要改写temperature0.3max_tokens600-1200内容生成temperature0.7max_tokens1000-2000代码生成temperature0.2max_tokens1500创意脑暴temperature0.9max_tokens800-1500最后记住这三个原则就够了temperature管稳定性和多样性max_tokens管输出上限、成本和延迟生产环境一定要设置合理的输出上限调参时一次只改一个变量。这样比盲目套默认参数靠谱得多后面排查问题也会轻松很多。