跳到主要內容區塊

計資中心電子報C&INC E-paper

專題報導

深度學習與Prompt Caching
  • 卷期:v0072
  • 出版日期:2025-03-20

作者:周秉誼 / Tomofun 資深技術經理


為了讓大語言模型依指示產生出正確回應,使用者會進行提示工程,在提示詞中加入大量的資訊,使提示詞往往會多達上千字甚至上萬字,不但費用增加,也減慢大語言模型的回應時間。提示詞快取是一種可以顯著提升大型語言模型計算效率的技術。提示詞快取的核心概念是將先前處理過的提示詞及其結果儲存起來,當再次遇到相同的提示詞時,便可直接從快取中取得結果,而無需再次傳遞給大語言模型進行運算。本文將介紹提示詞快取的機制,及實務上要如何調整提示詞來節省大語言模型的使用成本。

 

前言

隨著大語言模型(Large Langauge Model, LLM)的發展不斷加速,各大科技公司或新創團隊紛紛推出獨自的大語言模型,大語言模型的競爭也隨之白熱化。除了過去就十分重視的、模型在不同工作上的效能之外,也越來越重視大語言模型的使用成本、大語言模型的回應時間、及大語言模型服務的穩定性。提示詞(Prompt)是使用大語言模型最簡單直接的方式,讓人們可以用最熟悉的自然語言的方式來和大語言模型互動,也成為新一代的人機互動介面。為了讓大語言模型依照使用者的指令、正確產生出回應,使用者會在提示詞中加入大量的資訊,使提示詞往往會多達上千字甚至上萬字,不但費用增加,也減慢大語言模型的回應時間。提示詞快取(Prompt Caching)是一種可以顯著提升大型語言模型計算效率的技術。它的核心概念是將先前處理過的提示詞及其結果儲存起來,當再次遇到相同的提示詞時,便可直接從快取中取得結果,而無需再次傳遞給大語言模型進行運算。本文將介紹提示詞快取的機制,及實務上要如何調整提示詞來節省大語言模型的使用成本。

 

提示工程 Prompt Engineering

大型語言模型的提示工程(Prompt engineering)是指設計、優化和修改輸入給大型語言模型的提示詞的過程,用以獲得更好、更準確的輸出結果。這是一種與大語言模型互動的技術,目的在於引導大語言模型產生特定、有用且符合預期的回應。

在大型語言模型的提示工程中,為了讓大語言模型能更加理解使用者的需求、提升大語言模型的效能和準確性,通常會在提示詞中加入幾種內容,包括指令、背景資訊、限制、範例等等資訊,並且常會搭配角色設定(Role Setting)、少樣本提示(Few-Shot Prompting)和思維鏈(Chain of Thought, CoT)等提示工程技術。角色設定是指在提示中明確指定模型應扮演的角色或身份,例如要求模型以專家的口吻回答問題。

少樣本提示是在提示中提供多個範例,讓大語言模型了解預期的輸入和輸出。思維鏈會引導大語言模型逐步推理,將複雜問題分解為一系列中間步驟,使模型在生成最終答案前先透過思考步驟使回應的效果更好。

這些方法雖能有效引導大語言模型生成所需的輸出,使模型能夠生成在特定情境下更相關的回應,但也導致提示詞的長度逐漸增加。

 

提示詞快取 Prompt Caching

大型語言模型的提示工程雖然會讓提示詞的長度大幅增加,但我們也可以發現角色設定、少樣本提示和思維鏈等提示工程技術增加的提示詞內容在同類型的不同的問答之間,可以整理成相同的提示詞內容,而只有問答的問題是不同的、隨著不同的問答而變化。因此我們可以把提示詞分成兩大部份,一個是提示工程的提示詞,另一個是當次問答的內容。一般來說,提示工程的提示詞通常會放在提示詞在前半部,讓大語言模型能更加了解目前問答的背景資訊,而當次問答的內容通常會放在提示詞在後半部,讓大語言模型可以針對當次問答來產生回應。

現代的大語言模型大多採用Transformer的深度學習架構,在Transformer的架構中包括了三個部份,生成過程的中間向量表示(Intermediate Vector Representation)、Key-Value注意力(Key-value Attention)、自回歸(Autoregressive)的Token-by-token生成過程。Transformer模型由多層編碼器(Encoder)和解碼器(Decoder)堆疊而成,模型會將使用者的輸入轉換成一系列的向量表示,當再次遇到相同的提示時,就可以直接從提示詞快取中取出這些向量表示,而無需再次進行繁瑣的計算。Key-Value注意力機制會依照重要性計算每個詞的權重,讓模型把注意力放在輸入中的不同部分,這些權重在模型計算過程中會多次使用,現代Transformer架構在內部已經有KV Cache的機制,避免了重複計算先前token的注意力分數,提示詞快取中也會快取KV Cache。大語言模型生成過程是自回歸的,一次生成一個token,每生成一個token都需要將前面所有token重新計算,導致計算複雜度隨著生成序列長度的增加而不是線性增長,使用提示詞快取就可以節省大量計算資源。

 

20250320_007209_01

圖1. 提示詞快取示意圖

(from: https://platform.openai.com/docs/guides/prompt-caching)

 

 

提示詞快取實務

大型語言模型服務廠商的API大多都有提供提示詞快取的功能,如OpenAI及Anthropic。OpenAI宣稱使用提示詞快取功能可將回應時間減少高達80%,並將成本降低50%,在4o及o1系統的大語言模型上都可使用。Anthropic宣稱使用提示詞快取功能可使成本降低高達90%,回應時間降低高達85%,且在幾個最受歡迎的Claude大語言模型上都可使用。

在OpenAI的說明中提到,只有提示詞中的前綴(Prefix)完全符合時才有可能快取命中(Cache hit)。為了享受到快取的好處,要將靜態內容(如說明和範例)放在提示詞的開頭,並將會變動的內容(如使用者特定資訊)放在結尾。這也適用於圖像和工具,它們在不同的API呼叫之間必須相同。以OpenAI來說,當長度大於1024個token提示詞,將自動啟用提示詞快取功能,快取前綴的長度會以128個token為級距增加。當API呼叫時,會先查詢提示詞的前綴是否在快取中,如果快取有命中,將會使用快取結果加速回應速度,而在沒有命中的情況下,提示詞的前綴及大語言模型的資訊將被快取以供將來的使用。快取的生命周期約為5~10分鐘,在尖峰時段可能會持續長達一小時。

OpenAI也建議了提高快取命中的方式,主要是要將提示詞結構化,並以靜態或重複內容開頭,以動態內容結尾。並監控快取命中率、回應時間和快取token百分比等指標,以最佳化提示詞的結構和快取策略。

 

結語

隨著大型語言模型的應用越來越廣泛,計算效率和成本也日益受到重視。提示詞快取是一種簡單而有效的最佳化技術,可以顯著提升大型語言模型的計算效能,並改善使用者體驗。儘管提示詞快取看似簡單,但其背後涉及了許多技術細節,只有深入理解這些細節,才能好好地將提示詞結構化,並進一步利用提示詞快取技術,發揮其最大的優勢。

 

參考資料

  • https://openai.com/index/api-prompt-caching/
  • https://platform.openai.com/docs/guides/prompt-caching
  • https://www.anthropic.com/news/prompt-caching