停止序列 是什麼?

Stop Sequence:停止序列 的完整解釋

指定特殊的詞彙序列,當模型生成到此序列時立即停止生成,用於控制輸出長度和結構邊界。

核心概念

在沒有停止序列的約束下,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 參數暴露給開發者。

常見問題