iT邦幫忙

2025 iThome 鐵人賽

DAY 22
1
生成式 AI

agent-brain: 從 0 開始打造一個 python package系列 第 22

Day 22: Context Engineering (一)

  • 分享至 

  • xImage
  •  

agent-brain 中 memory 代表著儲存記憶與提取記憶的地方
又 in each state 其實絕大多數都是靠 LLM 自己做 reflection / reasoning / answer
那 LLM 做這些 response 的 input 又來自 memory,所以可以知道 memory 是一個超級重要的 component

自認在這塊還沒有非常深入的理解
所以在切入實作 memory architecture 之前,我想先 survey 這邊相關的東西


What is Context engineering

what's the difference between context / prompt engineering

https://www.anthropic.com/_next/image?url=https%3A%2F%2Fwww-cdn.anthropic.com%2Fimages%2F4zrzovbb%2Fwebsite%2Ffaa261102e46c7f090a2402a49000ffae18c5dd6-2292x1290.png&w=3840&q=75

Prompt engineering 會比較 focus 在 single turn 的 LLM 上,像是調整 System prompt,給 few show examples,寫一些明確的規則讓 llm 表現得更好

Context engineering 則是想要探討 multi turn 的 LLM 中,由於可能整個過程經過了多個 state 可能包含了 tool results / instructurn / error message / history message / task, sub-task 等等,當這一堆都跑進來的時候,該怎麼 "捨棄" 不重要的資訊,進而提升我們 LLM 的 performance

How important is Context engineering

這邊主要看了兩個 reference [Context-Rot] & [NoLiMa]

那文章是如何量化 context engineering 這點很重要的呢?
這邊來看一下他們設計的精巧的 dataset - extend NIAH

NIAH 是 Needle in a Haystack 的縮寫,顧名思義就是 大海撈針,他是一個測試 LLM 是否能在長上下文(Haystack)中找出正解(needle)的資料集,下面是一個例子

https://ithelp.ithome.com.tw/upload/images/20251006/20128319o4fuwbYHRy.png

他會把答案塞在某個片段中。
但可以看到 question 與 needle 之間有非常強烈的關聯,可能就直接包含與問題一樣的 term,並且上下文本可能是與這個 needle 不太相干的東西。這就好比在一群狗之中找出威利,是有一點那麼突兀。

有另一個 dataset 為了要解決這個問題 [NoLiMa] 所以他除了把 needle 藏在很長的上下文之外,這個 needle 還做了特化處理。
需要 model 有 prior knowledge 才能回答出來,此時 model 在這種情況下會比原本很 explicitly 的 needle 表現得還不好。
e.g., needle 是 整個大台北地區在 2025-10-06 的天氣超好,然後 question 是: 2025 中秋節松山的天氣如何?

Anyway,Context Rot 則是朝更細緻的方向去設計

實驗1

這個實驗中,藍線 跟 紅線 分別代表 question-needle pair 的 similarity 很高 or 很低
然後每個小框框的縱軸代表 accuracy 橫軸代表 context 的長度
https://ithelp.ithome.com.tw/upload/images/20251006/201283195Y7YUhdwG1.png

  • 可以看到當今天 question-needle pair 的關聯度很高時,LLM 受到 context 長度的影響會比較低一些
  • 但其實像這種 multi-step 甚至是 multi-turn 的任務中,我們是沒辦法保證 question 與 needle 的關聯度的。

實驗2

這個實驗則是加入了 distractors。
https://ithelp.ithome.com.tw/upload/images/20251006/20128319C9o8T1adKx.png
Distractor 的定義是與 question 相關,但是不是正解的 needle,那這種東西跟現實生活中的使用情境又會更相近了。我們沒辦法保證對應於每個 question 的 "needle" 在整個上下文中是非常與眾不同的存在。

https://ithelp.ithome.com.tw/upload/images/20251006/20128319XNhAjrMl6w.png

那實驗結果也表明,當出現 distractor 時,整個 performance 又更慘了,並且在上下文長度相對較短的情況下 (10^3 tokens) 就表現得沒有很好。

實驗3

這個實驗則是將原本的 HayStack 分類段落類型後去做 shuffle,如下
https://ithelp.ithome.com.tw/upload/images/20251006/20128319GZWcTTZULh.png
那為何要這樣做呢?我的超譯是 當我們在跑 multi-step agent 時候,其實整個上下文也充斥著不同的段落類型,e.g., 有 tool response / reflection response / answering response
那如果 needle 在未經整理的狀態下丟在 context 中 vs needle 是一個很突兀的點出現在 context 中 (shuffled)

那效果如何呢?
https://ithelp.ithome.com.tw/upload/images/20251006/201283194Wm8A1yq2t.png
如圖,有 shuffled 過的 context (-> 讓 needle 很突兀),則 llm 的表現也會提高。
which means: 由於我們無法知道 question 會長怎樣,所以如果我們更 originize 的去讓每個 session 之間有明確的劃分,那效果應該不錯? (我自己超譯)

後記

本來要打算講 claude context engineering 那篇的,但認真看了 context rot 之後,真的是一篇實驗非常精實的文章,感謝 Chroma。也讓我體悟到很多實驗背後的意義。
明天再繼續補完 實驗4/5 並且切回 claude context engineering 的介紹。

reference:
Effective context engineering for AI agents
Building effective agents
Context-Rot
NoLiMa: Long-Context Evaluation Beyond Literal Matching
The Magical Mystery Four: How Is Working Memory Capacity Limited, and Why?


上一篇
Day 21: 加入 reflection state
系列文
agent-brain: 從 0 開始打造一個 python package22
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言