搜尋意圖: 如果你在找「停止序列 是什麼」或「停止序列 和相近概念差在哪」,先看這頁的短定義、完整說明與延伸比較。
TL;DR: 指定特殊的詞彙序列,當模型生成到此序列時立即停止生成,用於控制輸出長度和結構邊界。
實用情境: 適合用在閱讀 AI 文章、產品文件或和同事討論時,先用一頁快速對齊概念。
下一步: 先讀完定義,再往下看延伸比較與對應工具,把概念轉成實際應用。
指定特殊的詞彙序列,當模型生成到此序列時立即停止生成,用於控制輸出長度和結構邊界。
核心概念
在沒有停止序列的約束下,LLM 生成會持續進行直到達到預設的最大長度或生成特殊的結束標記(如 <|endoftext|>)。然而,最大長度是粗糙的控制,結束標記的生成時機不可預測。
停止序列提供了更精細的控制。透過指定一個或多個停止序列,開發者可以明確定義「生成到哪裡停止」。例如,在 QA 系統中,指定「
」作為停止序列,確保模型只生成一個回答段落;在多輪對話中,指定「User:」作為停止序列,確保生成在用戶輪次開始前停止。
運作原理
基本機制
生成過程正常進行:逐步生成詞彙,形成序列。
在每個生成步驟後,系統檢查當前序列是否包含(或以)停止序列結尾。
如果檢測到停止序列,立即終止生成,返回停止序列之前的部分(通常不包含停止序列本身)。
如果未檢測到停止序列,繼續生成下一個詞彙。
實現細節
停止序列可以在令牌(token)級別或字符級別進行匹配。令牌級匹配對詞彙表的特定詞彙進行(例如,停止序列是 [END] 令牌),字符級匹配對生成的文本字符串進行。
大多數現代實現支持多個停止序列,形成一個停止序列列表。生成會在匹配到列表中的任何一個序列時停止。
某些實現也支持正則表達式停止序列,允許更靈活的匹配模式。
實際應用
應用場景
結構化輸出生成:在生成 JSON 或 YAML 時,使用停止序列確保完整性。例如,指定 } 或 --- 作為停止序列,確保生成到結構邊界。
多輪對話系統:在對話中,用「User:」或「Assistant:」作為停止序列,精確控制角色轉換。
段落級生成:使用「
」(雙換行)作為停止序列,生成單個段落而非整篇文章。
列表生成:使用數字編號(如「3. 」)或項目符號作為停止序列,生成特定長度的列表。
常見停止序列
- 「
」:段落邊界,用於單段落生成
- 「
」:行邊界,用於單行生成
- 「<|endoftext|>」或「<|end|>」:正式結束令牌
- 「User:」「Human:」:對話邊界
- 「---」或「===」:文件分隔符
- 「[DONE]」「[END]」:自訂結束標記
- 「API response:」「Output:」:格式邊界
常見誤區
誤區 1:停止序列會包含在輸出中。大多數實現自動移除停止序列,只返回之前的部分。有些實現可配置此行為,但預設通常是移除。
誤區 2:停止序列必須是長字符串。停止序列可以非常簡短,甚至單個字符。簡短的序列匹配更容易,但可能導致意外提前停止;過長的序列可能無法匹配。
誤區 3:多個停止序列會導致優先衝突。實務中,系統通常在遇到任何停止序列時立即停止,不考慮優先級。如果需要優先級,應該設計不重疊的停止序列。
誤區 4:停止序列影響生成品質。實際上,停止序列只是終止點,不改變生成過程本身的質量。它們是後處理控制。
誤區 5:停止序列可以替代長度限制。雖然停止序列提供更精細的控制,但應該與長度限制結合使用,作為雙重安全保護。
與相關技術的比較
停止序列 vs 最大長度限制
- 停止序列基於內容,最大長度基於計數
- 停止序列更精確,最大長度更穩健(保障沒有超長輸出)
- 應該結合使用:停止序列控制理想邊界,最大長度作為緊急制動
停止序列 vs 終止令牌
- 終止令牌是模型預訓練中學到的特殊令牌
- 停止序列是外部施加的硬性限制
- 終止令牌依賴模型行為,停止序列絕對可靠
- 兩者都是終止機制,停止序列通常更可控
停止序列 vs 詞彙約束
- 詞彙約束限制可選詞彙集合
- 停止序列是內容匹配終止
- 詞彙約束影響整個生成過程,停止序列只在末端生效
- 兩者可結合,詞彙約束過程中生成,停止序列終止生成
停止序列是現代 LLM API 的標準功能。OpenAI、Anthropic、Google 等主要提供商都支援此功能,通常作為 API 參數暴露給開發者。
常見問題
可以設定多個停止序列嗎?它們是否有優先級?
可以設定多個停止序列,大多數 API 允許傳遞一個停止序列列表。關於優先級,通常系統不考慮優先級,而是在遇到列表中的任何一個序列時立即停止。如果多個序列同時匹配(例如一個序列是另一個的前綴),具體行為取決於實現。設計停止序列時,應避免重疊的前綴關係。
如果停止序列在輸出中自然出現會怎樣?
如果生成過程中自然出現了停止序列,系統會立即停止,即使這個出現可能不是有意的。例如,如果用「.」作為停止序列,模型生成「The sky is blue.」時會立即停止,可能比預期早。這是為什麼選擇停止序列時需要謹慎,應選擇在自然生成中不太可能出現的序列。複雜或特殊的序列(如「[STOP_GENERATION]」)比簡單標點更安全。
停止序列可以是正則表達式嗎?
某些 API 和框架支援正則表達式停止序列,但不是全部。例如,某些開源框架可能允許指定正則表達式以匹配更複雜的模式。但大多數商業 API(如 OpenAI)只支援字面字符串停止序列。開發者應檢查具體實現的文件。如果需要複雜匹配,也可在生成後進行後處理而非依賴停止序列。