stop 序列是什么
stop 参数指定一个或多个停止串,模型生成到该内容时立即终止,后续不再产生 token。它把输出边界交给生成过程本身执行,而不是生成完再用字符串裁剪,因此在分节生成、多段拼接、模板化输出这些场景下既更省也更稳。风险集中在误伤:停止串如果太通用,正文里一旦出现就会被提前截断,输出看起来莫名其妙地断掉了。
基本信息
| 作用 | 命中停止串即结束生成,未产生的后续 token 不再计费 |
|---|---|
| 常见用法 | 分节分隔符、代码结束标记、自定义终止标记 |
| 数量上限 | 各厂商不同,例如 OpenAI 侧上限为 4 个停止序列 |
| 输出包含性 | 停止串本身是否包含在返回内容中,按厂商定义,多为不包含 |
| 与长度限制关系 | 与最大 token 数共同作用,先到者生效 |
| 流水线用法 | 按节生成后拼接,用停止串精确控制每节的边界 |
典型使用场景
- 分节生成:同一提示词分多次产出各章节,靠停止串切出干净边界
- 结构化输出:生成 JSON 后不想再追加客套话,用停止串截断尾部的解释
- 代码生成:以固定的结束标记作为终止条件,避免多出示例代码
- 并行分段生成:多个请求同时产出不同段落,最后按约定的分隔符合并
- 成本控制:早停即省,长回答场景下停止串能直接减少输出 token
分节输出与停止串
分节输出与停止串
# stop 指定后,模型生成到该串立即停止
curl https://api.openai.com/v1/chat/completions \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o-mini",
"messages": [{"role": "user", "content": "给出两条建议,每条以 --- 结尾"}],
"stop": ["###END###"]
}'
# 提示词里也要声明终止约定,否则模型不会主动输出该标记
# 停止串选得越长越特异,正文里意外出现的概率越低常见问题与处理
| 情形 | 表现 | 处理 |
|---|---|---|
| 停止串太通用 | 正文出现该词就断 | 选用长且不自然出现的标记 |
| 模型不输出标记 | 生成到长度上限才停 | 在提示词中显式要求输出终止标记 |
| 迁移到其他厂商 | 停止串数量超限被静默忽略 | 核对目标厂商的上限与是否包含停止串 |
| 多段拼接错位 | 缺少分隔符导致段落黏连 | 统一约定分隔符并做拼接后校验 |
| 与长度上限冲突 | 先到者生效,输出被截 | 两者的预期作用范围分开设计 |
拼接式流水线用停止串控制边界,比事后按字符串裁剪更省也更稳:后者要多生成一段再删掉,前者在命中时就已经停止计费。
停止串要选正常人不会写出来的内容:选用「完」「结束」这类常见词,正文里出现一次就会导致输出被意外截断,而且这类问题在测试短样本时很难发现。