- Context Window
- 超過上限會發生什麼事情?
- 計算 Context Window 的單位
- 為什麼 Token 要這樣計算?
昨天透過海龜湯的例子,我們了解到了 Context 是什麼,以及 context 對我們和 AI pair 會產生的影響。
接下來,讓我們繼續看看和 Context 相關的 Context Window 吧。
想像一下你現在正在和一個新來的工程師 pair,你正在跟他介紹接下來要一起進行的專案:
「我們這個系統用的是 Vue 3 的框架,搭配 Composition API 的寫法,加上 Apollo GraphQL 和後端溝通,使用 firebase 做身份驗證 ……」
你一口氣講了 20 分鐘,涵蓋了整個專案從過去到現在曾經踩過的雷。當你停下來喘口氣,喝口水順便問他有沒有什麼問題的時候,他跟你說:「所以你提到的那個 … 呃 … 什麼阿菠蘿麵包來著?那是什麼東西?」
這種講了後面忘了前面,記憶力不足的情況,就是 Context Window 的概念。Context Window 就像人的短期記憶容量,有固定的「長度限制」,就像每個人能馬上記住的事情多寡都不同,每個 AI 夥伴,甚至同一個 AI 但不同等級的帳號都會有不同的上限。
就像上面的例子一樣,當你在同一個對話中遇到了 Context Window 超過上限時,AI 可能就記不住一開始講的內容。但具體是怎麼樣記不住,也和每個不同的 AI 工具設計有關,像是我最常使用的 Claude Code,他會在超過上限前,自動幫你整理一個簡短的版本,之後的對話都會根據這個簡短版本的 Context 繼續進行。
雖然自動整理的功能聽起來很棒,但因為他畢竟是生成式 AI,有可能在整理的過程中加入了他的幻覺,增加你們後續對話的成本,所以最好的方式其實是要定期切換 Context,不要在同一個對話裡問太多種類和方向的問題。
了解了 Context Window 的概念後,你會不會好奇:「那到底多少內容才會超過 Context Window 的上限呢?是用字數計算嗎?還是對話輪數?」
答案是:用 Token 來計算。
如果說 Context Window 是記憶容量的「大小」,那麼 Token 就是用來「測量」這個容量的單位。但這裡的測量,並不代表 Token 等於字數。
舉例來說,這段 C# 程式碼可能會被切分成約 12-15 個 tokens,包括關鍵字、變數名稱、括號、分號等等:
public async Task<List<User>> GetUsersAsync()
{
return await _context.Users.ToListAsync();
}
Token 的切分方式源自於 AI 模型的訓練原理,他會根據語言的統計規律來決定如何切分文字。
可以把 Token 當作是「樂高積木」,當我們要組裝一個樂高城堡時,不會把每顆小圓點都當作一個零件,而是會有「門」、「窗戶」、「牆壁」這樣的組合單位;AI 處理文字也是一樣的道理。
以 C# 來說,async
很常被使用到的關鍵字,所以通常會被當作一個完整的 token;而較長的變數名稱如 GetUsersAsync
可能被切成 Get
、Users
、Async
三個部分。以中文來說,「資料庫」通常是一個完整概念,所以會被視為 1 個 token;而「我喜歡寫程式」可能被切成「我」+「喜歡」+「寫」+「程式」,總共 4 個 tokens。
在今天的文章中,我們了解到 Context Window 就像 AI 的短期記憶容量,有固定上限。而 Token 作為測量單位,就像樂高積木一樣根據語言統計規律切分。那為什麼我們要這麼在意 Token 呢?
歡迎留言告訴我你的想法喔,明天讓我們來一起看看關於 Token 的一些小技巧吧!
以上就是今天的分享,我們明天見 👋