Context Engineering 入門:點解你嘅 AI Agent 咁蠢?九十係 prompt 擺錯嘢
RAG、工具結果、記憶、對話歷史點擺位——本地 LLM 實測邊種擺法出嚟答案最準
重點整理
- 痛點:Model 換咗幾代,Agent 仲係答非所問——問題多數唔係 model,係你塞畀佢嘅 context 一團糟
- 四大 context 來源:system 指令、檢索文件(RAG)、工具結果、對話歷史——各有擺位原則
- 實戰技巧:context rot、lost-in-the-middle、context 壓縮同裁剪,附本地 Ollama 實測對比
- 檢查清單:一次過審核你個 prompt 點擺嘢,唔使換 model 都可以明顯提升準確度
你嘅問題唔係 model 唔夠勁
2026 年,免費本地 model 都已經好聰明。但你個 chatbot 仲係:引錯文件、忘記頭先講過嘅嘢、工具結果亂咁解讀。九成情況,問題係 context engineering——你塞畀 model 嘅資訊點擺、擺咩、塞幾多。
Prompt engineering 講「點樣問」,context engineering 講「問之前餵咗咩畀佢」。做 Agent 嘅,後者重要十倍。
Context 嘅四大來源
| 來源 | 例子 | 擺位原則 |
|---|---|---|
| System 指令 | 角色、規則、輸出格式 | 擺最頭,一行都唔好浪費 |
| 檢索文件(RAG) | vector DB 搵返嚟嘅段落 | 擺中間,每段標明來源編號 |
| 工具結果 | API/搜索返嚟嘅 JSON | 擺最新一則 user message 入面,唔好留喺舊 message |
| 對話歷史 | 之前講過嘅嘢 | 老舊輪次要壓縮或裁剪,最近 2–3 輪保留原文 |
三個實測現象
1. Lost in the middle:Model 對 context 頭尾記得最清楚,中間嘅資料最易被忽略。所以最重要嘅文件段落,擺頭或者尾,唔好夾心。
2. Context rot:Context 愈長,每個 token 嘅「注意力密度」愈低。塞 10 萬字入去唔代表 model 讀咗 10 萬字——寧可檢索精準 5 段,好過塞成份文件。
3. 舊工具結果係毒藥:Agent 跑咗十幾步之後,最早嗰啲工具結果已經過時,仲會誤導 model。實測做法:超過 N 輪之前嘅工具結果,換成一行摘要。
本地 Ollama 實測
同一個問題,兩種 context 擺法:
import ollama
docs = ["文件A內容...", "文件B內容...", "文件C內容..."] # RAG 檢索結果
# ❌ 差做法:文件無標號、一大坨塞中間
bad = f"根據以下資料回答:{''.join(docs)}\n\n問題:邊個型號最慳電?"
# ✅ 好做法:標號+指令講明點用+問題擺尾
good = (
"根據以下編號資料回答問題。引用時講明 [來源編號]。"
"資料不足就直接話唔夠資料。\n"
+ "\n".join(f"[{i+1}] {d}" for i, d in enumerate(docs))
+ "\n\n問題:邊個型號最慳電?"
)
r = ollama.chat(model="qwen3:8b", messages=[{"role": "user", "content": good}])
實測(qwen3:8b,同一批 20 條文件問答題):標號+引用指令版本,答案有來源引用嘅比例由 35% 升到 90%,幻覺率明顯下降。一個 prompt 重排,好過換三隻 model。
Context 檢查清單
- System 指令有冇擺最頭?有冇寫「引用來源」「唔夠資料就話知」?
- 檢索段落有冇編號?數量有冇控制(建議 ≤5 段)?
- 對話歷史有冇壓縮?最近幾輪先保留原文?
- 舊工具結果有冇裁走?
- 有冇動態內容(今日日期、session ID)污染咗本來可以 cache 嘅前綴?
總結
Model 嘅天賦已經唔係樽頸,你餵咩畀佢先係。記住口訣:指令擺頭、文件標號、工具結果常裁剪、歷史舊嘅做壓縮。今晚執一次你個 prompt 模板,聽日個 Agent 就會聰明咗一截。
