<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Long-Context on Tarragon</title><link>https://tarrragon.github.io/blog/tags/long-context/</link><description>Recent content in Long-Context on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Tue, 12 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/long-context/index.xml" rel="self" type="application/rss+xml"/><item><title>Lost in the Middle</title><link>https://tarrragon.github.io/blog/llm/knowledge-cards/lost-in-the-middle/</link><pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/llm/knowledge-cards/lost-in-the-middle/</guid><description>&lt;p>Lost in the middle（中段遺失、Liu et al., 2023）的核心概念是「&lt;strong>LLM 對 long context 中段內容的 attention / recall 顯著低於開頭與結尾&lt;/strong>」。實測：把答案放在 10K context 的開頭或結尾、模型 recall 準確率 80%+；放在中段 4000-6000 token 位置、recall 掉到 50% 甚至更低。是 long context 使用上最常見的失敗模式。&lt;/p>
&lt;h2 id="概念位置">概念位置&lt;/h2>
&lt;p>Long context 的 effective context 跟 claimed context 落差來自三個現象：&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>現象&lt;/th>
 &lt;th>描述&lt;/th>
 &lt;th>嚴重度&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Lost in the middle&lt;/td>
 &lt;td>中段內容 attention 顯著低、recall 掉&lt;/td>
 &lt;td>普遍、最頻繁&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Context degradation&lt;/td>
 &lt;td>接近 context 上限時、整體品質緩降&lt;/td>
 &lt;td>接近上限才明顯&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Needle in haystack&lt;/td>
 &lt;td>抓單一事實的能力（vs lost-in-the-middle 抓整段邏輯）&lt;/td>
 &lt;td>兩條軸、不完全重疊&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">Recall accuracy vs 答案位置（典型 10K context）：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl">100% |█ █
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl"> |██ ██
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl"> 80% |███ ███
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl"> |███ ███
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl"> 60% |███ ____ ███
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl"> |███ ___/ \___ ███
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl"> 40% |███ _/ \_ ███
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl"> |█████─/ \───── ███
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl"> |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl"> 0 2K 4K 6K 8K 10K
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">13&lt;/span>&lt;span class="cl"> 開頭 結尾&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>成因：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Attention weight 分佈不均勻&lt;/strong>：訓練資料中、句首 / 段首通常含關鍵資訊、模型學會偏重句首；長 context 的中段在訓練資料中相對稀疏、attention 沒學好&lt;/li>
&lt;li>&lt;strong>Positional encoding 設計&lt;/strong>：RoPE / ALiBi 等對長距離 attention 的衰減模式、中段 token 跟 query 距離通常較大、attention 弱&lt;/li>
&lt;li>&lt;strong>訓練 context 長度的影響&lt;/strong>：模型若訓練在 8K context、推論時用 128K（用 RoPE scaling 延伸）、中段表現比訓練範圍內差更多&lt;/li>
&lt;/ol>
&lt;h2 id="設計責任">設計責任&lt;/h2>
&lt;p>讀 long-context paper / benchmark 看到「lost-in-the-middle」「U-shape recall」就是這現象。寫 code 場景的判讀：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>把關鍵資訊放開頭或結尾&lt;/strong>：system prompt 在開頭、最新指示在結尾（剛好是模型 attention 最強的兩處）&lt;/li>
&lt;li>&lt;strong>長 context 不是「塞越多越好」&lt;/strong>：超過 effective context（典型 8-16K）後、邊際效用急降&lt;/li>
&lt;li>&lt;strong>RAG 比 long context 仍有價值&lt;/strong>：把相關片段 retrieve 出來放 prompt 開頭、比把整份文件塞進 100K context 效果更穩定&lt;/li>
&lt;li>&lt;strong>驗證自己模型的 effective context&lt;/strong>：用 needle-in-haystack 或自製測試、看模型在 8K / 16K / 32K 表現掉到哪&lt;/li>
&lt;li>&lt;strong>Reasoning model 的 thinking trace 不會遇到這事故嗎？&lt;/strong> — 仍會遇到、但 reasoning 過程會主動重新引用前文、部分緩解；不過 thinking trace 本身會擠壓 context budget、可能反而觸發 degradation&lt;/li>
&lt;/ol></description><content:encoded><![CDATA[<p>Lost in the middle（中段遺失、Liu et al., 2023）的核心概念是「<strong>LLM 對 long context 中段內容的 attention / recall 顯著低於開頭與結尾</strong>」。實測：把答案放在 10K context 的開頭或結尾、模型 recall 準確率 80%+；放在中段 4000-6000 token 位置、recall 掉到 50% 甚至更低。是 long context 使用上最常見的失敗模式。</p>
<h2 id="概念位置">概念位置</h2>
<p>Long context 的 effective context 跟 claimed context 落差來自三個現象：</p>
<table>
  <thead>
      <tr>
          <th>現象</th>
          <th>描述</th>
          <th>嚴重度</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Lost in the middle</td>
          <td>中段內容 attention 顯著低、recall 掉</td>
          <td>普遍、最頻繁</td>
      </tr>
      <tr>
          <td>Context degradation</td>
          <td>接近 context 上限時、整體品質緩降</td>
          <td>接近上限才明顯</td>
      </tr>
      <tr>
          <td>Needle in haystack</td>
          <td>抓單一事實的能力（vs lost-in-the-middle 抓整段邏輯）</td>
          <td>兩條軸、不完全重疊</td>
      </tr>
  </tbody>
</table>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln"> 1</span><span class="cl">Recall accuracy vs 答案位置（典型 10K context）：
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">100% |█                                       █
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">     |██                                     ██
</span></span><span class="line"><span class="ln"> 5</span><span class="cl"> 80% |███                                   ███
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">     |███                                   ███
</span></span><span class="line"><span class="ln"> 7</span><span class="cl"> 60% |███          ____                     ███
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">     |███      ___/    \___                 ███
</span></span><span class="line"><span class="ln"> 9</span><span class="cl"> 40% |███    _/            \_               ███
</span></span><span class="line"><span class="ln">10</span><span class="cl">     |█████─/                \─────         ███
</span></span><span class="line"><span class="ln">11</span><span class="cl">     |
</span></span><span class="line"><span class="ln">12</span><span class="cl">       0      2K     4K     6K     8K    10K
</span></span><span class="line"><span class="ln">13</span><span class="cl">       開頭                              結尾</span></span></code></pre></div><p>成因：</p>
<ol>
<li><strong>Attention weight 分佈不均勻</strong>：訓練資料中、句首 / 段首通常含關鍵資訊、模型學會偏重句首；長 context 的中段在訓練資料中相對稀疏、attention 沒學好</li>
<li><strong>Positional encoding 設計</strong>：RoPE / ALiBi 等對長距離 attention 的衰減模式、中段 token 跟 query 距離通常較大、attention 弱</li>
<li><strong>訓練 context 長度的影響</strong>：模型若訓練在 8K context、推論時用 128K（用 RoPE scaling 延伸）、中段表現比訓練範圍內差更多</li>
</ol>
<h2 id="設計責任">設計責任</h2>
<p>讀 long-context paper / benchmark 看到「lost-in-the-middle」「U-shape recall」就是這現象。寫 code 場景的判讀：</p>
<ol>
<li><strong>把關鍵資訊放開頭或結尾</strong>：system prompt 在開頭、最新指示在結尾（剛好是模型 attention 最強的兩處）</li>
<li><strong>長 context 不是「塞越多越好」</strong>：超過 effective context（典型 8-16K）後、邊際效用急降</li>
<li><strong>RAG 比 long context 仍有價值</strong>：把相關片段 retrieve 出來放 prompt 開頭、比把整份文件塞進 100K context 效果更穩定</li>
<li><strong>驗證自己模型的 effective context</strong>：用 needle-in-haystack 或自製測試、看模型在 8K / 16K / 32K 表現掉到哪</li>
<li><strong>Reasoning model 的 thinking trace 不會遇到這事故嗎？</strong> — 仍會遇到、但 reasoning 過程會主動重新引用前文、部分緩解；不過 thinking trace 本身會擠壓 context budget、可能反而觸發 degradation</li>
</ol>
]]></content:encoded></item><item><title>Needle in a Haystack</title><link>https://tarrragon.github.io/blog/llm/knowledge-cards/needle-in-haystack/</link><pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/llm/knowledge-cards/needle-in-haystack/</guid><description>&lt;p>Needle in a Haystack（NIH、大海撈針、Greg Kamradt 2023）的核心概念是「&lt;strong>把一個明確事實（needle）插入長度可變的 context（haystack）的不同位置、測試 LLM 能否在問問題時準確 recall 該事實&lt;/strong>」。是評估 &lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/context-window/" data-link-title="Context Window" data-link-desc="模型一次能處理的最大 token 數量：prompt 加生成的總和上限">long context&lt;/a> 模型實用性的標準 benchmark 之一、跟 &lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/lost-in-the-middle/" data-link-title="Lost in the Middle" data-link-desc="LLM 對 long context 中段內容的 attention / recall 顯著低於開頭與結尾的現象">lost-in-the-middle&lt;/a> 對應但側重不同。&lt;/p>
&lt;h2 id="概念位置">概念位置&lt;/h2>
&lt;p>NIH 測試的典型流程：&lt;/p>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">1. 準備 haystack：一份長文（如 Paul Graham essays、技術文件）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">2. 在指定位置（如 50% 處）插入 needle：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl"> 「The best thing to do in San Francisco is eat a sandwich at Dolores Park.」
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl">3. Prompt 模型：「What is the best thing to do in San Francisco?」
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl">4. 看模型能否抓出 needle 內容
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl">Variables：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl">- Context 總長度（1K、4K、16K、64K、128K、1M）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl">- Needle 插入位置（0%、10%、25%、50%、75%、90%、100%）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl">每個 (length, position) 組合測 N 次、得到 accuracy heatmap&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>跟 lost-in-the-middle 的對比：&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>維度&lt;/th>
 &lt;th>Lost in the middle&lt;/th>
 &lt;th>Needle in haystack&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>衡量的能力&lt;/td>
 &lt;td>對中段內容的整體 attention&lt;/td>
 &lt;td>抓單一事實的 recall&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>任務&lt;/td>
 &lt;td>抓整段邏輯、做推論&lt;/td>
 &lt;td>純 retrieve、不需推論&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>難度&lt;/td>
 &lt;td>高（需理解整段語意）&lt;/td>
 &lt;td>較低（明確 keyword 匹配）&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>模型表現&lt;/td>
 &lt;td>中段顯著差&lt;/td>
 &lt;td>通常各位置都接近 100%（強模型）&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>判讀意義&lt;/td>
 &lt;td>反映「實用 effective context」&lt;/td>
 &lt;td>反映「lower bound effective context」&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">典型 NIH heatmap（GPT-4 128K 之類）：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl">100% |████ ████████████████████████████ ████
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl"> 80% |████ ████████████████████████████ ████
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl"> 60% |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl"> 40% |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl"> 20% |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl"> 0 +----+----+----+----+----+----+----+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl"> 0% 25% 50% 75% 100%（needle 位置）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl"> ↑ ↑
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl"> 開頭強 結尾強
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">13&lt;/span>&lt;span class="cl">NIH heatmap 通常全綠（強模型）、但實用任務（reasoning over long context）就會出現中段塌陷&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="設計責任">設計責任&lt;/h2>
&lt;p>讀 long context 模型 release notes 看到「needle in a haystack: 100%」「pass NIH up to 128K」等聲稱、要區分：&lt;/p></description><content:encoded><![CDATA[<p>Needle in a Haystack（NIH、大海撈針、Greg Kamradt 2023）的核心概念是「<strong>把一個明確事實（needle）插入長度可變的 context（haystack）的不同位置、測試 LLM 能否在問問題時準確 recall 該事實</strong>」。是評估 <a href="/blog/llm/knowledge-cards/context-window/" data-link-title="Context Window" data-link-desc="模型一次能處理的最大 token 數量：prompt 加生成的總和上限">long context</a> 模型實用性的標準 benchmark 之一、跟 <a href="/blog/llm/knowledge-cards/lost-in-the-middle/" data-link-title="Lost in the Middle" data-link-desc="LLM 對 long context 中段內容的 attention / recall 顯著低於開頭與結尾的現象">lost-in-the-middle</a> 對應但側重不同。</p>
<h2 id="概念位置">概念位置</h2>
<p>NIH 測試的典型流程：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln"> 1</span><span class="cl">1. 準備 haystack：一份長文（如 Paul Graham essays、技術文件）
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">2. 在指定位置（如 50% 處）插入 needle：
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">   「The best thing to do in San Francisco is eat a sandwich at Dolores Park.」
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">3. Prompt 模型：「What is the best thing to do in San Francisco?」
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">4. 看模型能否抓出 needle 內容
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">Variables：
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">- Context 總長度（1K、4K、16K、64K、128K、1M）
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">- Needle 插入位置（0%、10%、25%、50%、75%、90%、100%）
</span></span><span class="line"><span class="ln">10</span><span class="cl">
</span></span><span class="line"><span class="ln">11</span><span class="cl">每個 (length, position) 組合測 N 次、得到 accuracy heatmap</span></span></code></pre></div><p>跟 lost-in-the-middle 的對比：</p>
<table>
  <thead>
      <tr>
          <th>維度</th>
          <th>Lost in the middle</th>
          <th>Needle in haystack</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>衡量的能力</td>
          <td>對中段內容的整體 attention</td>
          <td>抓單一事實的 recall</td>
      </tr>
      <tr>
          <td>任務</td>
          <td>抓整段邏輯、做推論</td>
          <td>純 retrieve、不需推論</td>
      </tr>
      <tr>
          <td>難度</td>
          <td>高（需理解整段語意）</td>
          <td>較低（明確 keyword 匹配）</td>
      </tr>
      <tr>
          <td>模型表現</td>
          <td>中段顯著差</td>
          <td>通常各位置都接近 100%（強模型）</td>
      </tr>
      <tr>
          <td>判讀意義</td>
          <td>反映「實用 effective context」</td>
          <td>反映「lower bound effective context」</td>
      </tr>
  </tbody>
</table>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln"> 1</span><span class="cl">典型 NIH heatmap（GPT-4 128K 之類）：
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">100% |████ ████████████████████████████ ████
</span></span><span class="line"><span class="ln"> 4</span><span class="cl"> 80% |████ ████████████████████████████ ████
</span></span><span class="line"><span class="ln"> 5</span><span class="cl"> 60% |
</span></span><span class="line"><span class="ln"> 6</span><span class="cl"> 40% |
</span></span><span class="line"><span class="ln"> 7</span><span class="cl"> 20% |
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">   0 +----+----+----+----+----+----+----+
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">     0%   25%   50%   75%   100%（needle 位置）
</span></span><span class="line"><span class="ln">10</span><span class="cl">     ↑                                  ↑
</span></span><span class="line"><span class="ln">11</span><span class="cl">     開頭強                             結尾強
</span></span><span class="line"><span class="ln">12</span><span class="cl">
</span></span><span class="line"><span class="ln">13</span><span class="cl">NIH heatmap 通常全綠（強模型）、但實用任務（reasoning over long context）就會出現中段塌陷</span></span></code></pre></div><h2 id="設計責任">設計責任</h2>
<p>讀 long context 模型 release notes 看到「needle in a haystack: 100%」「pass NIH up to 128K」等聲稱、要區分：</p>
<ol>
<li><strong>NIH 100% 不代表「能用 128K context」</strong>：NIH 只測單一事實 retrieve、實際 reasoning over long context 仍可能崩</li>
<li><strong>真實任務 benchmark</strong>：<a href="https://github.com/THUDM/LongBench">LongBench</a>、<a href="https://github.com/hsiehjackson/RULER">RULER</a> 等是更貼近實用的 long context evaluation、會暴露 lost-in-the-middle 等問題</li>
<li><strong>本地跑 long context 模型</strong>：先用 NIH 驗證 baseline、再用 RULER / 自己工作流 case 測 effective context</li>
<li><strong>判讀「我的模型實際能用幾 K」</strong>：NIH pass 的長度是上限、實用 effective context 通常是 NIH pass 長度的 1/2 到 1/4</li>
</ol>
]]></content:encoded></item><item><title>4.11 Long context engineering</title><link>https://tarrragon.github.io/blog/llm/04-applications/long-context-engineering/</link><pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/llm/04-applications/long-context-engineering/</guid><description>&lt;p>長 &lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/context-window/" data-link-title="Context Window" data-link-desc="模型一次能處理的最大 token 數量：prompt 加生成的總和上限">context window&lt;/a> 模型（128K、1M、甚至更長）在 2024-2026 變成主流標配。但「聲稱 context」跟「實用 effective context」之間有顯著落差、不理解這條鴻溝會讓 long context 變成資源浪費而非能力延伸。本章把 long context 的實際運作、典型失敗模式、prompt 設計策略、跟 &lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/rag/" data-link-title="RAG" data-link-desc="Retrieval-Augmented Generation：動態外掛知識給 LLM、繞開模型參數記憶的靜態限制">RAG&lt;/a> 的取捨拆成可操作的判讀。&lt;/p>
&lt;h2 id="本章目標">本章目標&lt;/h2>
&lt;p>讀完本章後、你應該能：&lt;/p>
&lt;ol>
&lt;li>區分模型「聲稱 context」、「NIH context」、「實用 effective context」三個層級。&lt;/li>
&lt;li>看到 &lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/lost-in-the-middle/" data-link-title="Lost in the Middle" data-link-desc="LLM 對 long context 中段內容的 attention / recall 顯著低於開頭與結尾的現象">lost-in-the-middle&lt;/a> 症狀時、知道怎麼緩解。&lt;/li>
&lt;li>對自己工作流的任務、判斷該用 long context 還是 RAG。&lt;/li>
&lt;li>設計 prompt 時、把關鍵資訊放對位置。&lt;/li>
&lt;li>評估「升級到更長 context 模型」的實際邊際收益。&lt;/li>
&lt;/ol>
&lt;h2 id="三層-context-概念claimed--nih--effective">三層 context 概念：claimed / NIH / effective&lt;/h2>
&lt;p>讀 model card 看到「128K context」「1M context」時、需要區分：&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>層級&lt;/th>
 &lt;th>定義&lt;/th>
 &lt;th>典型數字（128K 模型）&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Claimed context&lt;/td>
 &lt;td>模型架構支援的上限（RoPE scaling 配置）&lt;/td>
 &lt;td>128K&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>NIH context&lt;/td>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/needle-in-haystack/" data-link-title="Needle in a Haystack" data-link-desc="把一個事實藏在 long context 不同位置、測試 LLM 能否抓出來的 benchmark 方法">Needle-in-haystack&lt;/a> 通過的長度（抓單一事實）&lt;/td>
 &lt;td>80K-128K&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Effective context&lt;/td>
 &lt;td>真實任務（reasoning over context）品質可接受的長度&lt;/td>
 &lt;td>8K-32K&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>落差來自：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>RoPE scaling 是延伸、不是「免費擴展」&lt;/strong>：訓練多在 8K-32K range、用 &lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/rope/" data-link-title="RoPE（Rotary Position Embedding）" data-link-desc="用旋轉矩陣把位置資訊直接旋轉進 Q/K 向量、現代 LLM 主流的位置編碼方式">RoPE&lt;/a> scaling 推到 128K+、實用上會 degrade&lt;/li>
&lt;li>&lt;strong>訓練資料偏短&lt;/strong>：trillion-token pretrain corpus 中、極長文件相對稀少、模型對 long context 中段不熟悉&lt;/li>
&lt;li>&lt;strong>Attention 衰減&lt;/strong>：&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/attention/" data-link-title="Attention" data-link-desc="Transformer 內部讓每個 token 對其他 token 加權平均的核心機制、形成 KV cache 跟 context window 的計算基礎">attention&lt;/a> 機制對長距離 token 的注意能力隨距離下降、雖未真正 attention to 0、但「有效訊號」減弱&lt;/li>
&lt;/ol>
&lt;p>實務啟示：聲稱 1M context 不代表「能塞 1M 進 prompt 解任務」、實用 effective context 多半是聲稱的 1/4-1/8。&lt;/p>
&lt;h2 id="lost-in-the-middlelong-context-的主要失敗模式">Lost-in-the-middle：long context 的主要失敗模式&lt;/h2>
&lt;p>&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/lost-in-the-middle/" data-link-title="Lost in the Middle" data-link-desc="LLM 對 long context 中段內容的 attention / recall 顯著低於開頭與結尾的現象">Lost-in-the-middle&lt;/a>（Liu et al., 2023）的核心發現：模型對 long context 中段內容的 recall 顯著低於開頭與結尾。實測：&lt;/p>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">Recall accuracy vs 答案位置（10K context）：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl"> 位置 0%（開頭） ：85%+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl"> 位置 25% ：70%
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl"> 位置 50%（中段）：40-55%
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">5&lt;/span>&lt;span class="cl"> 位置 75% ：65%
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">6&lt;/span>&lt;span class="cl"> 位置 100%（結尾）：80%+&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>成因細節見 &lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/lost-in-the-middle/" data-link-title="Lost in the Middle" data-link-desc="LLM 對 long context 中段內容的 attention / recall 顯著低於開頭與結尾的現象">lost-in-the-middle 卡片&lt;/a>。本章聚焦緩解：&lt;/p></description><content:encoded><![CDATA[<p>長 <a href="/blog/llm/knowledge-cards/context-window/" data-link-title="Context Window" data-link-desc="模型一次能處理的最大 token 數量：prompt 加生成的總和上限">context window</a> 模型（128K、1M、甚至更長）在 2024-2026 變成主流標配。但「聲稱 context」跟「實用 effective context」之間有顯著落差、不理解這條鴻溝會讓 long context 變成資源浪費而非能力延伸。本章把 long context 的實際運作、典型失敗模式、prompt 設計策略、跟 <a href="/blog/llm/knowledge-cards/rag/" data-link-title="RAG" data-link-desc="Retrieval-Augmented Generation：動態外掛知識給 LLM、繞開模型參數記憶的靜態限制">RAG</a> 的取捨拆成可操作的判讀。</p>
<h2 id="本章目標">本章目標</h2>
<p>讀完本章後、你應該能：</p>
<ol>
<li>區分模型「聲稱 context」、「NIH context」、「實用 effective context」三個層級。</li>
<li>看到 <a href="/blog/llm/knowledge-cards/lost-in-the-middle/" data-link-title="Lost in the Middle" data-link-desc="LLM 對 long context 中段內容的 attention / recall 顯著低於開頭與結尾的現象">lost-in-the-middle</a> 症狀時、知道怎麼緩解。</li>
<li>對自己工作流的任務、判斷該用 long context 還是 RAG。</li>
<li>設計 prompt 時、把關鍵資訊放對位置。</li>
<li>評估「升級到更長 context 模型」的實際邊際收益。</li>
</ol>
<h2 id="三層-context-概念claimed--nih--effective">三層 context 概念：claimed / NIH / effective</h2>
<p>讀 model card 看到「128K context」「1M context」時、需要區分：</p>
<table>
  <thead>
      <tr>
          <th>層級</th>
          <th>定義</th>
          <th>典型數字（128K 模型）</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Claimed context</td>
          <td>模型架構支援的上限（RoPE scaling 配置）</td>
          <td>128K</td>
      </tr>
      <tr>
          <td>NIH context</td>
          <td><a href="/blog/llm/knowledge-cards/needle-in-haystack/" data-link-title="Needle in a Haystack" data-link-desc="把一個事實藏在 long context 不同位置、測試 LLM 能否抓出來的 benchmark 方法">Needle-in-haystack</a> 通過的長度（抓單一事實）</td>
          <td>80K-128K</td>
      </tr>
      <tr>
          <td>Effective context</td>
          <td>真實任務（reasoning over context）品質可接受的長度</td>
          <td>8K-32K</td>
      </tr>
  </tbody>
</table>
<p>落差來自：</p>
<ol>
<li><strong>RoPE scaling 是延伸、不是「免費擴展」</strong>：訓練多在 8K-32K range、用 <a href="/blog/llm/knowledge-cards/rope/" data-link-title="RoPE（Rotary Position Embedding）" data-link-desc="用旋轉矩陣把位置資訊直接旋轉進 Q/K 向量、現代 LLM 主流的位置編碼方式">RoPE</a> scaling 推到 128K+、實用上會 degrade</li>
<li><strong>訓練資料偏短</strong>：trillion-token pretrain corpus 中、極長文件相對稀少、模型對 long context 中段不熟悉</li>
<li><strong>Attention 衰減</strong>：<a href="/blog/llm/knowledge-cards/attention/" data-link-title="Attention" data-link-desc="Transformer 內部讓每個 token 對其他 token 加權平均的核心機制、形成 KV cache 跟 context window 的計算基礎">attention</a> 機制對長距離 token 的注意能力隨距離下降、雖未真正 attention to 0、但「有效訊號」減弱</li>
</ol>
<p>實務啟示：聲稱 1M context 不代表「能塞 1M 進 prompt 解任務」、實用 effective context 多半是聲稱的 1/4-1/8。</p>
<h2 id="lost-in-the-middlelong-context-的主要失敗模式">Lost-in-the-middle：long context 的主要失敗模式</h2>
<p><a href="/blog/llm/knowledge-cards/lost-in-the-middle/" data-link-title="Lost in the Middle" data-link-desc="LLM 對 long context 中段內容的 attention / recall 顯著低於開頭與結尾的現象">Lost-in-the-middle</a>（Liu et al., 2023）的核心發現：模型對 long context 中段內容的 recall 顯著低於開頭與結尾。實測：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln">1</span><span class="cl">Recall accuracy vs 答案位置（10K context）：
</span></span><span class="line"><span class="ln">2</span><span class="cl">  位置 0%（開頭）  ：85%+
</span></span><span class="line"><span class="ln">3</span><span class="cl">  位置 25%        ：70%
</span></span><span class="line"><span class="ln">4</span><span class="cl">  位置 50%（中段）：40-55%
</span></span><span class="line"><span class="ln">5</span><span class="cl">  位置 75%        ：65%
</span></span><span class="line"><span class="ln">6</span><span class="cl">  位置 100%（結尾）：80%+</span></span></code></pre></div><p>成因細節見 <a href="/blog/llm/knowledge-cards/lost-in-the-middle/" data-link-title="Lost in the Middle" data-link-desc="LLM 對 long context 中段內容的 attention / recall 顯著低於開頭與結尾的現象">lost-in-the-middle 卡片</a>。本章聚焦緩解：</p>
<ol>
<li><strong>關鍵資訊放開頭 / 結尾</strong>：system prompt、最新指示放在 prompt 開頭 / 最末段、剛好是 attention 最強的兩處</li>
<li><strong>重要內容重複出現</strong>：在 prompt 開頭跟結尾各放一次摘要、提高 recall</li>
<li><strong>避免在中段藏 deeply nested constraint</strong>：「請遵守附件中第 47 條規則」這類引用、長 context 中段容易被忽略</li>
<li><strong>拆 prompt 成多輪</strong>：把 long context 拆成「load context」+「query」兩輪、第二輪 query 在前一輪結尾、recall 較強</li>
</ol>
<h2 id="long-context-vs-rag什麼時候該選哪個">Long context vs RAG：什麼時候該選哪個</h2>
<p>兩者解的問題重疊但<strong>不完全替代</strong>：</p>
<table>
  <thead>
      <tr>
          <th>維度</th>
          <th>Long context</th>
          <th><a href="/blog/llm/knowledge-cards/rag/" data-link-title="RAG" data-link-desc="Retrieval-Augmented Generation：動態外掛知識給 LLM、繞開模型參數記憶的靜態限制">RAG</a></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>知識量上限</td>
          <td>Context window（128K-1M token）</td>
          <td>無上限（向量資料庫可存任意大）</td>
      </tr>
      <tr>
          <td>知識動態更新</td>
          <td>每次 query 把 context 全塞進去、可變</td>
          <td>Retrieval 階段可隨時更新</td>
      </tr>
      <tr>
          <td>知識來源 traceable</td>
          <td>整段塞、無明確「答案來自哪一段」</td>
          <td>每個 chunk 有 source、可 cite</td>
      </tr>
      <tr>
          <td>Prompt 成本</td>
          <td>每次 query 都付 full context token 成本</td>
          <td>只付 retrieved chunks 的 <a href="/blog/llm/knowledge-cards/retrieval-cost/" data-link-title="Retrieval Cost" data-link-desc="RAG 檢索帶來的 latency、token、embedding、reranker、LLM call 與維護成本，用來判斷增強是否划算">retrieval cost</a></td>
      </tr>
      <tr>
          <td>適合場景</td>
          <td>知識集中、&lt; context window、需要整體理解</td>
          <td>知識量大、零散、明確 retrieval key</td>
      </tr>
      <tr>
          <td>失敗模式</td>
          <td>Lost-in-the-middle、context degradation</td>
          <td>Retrieval miss、chunk 邊界切壞</td>
      </tr>
  </tbody>
</table>
<p>判讀流程：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln">1</span><span class="cl">知識總量 &lt; 你模型的 effective context（見後文表格、典型 7B-14B 約 8-16K、30B+ 約 16-32K）？
</span></span><span class="line"><span class="ln">2</span><span class="cl">  ├─ 是 → 直接 long context
</span></span><span class="line"><span class="ln">3</span><span class="cl">  └─ 否 → 知識結構化、retrieval key 明確？
</span></span><span class="line"><span class="ln">4</span><span class="cl">            ├─ 是 → RAG
</span></span><span class="line"><span class="ln">5</span><span class="cl">            └─ 否 → 嘗試 hybrid：RAG 把相關段 retrieve 出來 + 放進 long context</span></span></code></pre></div><p>注意「effective context」是你模型實際能 reliable 處理的範圍、不是 model card 上聲稱的 128K — 拿 7B 模型塞 16K 知識仍可能踩 lost-in-the-middle。</p>
<p>混用情境：</p>
<ol>
<li><strong>Codebase 理解</strong>：codebase 整體用 RAG retrieve、單檔 deep dive 用 long context（讀整個檔案）</li>
<li><strong>文件問答</strong>：文件用 RAG retrieve 相關段、塞進 32K context、模型可看到「retrieve 結果 + 自己的對話歷史」</li>
<li><strong>長對話</strong>：對話歷史進 long context、新指令在最末段（避免 lost-in-the-middle）</li>
</ol>
<h2 id="context-設計策略">Context 設計策略</h2>
<p>具體 prompt 結構建議（適用 long context 場景）：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln"> 1</span><span class="cl">[1. System prompt 開頭]         ← attention 強、放核心指令
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">  你的角色 / 主要任務 / 不變的約束
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">[2. Few-shot examples（若需）]   ← attention 仍強、放示範
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">[3. 大段 context]                ← 中段、可能 lost-in-the-middle
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">  - 把最重要的內容也放這段開頭跟結尾、別只放中間
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">  - 若有多段 context、各段都帶明確 heading
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">
</span></span><span class="line"><span class="ln">10</span><span class="cl">[4. 當前查詢]                    ← attention 強、放使用者問題
</span></span><span class="line"><span class="ln">11</span><span class="cl">
</span></span><span class="line"><span class="ln">12</span><span class="cl">[5. 重述關鍵約束（若需）]         ← 末段、attention 強、再次強調 critical rule</span></span></code></pre></div><p>典型反例（容易踩 lost-in-the-middle）：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln">1</span><span class="cl">[1. 重要約束「使用者付費等級 = premium、回應應該詳細」]
</span></span><span class="line"><span class="ln">2</span><span class="cl">[2. 100K 文件全文]
</span></span><span class="line"><span class="ln">3</span><span class="cl">[3. 「請回答上述文件相關問題」]</span></span></code></pre></div><p>→ 改成：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln">1</span><span class="cl">[1. 重要約束（同上）]
</span></span><span class="line"><span class="ln">2</span><span class="cl">[2. 文件摘要 + 「以下是完整文件、若需細節請參考」]
</span></span><span class="line"><span class="ln">3</span><span class="cl">[3. 100K 文件全文]
</span></span><span class="line"><span class="ln">4</span><span class="cl">[4. 重述「使用者付費等級 = premium、提供詳細答案」]
</span></span><span class="line"><span class="ln">5</span><span class="cl">[5. 「使用者問題：X」]</span></span></code></pre></div><p>第二版有兩處可靠出現核心指令、長 context 中段含有完整文件、但模型 recall instruction 時兩處任選一處都行、品質提升。</p>
<h2 id="reasoning-model--long-context-的特殊互動">Reasoning model + long context 的特殊互動</h2>
<p><a href="/blog/llm/03-theoretical-foundations/reasoning-models/" data-link-title="3.8 Reasoning models：test-time compute paradigm" data-link-desc="Chain-of-thought 從 prompting 技巧演化成訓練 paradigm、reasoning model 的內部運作、本地可跑的選項與適用任務">Reasoning models</a> 的 reasoning trace 跟 long context 有兩個衝突點：</p>
<ol>
<li><strong>Reasoning trace 擠 context budget</strong>：1000-10000 token reasoning trace 直接吃進 context、本來 effective 32K 的模型可能只剩 22K 給輸入</li>
<li><strong>Long thinking traces 自己也踩 lost-in-the-middle</strong>：reasoning trace 變長時、reasoning 過程中段也會「忘記前面想到的」</li>
</ol>
<p>緩解：</p>
<ol>
<li><strong>Reasoning model 配長 context 模型</strong>：DeepSeek-R1 distill 64K context 是合理 baseline</li>
<li><strong>Reasoning 階段引導模型「定期重述目標」</strong>：prompt 加「請每隔幾步重新確認任務目標」</li>
<li><strong>複雜任務拆步</strong>：別把整個任務丟給 reasoning model 一輪解、拆成多個 sub-task</li>
</ol>
<h2 id="量測自己模型的-effective-context">量測自己模型的 effective context</h2>
<p>不要相信 model card 上的數字、自己跑：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="c1"># 1. 跑 needle-in-haystack（lower bound、寬鬆指標）</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="c1"># 用 ggerganov/llama.cpp 或 RULER 工具</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="c1"># 看模型在 8K / 16K / 32K / 64K / 128K 各自的 NIH accuracy</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">
</span></span><span class="line"><span class="ln"> 5</span><span class="cl"><span class="c1"># 2. 自己工作流的 real-task 評估</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl"><span class="c1"># 拿實際的長 prompt（如完整 codebase + 任務）</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl"><span class="c1"># 對不同 context 長度比較輸出品質、找到 degradation 點</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">
</span></span><span class="line"><span class="ln"> 9</span><span class="cl"><span class="c1"># 3. lost-in-the-middle 測試</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="c1"># 同個 prompt 把關鍵指令分別放在開頭、中段、結尾</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl"><span class="c1"># 對比模型回答準確度</span></span></span></code></pre></div><p>實務上、寫 code 場景的 effective context 通常落在：</p>
<table>
  <thead>
      <tr>
          <th>模型大小</th>
          <th>聲稱 context</th>
          <th>實用 effective context（寫 code）</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>7B-14B（如 Qwen3-Coder-14B）</td>
          <td>32K-128K</td>
          <td>8K-16K</td>
      </tr>
      <tr>
          <td>30B-32B（如 Qwen3-Coder-30B）</td>
          <td>64K-128K</td>
          <td>16K-32K</td>
      </tr>
      <tr>
          <td>雲端旗艦（Claude / GPT-5）</td>
          <td>200K-1M</td>
          <td>64K-200K</td>
      </tr>
  </tbody>
</table>
<h2 id="升級到更長-context-模型的判讀">升級到更長 context 模型的判讀</h2>
<p>讀 model card 看到「context 從 128K 提升到 1M」、判斷對自己的價值：</p>
<ol>
<li><strong>看 RULER benchmark、不只看 NIH</strong>：RULER 有 multi-needle、aggregation、reasoning 等任務、更貼近實用</li>
<li><strong>看 effective context（如 LongBench 數字）</strong>：聲稱 1M 但 effective 64K vs 聲稱 200K 但 effective 100K — 後者更有用</li>
<li><strong>看自己任務真實長度</strong>：如果你的任務 prompt 多在 8K 內、聲稱 128K → 1M 對你無收益</li>
<li><strong>看推論成本</strong>：long context 的 <a href="/blog/llm/knowledge-cards/kv-cache/" data-link-title="KV Cache" data-link-desc="已處理 token 的 attention 中間結果暫存：避免重算、加速後續生成">KV cache</a> 跟 prefill 時間都隨長度增加、effective 64K 模型實用上比聲稱 1M 模型更快</li>
</ol>
<h2 id="何時過時--何時不過時">何時過時 / 何時不過時</h2>
<p><strong>不會過時的部分</strong>：</p>
<ul>
<li>Claimed / NIH / Effective context 三層概念</li>
<li>Lost-in-the-middle 的存在跟基本緩解策略</li>
<li>Long context vs RAG 的判讀框架</li>
<li>「關鍵資訊放開頭結尾」的 prompt 設計原則</li>
</ul>
<p><strong>會變的部分</strong>：</p>
<ul>
<li>各模型的聲稱 / effective context 數字（每代會推進）</li>
<li>Long context 訓練技術（RoPE scaling 變體、long-context fine-tuning 方法會演化）</li>
<li>Lost-in-the-middle 的減緩進展（可能透過新訓練方法部分解決）</li>
<li>Benchmark 工具（NIH → RULER → 未來新 benchmark）</li>
</ul>
<h2 id="下一章">下一章</h2>
<p>下一章：<a href="/blog/llm/04-applications/embedding-model-internals/" data-link-title="4.12 Embedding model 內部：訓練、選型、in-domain fine-tune" data-link-desc="Embedding model 怎麼訓練（contrastive learning &#43; hard negative mining）、怎麼挑（MTEB / 大小 / domain）、何時該自己 fine-tune">4.12 Embedding model 內部</a>、看 RAG retrieval 階段背後的 embedding 是怎麼運作。</p>
]]></content:encoded></item></channel></rss>