请求参数与流式输出

上一章能跑通对话,本章把常见请求参数逐个讲透,并介绍 Agent 高频使用的流式输出。理解 temperature、max_tokens、stream 这些参数,是调优效果与控制成本的基础。

请求参数总览

Chat Completions 请求中的常见参数如下,语义大体通用(取值范围以所用模型文档为准):

参数含义使用建议
model选择模型按任务难度与预算选
messages对话消息数组Agent 的主输入
temperature采样随机性Agent 决策常用低值
top_p核采样概率阈值与 temperature 二选一微调
max_tokens本次最多生成的 token 数设上限防失控超支
stop命中即停止生成的序列截断固定格式输出
seed随机种子尽量复现结果,不保证
stream是否流式返回长任务建议开 true

temperature 与 top_p

temperature 控制随机性:接近 0 时输出稳定、可预期,适合 Agent 的决策与工具参数;调高后表达更多样,也更容易跑偏。top_p 是另一种随机性控制方式,两者同时调等于叠加扰动,实践上固定一个、只调另一个即可。

max_tokens 与 stop

max_tokens 是生成长度的安全阀,防止单次输出过长烧钱或超限;注意部分推理模型的该字段含思考内容预算,确切语义以官方文档为准。stop 给一个或多个停止字符串,例如让模型输出完指定内容就停:

{"stop": ["\n\n", "结束"], "max_tokens": 512, "temperature": 0}

stream:流式输出

大模型是逐 token 生成的,等全部生成完再一次性返回会很慢。把 stream 设为 true,服务端就会边生成边推送,传输用的是 SSE(Server-Sent Events):每个分片是一行 data: 开头的 JSON,结束后发一行 data: [DONE]。用 curl 直观感受:

curl -N "$BASE_URL/chat/completions" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"'"$MODEL"'","messages":[{"role":"user","content":"从 1 数到 3"}],"stream":true}'
# 输出:逐行 data: {"choices":[{"delta":{"content":"1"}}]} …,最后一行 data: [DONE]

SDK 流式写法

openai SDK 里传入 stream=True,再遍历返回的流逐段累积内容即可:

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("OPENAI_API_KEY"),
    base_url=os.getenv("BASE_URL") or None,  # 无自定义地址时用官方默认
)
stream = client.chat.completions.create(
    model=os.getenv("MODEL"),
    messages=[{"role": "user", "content": "从 1 数到 3"}],
    stream=True,
)
for chunk in stream:
    delta = chunk.choices[0].delta.content
    if delta:
        print(delta, end="", flush=True)
# 输出:123(边生成边逐字显示)

对 Agent 而言,长任务开启流式能显著改善等待体验,也能更早拿到首批内容开始下游处理。

推理模型的思考内容

推理模型会先「想」再答,部分服务把思考过程放在独立字段返回,例如 DeepSeek 的 reasoning_content,其他服务商可能叫别的名字。是否返回、字段名、是否计费、能否关闭,各家差异很大:

msg = resp.choices[0].message
if getattr(msg, "reasoning_content", None):   # 字段名以模型官方文档为准
    print("思考:", msg.reasoning_content)
print("回答:", msg.content)

注意:思考内容是模型内部过程,不可控且可能含敏感信息,做产品时通常不直接展示给终端用户。

小结

请求参数里,temperature/top_p 管随机性,max_tokens/stop 管长度与停点,seed 管复现,stream 管返回节奏。流式输出基于 SSE 逐片推送,是长任务体验的关键;推理模型的思考字段要按各家文档读取,并谨慎对外展示。

笔记加载中…