FDE 面試準備指南(九):LLM 核心知識——Token、Prompt Engineering 與 Embedding

這篇是 FDE 面試系列的最後一篇基礎知識篇。
LLM 的這三塊——Token、Prompt Engineering、Embedding——
是你每天都在用的工具,但能說清楚的人比你想像中少。
說得清楚,就是專業的訊號。


一、Token:不是字,是 LLM 的計量單位

面試官問:

「Context Window 是什麼?對你的系統設計有什麼影響?」


Token 是什麼

LLM 不是以字元或單詞為單位處理文字,而是以 Token 為單位。

Token 是 Tokenizer 切出來的文字片段,大小不固定:

"Hello world"  →  ["Hello", " world"]         → 2 tokens
"LLM"          →  ["L", "LM"]                 → 2 tokens(或 1 token,取決於 tokenizer)
"不可思議"      →  ["不", "可", "思", "議"]    → 4 tokens(中文通常 1 字 = 1 token)

粗略換算(GPT/Gemini 系列):

  • 英文:約 1 token ≈ 0.75 個單詞,1000 tokens ≈ 750 個英文字
  • 中文:約 1 token ≈ 1 個中文字

Input Token vs Output Token

Input TokenOutput Token
是什麼你送進去的:system prompt + history + context + user queryLLM 生成的回答
計費通常比 output 便宜通常比 input 貴(約 3-5x)
設計影響長 prompt / 多 few-shot → 成本增加長回答 → 成本和延遲都增加

Context Window

Context Window 是 LLM 在一次推理中能「看到」的最大 token 數。

Context Window = Input tokens + Output tokens

常見 Context Window(2024-2025 年資料):

模型Context Window
Gemini 1.5 Pro1,000,000 tokens
Gemini 1.5 Flash1,000,000 tokens
Gemini 2.0 Flash1,048,576 tokens
GPT-4o128,000 tokens
Claude 3.5 Sonnet200,000 tokens

Context Window 的工程意涵

Context Window 不只是理論限制,它是你設計 RAG 和 Agent 時每天要想的事:

1. RAG 的 context budget:

Context Window
  - System Prompt (~500 tokens)
  - Conversation History (動態)
  - Retrieved Chunks (你能控制的部分)
  = 留給生成的空間

你能塞多少 retrieved chunks,直接決定了 Top-K 的上限。

2. 超出 window 的後果:

  • 硬截斷(錯誤)
  • 滑動視窗(丟失早期資訊)
  • 要求用戶縮短問題(差的用戶體驗)

3. Long Context 不等於 Good Performance: 研究顯示,LLM 對放在 context 中間的資訊的關注度,比頭尾的資訊低(Lost in the Middle 效應)。
→ 把最重要的資訊放在 context 的開頭或結尾。


二、Prompt Engineering:五大技法

Prompt Engineering 是 FDE 日常工作的核心技能。
面試官不太會直接問「什麼是 Few-shot」,但他們會在系統設計題中評估你有沒有這些工具。


1. Zero-Shot Prompting

不給任何範例,直接讓 LLM 完成任務。

Classify the following customer review as Positive, Negative, or Neutral:
"The product arrived late but the quality was excellent."

適合: 任務清楚、LLM 能力足夠的場景
問題: 複雜任務或邊界情況容易出錯


2. Few-Shot Prompting

給幾個輸入/輸出範例,引導 LLM 理解任務格式和期望。

Classify the customer review:

Review: "Shipping was fast, product works great." → Positive
Review: "Terrible quality, broke after one day." → Negative
Review: "It's okay, nothing special." → Neutral

Review: "The product arrived late but the quality was excellent." → ?

為什麼有效?

  • 讓 LLM 理解你的輸出格式
  • 減少對 task instruction 的歧義
  • 可以引導 LLM 處理 edge case

面試要能說的重點:

  • Example 的品質比數量重要
  • Example 要覆蓋各種情況,不要全是正面例子
  • 對成本有影響(每次都要帶著 few-shot examples)

3. Chain of Thought (CoT)(思維鏈)

要求 LLM 在給出答案之前,先「一步一步地思考」。

Without CoT:

Q: Roger has 5 tennis balls. He buys 2 more cans of tennis balls.
   Each can has 3 balls. How many tennis balls does he have now?
A: 11

With CoT:

Q: (同上問題)Let's think step by step.
A: Roger started with 5 balls.
   He bought 2 cans × 3 balls = 6 balls.
   Total: 5 + 6 = 11 balls.
   Answer: 11

為什麼有效?
LLM 生成 token 的過程本身就是推理過程。強迫它「說出思考步驟」等於給它更多「計算空間」,減少跳躍推理的錯誤。

實務應用:

  • 複雜計算題
  • 多步推理
  • 程式碼生成前先解釋邏輯

4. Self-Consistency(自我一致性)

對同一個問題用高溫度(high temperature)採樣多次,選出最多次出現的答案。

Question: X
→ Sample 1: Answer A
→ Sample 2: Answer A
→ Sample 3: Answer B
→ Sample 4: Answer A

Final Answer: A(出現 3 次,最多)

為什麼有效?
LLM 有隨機性,有時候「運氣差」會給出錯誤答案。多次採樣 + 投票可以提高準確率。

代價: 多次 LLM 呼叫,成本和延遲倍增。
適合: 答案精準度非常重要的場景,且 latency 不是首要考量。


5. ReAct(Reasoning + Acting)

這在前面 Agent 篇有詳細介紹,這裡強調它作為 Prompt Engineering 技法的角度。

ReAct 把「思考(Reasoning)」和「行動(Acting)」交替輸出:

Thought: 用戶想知道 Q4 銷售數字,我需要查詢資料庫
Action: query_database[SELECT SUM(revenue) FROM sales WHERE quarter='Q4']
Observation: $4,200,000
Thought: 我有了 Q4 的數字,可以回答用戶
Action: final_answer[Q4 銷售額為 $4.2M]

Google JD 為什麼特別點名 ReAct?
因為 FDE 的工作是幫客戶設計 Agent 系統,而 ReAct 是 Agent 的事實標準模式。不熟悉 ReAct,就是不熟悉 Agent。


Prompt Engineering 的實務建議

建議說明
System Prompt 明確定義角色「你是 X,你的任務是 Y,你只回答 Z 類問題」
Output Format 明確指定「以 JSON 格式回答」「只輸出一個詞:Positive/Negative/Neutral」
加入 Negative Instructions「不要猜測」「如果不確定,說不知道,不要捏造」
版本控制 PromptPrompt 就是程式碼,要版本控制、測試、追蹤效果
測試 Edge Cases用戶會輸入奇怪的東西,你的 prompt 要 robust

三、Embedding:語意搜尋的基礎

面試官問:

「你用什麼方式做語意搜尋?Embedding 是怎麼運作的?」


什麼是 Embedding

Embedding 是把文字(或其他資料)轉換成固定長度的數值向量的技術。

"今天天氣很好" → [0.23, -0.15, 0.87, ..., 0.42]  (768 維向量)
"The weather is great today" → [0.24, -0.14, 0.85, ..., 0.41]  (語意相似 → 向量相近)

核心性質:語意相似的文字,向量距離近


Word Embedding vs Sentence Embedding

Word Embedding(詞嵌入):
早期方法,每個詞有一個固定向量(Word2Vec, GloVe)。
問題:「bank」這個詞在「river bank」和「bank account」中應該有不同的向量,但 Word Embedding 無法區分(沒有上下文)。

Sentence Embedding / Contextual Embedding:
基於 Transformer,每個詞的向量根據上下文動態計算。
整個句子或段落壓縮成一個向量。

這是現在 RAG 系統用的方式。


Vector Embedding 的計算

以 BERT/Sentence-BERT 為例:

Input: "今天天氣很好"
↓
Tokenizer → [101, 231, 56, 78, 99, 102](token IDs)
↓
Transformer Encoder → 每個 token 的 contextual representation
↓
Pooling(取 [CLS] token 或平均所有 token)
↓
Output: [0.23, -0.15, 0.87, ..., 0.42](例如 768 維)

Semantic Search(語意搜尋)流程

建索引:
  Documents → Embedding Model → Vectors → 存入 Vector DB

查詢:
  Query → Embedding Model → Query Vector
  Query Vector → 在 Vector DB 做 ANN 搜尋 → Top-K 相似文件

相似度計算:

  • Cosine Similarity:最常用,計算兩個向量夾角的餘弦值(-1 到 1)
  • Dot Product:適合模型訓練時用 dot product 優化過的 embedding
  • Euclidean Distance:歐幾里得距離(越小越相似)

常用 Embedding 模型(FDE 視角)

Google 生態系:

1from vertexai.language_models import TextEmbeddingModel
2
3model = TextEmbeddingModel.from_pretrained("text-embedding-004")
4embeddings = model.get_embeddings(
5    texts=["這是第一個句子", "這是第二個句子"],
6    task_type="RETRIEVAL_DOCUMENT"  # 重要!指定 task type
7)

text-embedding-004task_type 參數:

Task Type用途
RETRIEVAL_QUERYQuery 端
RETRIEVAL_DOCUMENT文件端
SEMANTIC_SIMILARITY計算語意相似度
CLASSIFICATION文字分類

開源選擇:

1from sentence_transformers import SentenceTransformer
2
3# 中文強,多語言支援
4model = SentenceTransformer('BAAI/bge-m3')
5embeddings = model.encode(["句子1", "句子2"])
6
7# 或用 HuggingFace
8model = SentenceTransformer('intfloat/multilingual-e5-large')

Embedding Fine-tuning

什麼時候需要 fine-tune embedding 模型?

需要 fine-tune 的情況:

  • 你的 domain 非常特殊(醫療、法律、特定行業術語)
  • 通用 embedding 在你的資料上 retrieval 效果差
  • 你有足夠的 query-document relevance pair 資料

Fine-tuning 方法:

  • Contrastive Learning(對比學習):正例(相關 pair)距離拉近,負例距離推遠
  • 使用 sentence-transformersMultipleNegativesRankingLoss

不需要 fine-tune 的情況(大多數 FDE 場景):

  • 通用文件搜尋
  • 多語言支援
  • 快速上線需求

Embedding 在 RAG 系統中的全局定位

原始文件
    ↓ (Chunking)
文字 Chunks
    ↓ (Embedding Model)
向量
    ↓ (Vector DB)
    ←←←←←←←←←←←←←←←
用戶 Query → Embedding → 向量 DB 搜尋 → Top-K Chunks → LLM Context

Embedding 的品質直接決定 retrieval 的品質。
這就是為什麼選對 Embedding 模型、使用正確的 task_type、評估 retrieval recall,是 RAG 工程師的核心功課。


系列總結

九篇走完,這是整個 FDE 面試知識地圖的架構:

RAG 基礎(Part 1)
    ↓
RAG 深度技術(Part 5):Chunking / Embedding / Vector DB / Hybrid Search
    ↓
RAG 進階(Part 6):檢索失敗 / Grounding / 評估 / 成本

Agent 基礎(Part 2)
    ↓
Agent 深度設計(Part 7):ReAct vs Planner / Tool Routing / Multi-Agent / Memory

ML 基礎(Part 8):傳統 ML → Deep Learning → Transformer

LLM 核心(Part 9):Token / Prompt Engineering / Embedding

System Design 實戰(Part 4)

這個地圖不是要你全部背下來。
是要你在面試官問到任何一個節點時,能夠自然地往相鄰的節點延伸,而不是在那個節點就停住了。

FDE 面試最終考的,是你有沒有把這些拼在一起的能力。


本系列已完結。如有特定主題想深入,歡迎留言。

Yen

Yen

Yen