<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[双7900XTX跑SGLang：HiCache 开不开？128K 长上下文冷/热路径实测]]></title><description><![CDATA[<p dir="auto">首先感谢各位论坛的大神，跟着这大神的帖子进行了配置，以下是本机的测试效果。</p>
<blockquote>
<p dir="auto">先说结论：<strong>HiCache 不会让模型第一次阅读长文时变快，但可以记住已经读过的内容。再次使用同一份长文时，模型就不必从头重读。</strong></p>
<p dir="auto">在这台双 7900 XTX 机器上，第一次处理 128K 长文，无论是否开启 HiCache，都要约 192 秒才开始回答；再次使用同一份长文时，只要约 2.65 秒就能开始回答。多轮对话、反复分析同一个代码仓库、重复使用同一批知识库文档时，收益非常明显。</p>
</blockquote>
<hr />
<h2>1. 解释 HiCache</h2>
<p dir="auto">可以把 128K 长上下文想象成一本很厚的书。</p>
<ul>
<li><strong>第一次提问</strong>：模型需要从头读完整本书，再开始回答。无论是否开启 HiCache，这一步都省不了，所以都要等待约 3 分钟。</li>
<li><strong>开启 HiCache 后</strong>：模型读书时会把已经计算好的“读书笔记”暂存在电脑内存里。</li>
<li><strong>再次针对同一本书提问</strong>：模型可以直接加载这些笔记，不必重新读完整本书，因此约 2.65 秒就能开始回答。</li>
<li><strong>如果每次提交的内容都完全不同</strong>：旧笔记用不上，开启 HiCache 不但没有明显帮助，还会多占内存并产生少量缓存开销。</li>
</ul>
<p dir="auto">本次测试最直观的结果如下：</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>实际场景</th>
<th style="text-align:right">开始回答前要等多久</th>
<th style="text-align:right">整个请求耗时</th>
<th>通俗解释</th>
</tr>
</thead>
<tbody>
<tr>
<td>关闭 HiCache，第一次提交 128K 长文</td>
<td style="text-align:right">193.23 秒</td>
<td style="text-align:right">201.74 秒</td>
<td>模型需要完整读一遍。</td>
</tr>
<tr>
<td>开启 HiCache，第一次提交 128K 长文</td>
<td style="text-align:right">192.10 秒</td>
<td style="text-align:right">206.60 秒</td>
<td>仍需完整读一遍，同时保存缓存。</td>
</tr>
<tr>
<td>开启 HiCache，再次使用同一份长文</td>
<td style="text-align:right"><strong>2.65 秒</strong></td>
<td style="text-align:right"><strong>3.25 秒</strong></td>
<td>直接复用上一次的计算结果。</td>
</tr>
</tbody>
</table>
<p dir="auto">等待第一个字的时间对比（柱子越短越好）：<br />
<img src="https://upload.lcz.me/uploads/11e9b5cb-2273-49dc-89f9-3a7ee77bb695.jpeg" alt="dd291e93-2f40-40e8-89c4-8c7c536cba2a-image.jpeg" class="img-markdown  img-fluid" /></p>
<p dir="auto">换句话说：</p>
<blockquote>
<p dir="auto"><strong>HiCache 不会让模型第一次阅读长文时变快；它真正加速的是“同一份长内容被再次使用”的场景。</strong></p>
</blockquote>
<p dir="auto">所以，如果你只是偶尔让模型总结一篇长文，没必要专门开启 HiCache；如果你在做多轮 Agent、连续追问同一个代码仓库，或者很多问题共享同一批 RAG 文档，HiCache 就很有价值。</p>
<h3>文中几个性能名词是什么意思？</h3>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>名词</th>
<th>通俗解释</th>
<th>数值怎么看</th>
</tr>
</thead>
<tbody>
<tr>
<td>128K</td>
<td>输入给模型的内容长度，大约 12.8 万个 token</td>
<td>越长，模型第一次阅读通常越慢。</td>
</tr>
<tr>
<td>TTFT</td>
<td>从发送问题到看到第一个字的等待时间</td>
<td>越低越好，最影响“响应快不快”的体感。</td>
</tr>
<tr>
<td>E2E</td>
<td>从发送问题到整个回答完成的总时间</td>
<td>越低越好。</td>
</tr>
<tr>
<td>Prefill</td>
<td>模型阅读并理解输入内容的阶段</td>
<td>长文的大部分等待时间都花在这里。</td>
</tr>
<tr>
<td>输入吞吐</td>
<td>模型每秒能处理多少输入 token</td>
<td>越高越好，但缓存命中后的数字属于等效速度。</td>
</tr>
<tr>
<td>冷请求</td>
<td>这份内容之前没有缓存，必须重新计算</td>
<td>相当于第一次读书。</td>
</tr>
<tr>
<td>热命中</td>
<td>这份内容已经缓存，可以复用计算结果</td>
<td>相当于直接翻阅读书笔记。</td>
</tr>
</tbody>
</table>
<h2>2. 测试平台</h2>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>项目</th>
<th>配置</th>
</tr>
</thead>
<tbody>
<tr>
<td>GPU</td>
<td>2 × AMD Radeon RX 7900 XTX，24 GB/卡，gfx1100</td>
</tr>
<tr>
<td>并行</td>
<td>Tensor Parallel = 2</td>
</tr>
<tr>
<td>推理框架</td>
<td>SGLang <code>0.5.6.post3.dev10769+gf84475ccf</code></td>
</tr>
<tr>
<td>模型</td>
<td><code>Qwen3.8-27B-W4A16-AutoRound-GPTQ</code></td>
</tr>
<tr>
<td>权重 / KV</td>
<td>GPTQ / BF16 KV cache</td>
</tr>
<tr>
<td>Attention</td>
<td>Triton</td>
</tr>
<tr>
<td>投机解码</td>
<td>DFLASH，draft=<code>Qwen3.8-27B-DFlash2-W4A16</code>，8 draft tokens，window=2048</td>
</tr>
<tr>
<td>压测工具</td>
<td>SGLang <code>benchmark.serving</code>，<code>backend=sglang</code></td>
</tr>
<tr>
<td>请求</td>
<td>固定随机输入 128,000 token；单并发；<code>temperature=0</code>；同一随机种子</td>
</tr>
</tbody>
</table>
<h3>HiCache 参数</h3>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>参数</th>
<th style="text-align:right">关闭</th>
<th style="text-align:right">开启</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>enable_hierarchical_cache</code></td>
<td style="text-align:right"><code>false</code></td>
<td style="text-align:right"><code>true</code></td>
</tr>
<tr>
<td><code>hicache_size</code></td>
<td style="text-align:right">0</td>
<td style="text-align:right">12</td>
</tr>
<tr>
<td><code>hicache_ratio</code></td>
<td style="text-align:right">2.0</td>
<td style="text-align:right">2.0</td>
</tr>
<tr>
<td><code>hicache_io_backend</code></td>
<td style="text-align:right"><code>kernel</code></td>
<td style="text-align:right"><code>kernel</code></td>
</tr>
<tr>
<td><code>hicache_host_memory_mode</code></td>
<td style="text-align:right"><code>cache</code></td>
<td style="text-align:right"><code>cache</code></td>
</tr>
<tr>
<td><code>hicache_write_policy</code></td>
<td style="text-align:right"><code>write_through</code></td>
<td style="text-align:right"><code>write_through</code></td>
</tr>
</tbody>
</table>
<h2>3. 128K 实测结果</h2>
<h3>3.1 冷请求：开 HiCache 不会减少 prefill 计算</h3>
<p dir="auto">两组均为 128K 输入、512 输出、单并发、无 warmup，且冷测均清缓存。</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>场景</th>
<th style="text-align:right">输入吞吐</th>
<th style="text-align:right">TTFT</th>
<th style="text-align:right">E2E</th>
<th style="text-align:right">TPOT</th>
<th style="text-align:right">DFLASH 接受长度</th>
</tr>
</thead>
<tbody>
<tr>
<td>不开 HiCache</td>
<td style="text-align:right"><strong>634.14 tok/s</strong></td>
<td style="text-align:right">193.23 s</td>
<td style="text-align:right"><strong>201.74 s</strong></td>
<td style="text-align:right"><strong>16.66 ms</strong></td>
<td style="text-align:right">5.79</td>
</tr>
<tr>
<td>开 HiCache（冷）</td>
<td style="text-align:right">619.25 tok/s</td>
<td style="text-align:right"><strong>192.10 s</strong></td>
<td style="text-align:right">206.60 s</td>
<td style="text-align:right">28.37 ms</td>
<td style="text-align:right">3.58</td>
</tr>
<tr>
<td>开 HiCache 相对变化</td>
<td style="text-align:right"><strong>-2.3%</strong></td>
<td style="text-align:right">-0.6%</td>
<td style="text-align:right"><strong>+2.4%</strong></td>
<td style="text-align:right">+70.3%</td>
<td style="text-align:right">-38.2%</td>
</tr>
</tbody>
</table>
<p dir="auto">冷路径的 TTFT 差异不足 1%，可以当作持平；输入吞吐和 E2E 则说明 HiCache 没有为“从未处理过的 128K Prompt”加速，反而带来约 2% 的总时延开销。TPOT 变慢较明显，不过 DFLASH 接受长度也不同，单次数据不能把这部分完全归因于 HiCache。</p>
<p dir="auto"><img src="https://upload.lcz.me/uploads/a9b83d42-9225-479f-9ae7-42f376906314.jpeg" alt="8ab3aedd-fdf4-458f-a055-0d6eb493b7d0-image.jpeg" class="img-markdown  img-fluid" /></p>
<h3>3.2 热命中：同一个 128K 前缀的复用价值</h3>
<p dir="auto">先用 128K / 512 token 的请求填充 HiCache，然后在<strong>不清缓存</strong>的情况下再次请求同一随机前缀；热测只生成 16 token，因此只比较 prefill / 首 token / E2E，不拿它的 TPOT 与上表横比。</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>场景</th>
<th style="text-align:right">输入 / 输出</th>
<th style="text-align:right">输入吞吐</th>
<th style="text-align:right">TTFT</th>
<th style="text-align:right">E2E</th>
</tr>
</thead>
<tbody>
<tr>
<td>开 HiCache（冷）</td>
<td style="text-align:right">128K / 512</td>
<td style="text-align:right">619.25 tok/s</td>
<td style="text-align:right">192.10 s</td>
<td style="text-align:right">206.60 s</td>
</tr>
<tr>
<td>开 HiCache（热命中）</td>
<td style="text-align:right">128K / 16</td>
<td style="text-align:right"><strong>38,204.61 tok/s</strong></td>
<td style="text-align:right"><strong>2.65 s</strong></td>
<td style="text-align:right"><strong>3.25 s</strong></td>
</tr>
<tr>
<td>热命中收益</td>
<td style="text-align:right"><strong>61.7×</strong></td>
<td style="text-align:right">TTFT <strong>-98.6%</strong></td>
<td style="text-align:right">E2E <strong>-98.4%</strong></td>
</tr>
</tbody>
</table>
<p dir="auto">这里的“38K tok/s”是压测端以完整 128K 输入长度计算的等效吞吐，不代表模型真的重新做了 38K tok/s 的 prefill；正是因为绝大部分 KV 从 host cache 回载，服务端跳过了原本最重的长前缀计算。</p>
<h2>4. 该不该开？</h2>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>使用模式</th>
<th>建议</th>
<th>原因</th>
</tr>
</thead>
<tbody>
<tr>
<td>单次摘要、一次性超长文档</td>
<td><strong>默认关闭</strong></td>
<td>冷 prefill 不加速，且有小幅性能/显存容量代价。</td>
</tr>
<tr>
<td>多轮 Agent 会话</td>
<td><strong>开启</strong></td>
<td>system prompt、历史对话和工具定义经常完全复用。</td>
</tr>
<tr>
<td>RAG：多个问题共享长文档</td>
<td><strong>开启</strong></td>
<td>第一个请求填充，后续请求能直接吃到热缓存。</td>
</tr>
<tr>
<td>大量彼此无关的短请求</td>
<td>先关闭并实测</td>
<td>命中率低，缓存换不来回报。</td>
</tr>
</tbody>
</table>
<p dir="auto">还有一个容易忽略的取舍：本次测试中，开启 HiCache 的服务器可用 GPU KV 容量为 <strong>159,692 token</strong>，关闭时为 <strong>233,207 token</strong>，减少约 <strong>31.5%</strong>。它用 GPU KV 空间换取 CPU 内存层级缓存，适合“容量与复用”，而非纯 GPU 性能冲榜。</p>
<h2>5. 一键复现：只切换 HiCache 的严谨 A/B</h2>
<p dir="auto">下面脚本刻意让两组启动参数相同，只在 <code>EXTRA_HICACHE_ARGS</code> 处切换，避免把上下文长度、并发、显存比例等变量混进结论。</p>
<h3>5.1 环境变量</h3>
<pre><code class="language-bash">export SGLANG_PYTHON=/home/USER/sglang-qwen/.venv/bin/python
export MODEL_PATH=/path/to/Qwen3.8-27B-W4A16-AutoRound-GPTQ
export DRAFT_MODEL_PATH=/path/to/Qwen3.8-27B-DFlash2-W4A16
export PORT=30010
export MODEL_NAME=qwen3-8-27b-w4a16
</code></pre>
<h3>5.2 启动基线（关闭 HiCache）</h3>
<pre><code class="language-bash">EXTRA_HICACHE_ARGS=""

"$SGLANG_PYTHON" -m sglang.launch_server \
  --model-path "$MODEL_PATH" \
  --served-model-name "$MODEL_NAME" \
  --host 127.0.0.1 --port "$PORT" \
  --tp-size 2 --quantization gptq --dtype bfloat16 \
  --kv-cache-dtype bfloat16 --attention-backend triton \
  --context-length 131072 --mem-fraction-static 0.80 \
  --max-running-requests 1 --chunked-prefill-size 2048 \
  --enable-cache-report \
  --speculative-algorithm DFLASH \
  --speculative-draft-model-path "$DRAFT_MODEL_PATH" \
  --speculative-draft-model-quantization compressed-tensors \
  --speculative-num-draft-tokens 8 \
  --speculative-draft-window-size 2048 \
  $EXTRA_HICACHE_ARGS
</code></pre>
<h3>5.3 启动 HiCache 组</h3>
<p dir="auto">关闭基线服务后，保留上面的完整命令，只把第一行替换为：</p>
<pre><code class="language-bash">EXTRA_HICACHE_ARGS="--enable-hierarchical-cache \
  --hicache-size 12 --hicache-ratio 2.0 \
  --hicache-io-backend kernel \
  --hicache-host-memory-mode cache \
  --hicache-write-policy write_through"
</code></pre>
<blockquote>
<p dir="auto"><code>hicache-size</code> 的单位和适合的取值会受 SGLang 版本、模型 KV 大小与主机内存影响。这里的 <code>12</code> 是本机已跑通的参数，不是所有机器的通用最优值。</p>
</blockquote>
<h3>5.4 冷 / 热压测命令</h3>
<pre><code class="language-bash"># 冷请求：每次压测前清服务端缓存，记录 prefill 性能
"$SGLANG_PYTHON" -m sglang.benchmark.serving \
  --backend sglang --host 127.0.0.1 --port "$PORT" \
  --dataset-name random --random-input-len 128000 --random-output-len 512 \
  --num-prompts 1 --max-concurrency 1 --request-rate inf \
  --seed 42 --temperature 0 --flush-cache --disable-tqdm \
  --output-file cold.jsonl

# 热请求：紧接冷请求执行，不清缓存；必须保持相同 seed / 输入长度
"$SGLANG_PYTHON" -m sglang.benchmark.serving \
  --backend sglang --host 127.0.0.1 --port "$PORT" \
  --dataset-name random --random-input-len 128000 --random-output-len 16 \
  --num-prompts 1 --max-concurrency 1 --request-rate inf \
  --seed 42 --temperature 0 --disable-tqdm \
  --output-file hot.jsonl
</code></pre>
<p dir="auto">建议每个场景至少跑 3 次，取中位数；并保存每个 <code>jsonl</code> 和 server 日志。检查热命中时，除了 TTFT，还应确认 cache report 中的 <code>host_cached_tokens</code> / 命中率确实上升。</p>
<h2>6. 本机开启 HiCache 的最终配置</h2>
<p dir="auto">下面是本机实际测试并成功运行的配置，不是根据文档猜测的参数。硬件为双 7900 XTX，模型使用 TP=2 分布在两张显卡上。</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>项目</th>
<th style="text-align:right">本机实际配置</th>
<th>作用</th>
</tr>
</thead>
<tbody>
<tr>
<td>GPU</td>
<td style="text-align:right">2 × RX 7900 XTX 24 GB</td>
<td>两张显卡共同加载模型</td>
</tr>
<tr>
<td>SGLang</td>
<td style="text-align:right"><code>0.5.6.post3.dev10769+gf84475ccf</code></td>
<td>本次测试版本</td>
</tr>
<tr>
<td>模型</td>
<td style="text-align:right">Qwen3.8-27B W4A16 GPTQ</td>
<td>主模型</td>
</tr>
<tr>
<td>Draft 模型</td>
<td style="text-align:right">Qwen3.8-27B DFlash2 W4A16</td>
<td>投机解码模型</td>
</tr>
<tr>
<td><code>tp-size</code></td>
<td style="text-align:right">2</td>
<td>模型切分到两张显卡</td>
</tr>
<tr>
<td><code>context-length</code></td>
<td style="text-align:right">196,608</td>
<td>服务允许的最大上下文长度</td>
</tr>
<tr>
<td><code>mem-fraction-static</code></td>
<td style="text-align:right">0.80</td>
<td>每张显卡约 80% 显存用于模型和 KV cache</td>
</tr>
<tr>
<td><code>max-running-requests</code></td>
<td style="text-align:right">3</td>
<td>最多同时处理 3 个请求</td>
</tr>
<tr>
<td><code>chunked-prefill-size</code></td>
<td style="text-align:right">2,048</td>
<td>长输入分块处理，降低瞬时显存压力</td>
</tr>
<tr>
<td>GPU KV 容量</td>
<td style="text-align:right">159,692 token</td>
<td>服务启动后实际报告的 KV 容量</td>
</tr>
<tr>
<td>单请求最大输入</td>
<td style="text-align:right">159,686 token</td>
<td>服务启动后实际报告的输入上限</td>
</tr>
<tr>
<td><code>hicache-size</code></td>
<td style="text-align:right">12</td>
<td>分配给 HiCache 的主机内存缓存容量参数</td>
</tr>
<tr>
<td><code>hicache-ratio</code></td>
<td style="text-align:right">2.0</td>
<td>HiCache 的缓存比例</td>
</tr>
<tr>
<td><code>hicache-io-backend</code></td>
<td style="text-align:right"><code>kernel</code></td>
<td>使用 kernel 后端在 GPU 与主机内存间搬运 KV</td>
</tr>
<tr>
<td><code>hicache-host-memory-mode</code></td>
<td style="text-align:right"><code>cache</code></td>
<td>主机内存作为缓存层使用</td>
</tr>
<tr>
<td><code>hicache-write-policy</code></td>
<td style="text-align:right"><code>write_through</code></td>
<td>新生成的 KV 同步写入主机缓存</td>
</tr>
<tr>
<td>DFLASH draft tokens</td>
<td style="text-align:right">8</td>
<td>每轮最多草拟 8 个 token</td>
</tr>
<tr>
<td>DFLASH window</td>
<td style="text-align:right">2,048</td>
<td>Draft 模型使用的窗口长度</td>
</tr>
</tbody>
</table>
<p dir="auto">本机最终使用的完整启动命令如下。其他用户只需要修改主模型和 Draft 模型路径即可照着测试：</p>
<pre><code class="language-bash">/home/didilc/sglang-qwen/.venv/bin/python -m sglang.launch_server \
  --model-path /home/didilc/models/vllm/Qwen3.8-27B-W4A16-AutoRound-GPTQ \
  --served-model-name qwen3.8-27b-w4a16-dflash2-hicache \
  --host 127.0.0.1 \
  --port 30004 \
  --tp-size 2 \
  --quantization gptq \
  --dtype bfloat16 \
  --mamba-ssm-dtype bfloat16 \
  --kv-cache-dtype bfloat16 \
  --attention-backend triton \
  --context-length 196608 \
  --mem-fraction-static 0.80 \
  --max-running-requests 3 \
  --max-mamba-cache-size 20 \
  --chunked-prefill-size 2048 \
  --enable-mixed-chunk \
  --cuda-graph-bs-decode 1 2 4 \
  --triton-attention-num-kv-splits 16 \
  --reasoning-parser qwen3 \
  --tool-call-parser qwen3_coder \
  --enable-cache-report \
  --enable-hierarchical-cache \
  --hicache-size 12 \
  --hicache-ratio 2.0 \
  --hicache-io-backend kernel \
  --hicache-host-memory-mode cache \
  --hicache-write-policy write_through \
  --speculative-algorithm DFLASH \
  --speculative-draft-model-path /home/didilc/models/Qwen3.8-27B-DFlash2-W4A16 \
  --speculative-draft-model-quantization compressed-tensors \
  --speculative-num-draft-tokens 8 \
  --speculative-draft-window-size 2048 \
  --stream-interval 1
</code></pre>
<p dir="auto">其中真正负责开启 HiCache 的是下面六项，缺少第一项就不会启用：</p>
<pre><code class="language-bash">--enable-hierarchical-cache \
--hicache-size 12 \
--hicache-ratio 2.0 \
--hicache-io-backend kernel \
--hicache-host-memory-mode cache \
--hicache-write-policy write_through
</code></pre>
<p dir="auto">这套参数的实际效果是：第一次处理 128K 长文仍需正常计算，但计算结果会保存到主机内存；再次使用相同前缀时，TTFT 可由约 192 秒降到约 2.65 秒。代价是占用更多系统内存，并且 GPU KV 容量会比未开启 HiCache 时更低。</p>
]]></description><link>https://lcz.me/topic/1893</link><generator>RSS for Node</generator><lastBuildDate>Mon, 12 Oct 2026 15:39:51 GMT</lastBuildDate><atom:link href="https://lcz.me/topic/1893.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 22 Sep 2026 12:02:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 双7900XTX跑SGLang：HiCache 开不开？128K 长上下文冷/热路径实测 on Tue, 22 Sep 2026 13:02:41 GMT]]></title><description><![CDATA[<p dir="auto">数据和结论都对：HiCache 省的是 <strong>prefill</strong>，不是首读。补三点，方便别人对齐口径：</p>
<ul>
<li><strong>命中条件比看起来严</strong>：分层 KV 缓存按<strong>前缀逐 token 对齐</strong>命中，temperature=0 / 固定种子只保证输出确定，不等于命中。你热启动 2.65s，是因为两次请求的 128k 输入前缀完全一致。真实 Agent/RAG 场景里更常见的是「system prompt + 工具定义一致、只有最后问题不同」——建议补测这一组，那才是它最值钱的形态。</li>
<li><strong>显存是 L1、host 内存是 L2</strong>：<code>hicache_size=12</code>（GB）在 128G 内存上够用，但要盯两个数：cache 命中率、host<img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2194.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--left_right_arrow" style="height:1.4em;width:auto;vertical-align:middle" title="↔" alt="↔" />GPU 搬运耗时。命中率低时，搬运 + 占内存确实可能反噬，所以你「每次内容都不同就别开」的判断成立。</li>
<li><strong>并发下要单独测</strong>：单并发 192s→2.65s 是最理想情况；多并发时 host 内存带宽和 PCIe 会争用，建议再贴一组 2/4 并发的冷/热 TTFT。</li>
</ul>
<p dir="auto">一个容易踩的坑：改 max context（比如 128k 切 96k）会让已缓存页对不齐、整段失效，测试时把上下文长度固定住再比。</p>
]]></description><link>https://lcz.me/post/20075</link><guid isPermaLink="true">https://lcz.me/post/20075</guid><dc:creator><![CDATA[Xiaote]]></dc:creator><pubDate>Tue, 22 Sep 2026 13:02:41 GMT</pubDate></item></channel></rss>