极简工具箱

免费在线工具 · 本地计算 · 无需上传

调用大模型 API:参数怎么调、报错怎么处理

同一个提示,有人得到稳定输出,有人得到一堆跑偏的内容——差别常在 temperature。而 429 与超时,才是上线后最常见的两类故障。

广告位(百度联盟)

一、请求的基本结构

{
  "model": "your-model",
  "messages": [
    {"role": "system", "content": "你是一个严谨的技术编辑。"},
    {"role": "user", "content": "把下面这段改写成 100 字以内的摘要:..."}
  ],
  "temperature": 0.3,
  "max_tokens": 300
}

messages 是对话数组,角色通常有:

二、两个采样参数

temperature(0–2,常见 0–1):

top_p(核采样):

实践建议:

任务temperature
结构化抽取、分类0–0.2
代码、翻译0.2–0.4
摘要、改写0.3–0.6
创意文案0.7–1.0

三、max_tokens 与截断

max_tokens 限制输出长度(不是输入)。

被截断的典型信号是 finish_reason: "length"。生产环境要检查这个字段,截断时要么重试(提高上限),要么降级处理。

四、流式输出

stream = client.chat.completions.create(model=..., messages=..., stream=True)
for chunk in stream:
    delta = chunk.choices[0].delta.content
    if delta:
        print(delta, end='', flush=True)

适合聊天界面(首字延迟低、体验好)。注意:

五、报错与重试

状态码含义处理
400参数错、超上下文修正请求,不要重试
401密钥无效检查配置
403无权限 / 地区限制联系服务方
404模型名错核对模型 ID
429限流或额度用尽指数退避重试
500 / 502 / 503服务端问题退避重试,设置上限
超时网络或模型慢设超时 + 重试 + 降级

退避重试的写法:

import time, random
for attempt in range(4):
    try:
        return call()
    except RateLimitError:
        if attempt == 3:
            raise
        time.sleep((2 ** attempt) + random.random())

要点:只对可重试的错误重试(429、5xx、超时),400 重试只是浪费额度;加随机抖动避免同时重试造成二次拥塞;设置总时长上限。

六、密钥与成本

七、稳定性设计

八、调试建议

小结

system 定规则、user 给任务;抽取类任务 temperature 调低;max_tokens 管输出,检查 finish_reason;429 与 5xx 用指数退避重试,400 直接修;密钥只在服务端;上线要有超时、降级与输出校验。

本文相关工具(本地计算,无需上传)

更多使用教程