13 min給工具使用者

Context 越長越好嗎?從 Token、Context Window 到 Context Engineering

Context Window 不是永久記憶。從 Token、上下文容量、長 Context 限制到 Context Engineering,理解 AI 應用如何選擇真正該放進模型的資訊。

Aaron Huang系統、產品與 AI 實作

Context 越長越好嗎?從 Token、Context Window 到 Context Engineering

如果上一篇〈LLM 不是知識庫〉建立的是第一個心智模型——LLM 會根據目前可見的條件逐步生成內容——那下一個問題就是:

模型現在到底看得到什麼?

很多 AI 應用的問題,最後都不是「模型不夠強」,而是模型根本沒有在當下看到正確資訊。

你可以換更大的模型、把 Prompt 寫得更長、一次塞更多文件,但只要真正需要的規則沒有進入 context、舊資料和新資料互相衝突,或重要訊息被大量無關內容淹沒,結果仍然可能很差。

所以這篇要處理三個容易混在一起的概念:

  1. Token:模型處理文字時的基本單位。
  2. Context Window:一次推論可以使用的 token 空間。
  3. Context Engineering:決定這次推論到底應該讓模型看到什麼。

核心不是「怎麼塞更多資料」,而是:

如何讓有限的 context 裡,留下最有用的資訊。


1. Token 不是字數,也不是單字數

LLM 不會直接把整段文字當成我們看到的「字」或「單字」來處理。

文字會先經過 tokenizer,被轉成一串 token IDs,再交給模型處理。

概念上可以理解成:

Text
  ↓
Tokenizer
  ↓
Token IDs
  ↓
Model

Token 可能是一個完整單字、單字的一部分、標點、空白,或其他文字片段。不同 tokenizer 的切法也不完全一樣。

例如英文中的一個少見單字,可能被拆成數個 subword;同一段內容換成不同模型,也可能產生不同 token 數。

因此:

Token 數量 ≠ 字數
Token 數量 ≠ 英文單字數

Hugging Face 目前的 Transformers 文件仍將 BPE、Unigram、WordPiece 等列為常見的 subword tokenization 方法;它們的共同目的,是用有限詞彙表表示大量文字,而不是要求每個單字都成為一個獨立 token。

為什麼應用工程師要在意 Token?

因為 Token 不只是模型內部名詞,它會直接碰到工程限制:

  • 一次能送多少內容進模型。
  • 最多能生成多少內容。
  • API 成本如何計算。
  • 對話歷史能保留多少。
  • 文件是否需要切分。
  • 工具結果是否應該壓縮。
  • 長任務什麼時候需要摘要或外部記憶。

所以 Token 可以先把它理解成:

LLM 系統裡的容量單位之一。


2. Context Window 是一次推論的工作空間

假設模型這次要回答:

「這位客戶符合最新退款政策嗎?」

真正影響模型判斷的,不只有這一句使用者問題。

一次推論裡,應用可能同時提供:

System / developer instructions
Conversation history
User question
Retrieved documents
Tool results
Examples
Output constraints

這些內容一起形成模型當下可見的 context。

不同供應商與模型對 context window 的計算方式會有差異。以 OpenAI 目前的 API 文件為例,context window 被描述為單次請求可使用的最大 token 數,會涉及輸入、輸出,以及部分模型的 reasoning tokens。因此實作時不能拿某個模型的規格直接套到所有模型。

但跨供應商可以保留一個比較穩定的理解:

Context Window 是模型這一次工作時可使用的有限資訊空間。

這和「模型永久記住多少東西」不是同一件事。


3. Context、State、Memory 不要混在一起

這是做 AI Application 很容易混亂的地方。

可以先用下面這個簡化模型區分:

State / Memory
= 應用在模型外部保存的資訊

Context
= 這一次真正送進模型的資訊

例如一個客服系統可能保存:

  • 客戶過去 3 年的訂單。
  • 20 次客服紀錄。
  • 公司全部政策。
  • 使用者偏好。
  • 目前工單狀態。

這些都可能存在系統裡,但模型每一次推論並不需要全部看到。

應用可能只選出:

最新退款政策
+
最近一筆訂單
+
目前這張工單
+
使用者現在的問題

然後組成這一次的 context。

因此:

有資料,不代表資料已經進入 Context。

反過來,模型「記得上一輪」也不必然代表它具有永久記憶。很多對話系統只是把先前訊息重新放進下一次請求。

這也是為什麼 Context Engineering 和 Memory Engineering 是不同問題。

Memory 解決:

哪些資訊要跨時間留下來?

Context Engineering 解決:

現在這一步,哪些資訊值得拿出來給模型看?


4. Context Window 變大,不代表答案一定變好

這裡最容易出現一個直覺:

如果模型可以吃更多 token,那就把資料全部放進去最安全。

問題是,容量增加和資訊使用效率不是同一件事。

2023 年的《Lost in the Middle》研究測試了多文件問答與 key-value retrieval,發現受測模型對資訊位置具有敏感性:相關資訊放在輸入開頭或結尾時常有較好表現,而在中間位置時可能下降。

這項研究不能直接解讀成:

「現在所有模型一定看不到 context 中間。」

模型架構、訓練方式與長 context 能力都持續在改進。

它真正提醒我們的是:

支援某個 Context Window 長度,只代表模型可以接受這麼多內容,不等於每一段資訊都能被同樣穩定地利用。

Anthropic 在 2025 年的 Context Engineering 工程文章也把 context 描述為有限資源,並建議追求較小、較高訊號的資訊集合,而不是無限制累積內容。

所以「長 Context」至少有四種實際代價:

1. 無關資訊增加

模型需要從更多資料中找出真正重要的訊號。

2. 衝突增加

新版政策、舊版政策、不同來源的說法可能同時存在。

3. 成本與延遲增加

實際影響依模型與 API 而異,但更多 token 通常意味著更多處理量。

4. Debug 更困難

當輸出錯誤時,你更難判斷到底是:

  • 資料沒有進 context。
  • 正確資料被錯誤資料干擾。
  • 指令互相衝突。
  • retrieval 找錯內容。
  • 模型沒有正確使用已提供的資訊。

所以 Context Window 解決的是:

能不能放得下。

但 AI Application 真正需要解決的是:

到底該放什麼。


5. 一個具體例子:退款政策為什麼不是塞越多越好

假設客服 AI 的 context 裡面有:

A. 2026 最新退款政策
B. 產品型錄 20 頁
C. 2024 舊版退款政策
D. 客戶目前訂單
E. 使用者問題

所有資訊都「放進去了」。

但系統仍然可能有問題:

  • 新舊政策互相衝突。
  • 產品型錄和問題無關。
  • 最新政策沒有清楚標示版本。
  • 模型可能引用舊規則。
  • 回答沒有指出判斷依據。

更好的做法不一定是換一個更長的 Context Window。

而可能是:

先確認任務
   ↓
找出必要資料
   ↓
只取最新有效政策
   ↓
取回目前訂單
   ↓
標示資料版本與來源
   ↓
組成 Context
   ↓
讓模型判斷 / 說明

這已經不是單純的 Prompt Writing。

這就是 Context Engineering。

AI 應用從系統指令、對話歷史、記憶、檢索文件、工具結果與使用者輸入中,依相關性、權威性、時效、一致性與信任邊界篩選資訊,再放入本次 Context Window 交給 LLM。


6. Context Quality 比 Context Quantity 更重要

如果要快速檢查一段 context,我會先看五件事。

Relevance:相關性

這些資訊真的和現在的任務有關嗎?

Authority:權威性

規則、數字與事實來自哪裡?是不是應該信任的來源?

Freshness:時效性

資料是不是最新版本?有沒有已經失效的內容?

Consistency:一致性

不同資訊有沒有互相衝突?衝突時誰優先?

Structure:結構

模型能不能分清楚:

  • 哪些是系統指令。
  • 哪些是公司資料。
  • 哪些是使用者輸入。
  • 哪些是外部未信任內容。
  • 哪些只是工具結果。

可以簡化成:

Good Context
=
Relevant
+ Trusted
+ Current
+ Consistent
+ Well-structured

這不是正式公式,而是一個工程檢查框架。


7. Prompt Engineering 和 Context Engineering 差在哪?

Prompt Engineering 沒有消失。

但 Prompt 只是 Context 的一部分。

Prompt Engineering Context Engineering
核心問題 指令怎麼寫? 模型這次到底應該看到什麼?
常見內容 任務、角色、限制、格式、範例 Prompt、歷史訊息、RAG、Memory、工具結果、權限資訊
常見失敗 指令模糊 過時、衝突、污染、過長、缺資料
工程重點 表達任務 管理整個推論環境

Anthropic 對 Context Engineering 的定義也接近這個方向:不是只設計 Prompt,而是策展與維護推論時最適合的一組 token,包括 system instructions、tools、external data、message history 等。

所以可以把兩者的關係理解成:

Prompt Engineering
        ⊂
Context Engineering

也就是 Prompt Engineering 是其中一部分,而不是全部。


8. Context Engineering 可以怎麼做?

實務上不需要一開始就做複雜框架。

可以先走五步。

Step 1:定義這一步模型要完成什麼

分類、摘要、回答、抽取、規劃、決策支援,需要的 context 都不一樣。

Step 2:列出必要資訊

沒有這些資訊,模型就無法合理完成任務的是什麼?

Step 3:過濾

移除:

  • 無關資料。
  • 重複資料。
  • 過時版本。
  • 不必要的完整工具輸出。

Step 4:標示來源與信任層級

至少要知道哪些內容是:

Trusted instruction
Trusted business data
User-provided content
External / untrusted content

Step 5:用 Evaluation 驗證

不要只看一兩次回答覺得「好像不錯」。

應該比較:

  • 有沒有漏掉必要資訊。
  • 是否使用正確版本。
  • 不同 retrieval 結果會不會影響答案。
  • context 縮短後品質是否真的下降。
  • 是否存在不必要的 token 與成本。

Context Engineering 最終仍然要回到 Evaluation,而不是靠感覺調 Prompt。


9. 更長時間的任務,不能只靠一個 Context Window

如果任務從一次問答變成:

  • 長時間研究。
  • 大型程式碼修改。
  • 多輪 Agent 執行。
  • 跨多個 session 的工作。

問題就會更明顯。

資訊會不斷累積,但模型不可能永遠把所有原始歷史完整保留在同一個 context。

因此現在常見的做法包括:

  • Retrieval:需要時再取資料。
  • Compaction:把歷史內容壓縮成較短摘要。
  • Structured notes:把重要狀態存在模型外部。
  • Memory:保存可跨任務使用的資訊。
  • Tools:讓模型需要時自己讀取檔案或資料,而不是預先全部塞入。
  • Subagents:讓不同工作在較乾淨的 context 中處理,再回傳濃縮結果。

這裡的共同原理仍然沒有改:

不要要求模型永遠記住一切,而是設計它在每一步能取得真正需要的資訊。


10. 結論:Context Window 是容量問題,Context Engineering 是選擇問題

學 Context Window,如果最後只記得「某模型有多少 K Token」,價值其實很低。

模型規格會持續更新。

更重要的是留下這個 Mental Model:

System knows a lot
        ↓
Context Engineering selects
        ↓
Model sees a subset
        ↓
Model makes this inference

AI Application Engineer 真正要控制的,不只是模型。

還要控制:

什麼資訊,在什麼時間,以什麼形式進入模型。

Context Window 決定的是容量上限。

Context Engineering 決定的是這些容量被拿來裝什麼。

而這也會自然帶到下一個問題:

模型拿到這些 token 之後,到底怎麼建立它們之間的關係?Attention 和 Embedding 又分別在做什麼?

下一篇,我們再往模型內部走一層。


來源與驗證範圍

本篇由 Hello-Agents 第三章學習母資料延伸,並於 2026-09-21 重新核對以下來源。本文不把特定供應商的 context window 規格當成跨模型通則,也不主張長 context 一定會造成固定幅度的品質下降。

  1. Datawhale / Hello-Agents — 第三章〈大語言模型基礎〉:Tokenization、Token 與 Context Window 的教材脈絡。 https://github.com/datawhalechina/hello-agents/blob/main/docs/chapter3/%E7%AC%AC%E4%B8%89%E7%AB%A0%20%E5%A4%A7%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B%E5%9F%BA%E7%A1%80.md
  2. Hugging Face Transformers — Tokenization algorithms:BPE、Unigram、WordPiece 與 subword tokenization。 https://huggingface.co/docs/transformers/tokenizer_summary
  3. OpenAI API — Conversation state / Managing the context window:context window 與 input、output、reasoning token 的產品實作說明。 https://developers.openai.com/api/docs/guides/conversation-state
  4. Anthropic Engineering — Effective context engineering for AI agents:context engineering、有限 context 資源、just-in-time retrieval、compaction 與 structured note-taking。 https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents
  5. Liu et al. — Lost in the Middle: How Language Models Use Long Contexts:長 context 中資訊位置與使用表現的研究。 https://arxiv.org/abs/2307.03172