详细解释
停止序列(Stop Sequences,API 参数写作 stop 或 stop_sequences) 是用户主动告诉模型”到此为止,别继续往下写”的一组终止标记。模型生成过程中一旦输出了这组字符串中的任意一个,就会立刻停,后面不再继续生成,最后一个 stop 标记本身一般也会被去掉不返回。
停止序列是控制输出边界的最便宜手段,比”等模型自然停然后再后处理截断”更省 Token 钱 + 更快。
典型使用场景
| 场景 | 推荐 Stop Sequence | 原因 |
|---|---|---|
| 多轮对话 | ["\nHuman:", "\nAssistant:"] | 避免模型自己虚构下一轮对话 |
| Few-Shot 示例 | ["\n\nInput:"] | 防止输出”下一个示例的输入” |
| JSON 模式 | ["\n\n", "}"](配合 response_format 更佳) | 让 JSON 对象闭合后立刻收 |
| 代码补全 | ["\ndef ", "\nclass ", "\n\n// next"] | 避免把后面函数一起”脑补”出来 |
参数格式(跨厂商差异)
# OpenAI / DeepSeek / 所有 OpenAI 兼容格式:字符串或字符串数组
client.chat.completions.create(model="...", messages=..., stop=["END", "\n\n"])
# Anthropic Claude:使用 stop_sequences 数组
client.messages.create(model="...", messages=..., stop_sequences=["END", "\n\nHuman:"])
# Google Gemini:stopSequences 数组,最多 5 个
唯元智创(Weimeta)聚合层会自动把你传的 stop 参数转成各厂商格式,你不需要手写 if/else 适配每家,SDK 传一次即可。
注意事项
- Stop 是纯字符串后缀匹配:不是 Token 级匹配,大小写敏感,
end和END是两个不同 stop; - 命中停止序列后,
finish_reason会标记为"stop"(区别于长度被截断的"length"); - Stop 序列数量通常限制在 4–16 个,单条长度通常 ≤ 64 字符。
常见问题
Stop 和 max_tokens 谁优先?
谁先触发谁优先:如果在达到 max_tokens 之前先看到 stop 标记,先停(finish_reason=“stop”);否则等生成到 max_tokens 上限被截断(finish_reason=“length”)。业务代码必须同时处理两种 finish_reason。