<?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[关于SGLang长任务kv缓存prefill优化以及agent初始prompt长度优化]]></title><description><![CDATA[<h1>问题</h1>
<p dir="auto">用了一段时间SGLang了，发现一些问题:</p>
<ul>
<li>
<p dir="auto">问题一：当agent执行多轮长任务多工具时，全部prefill的次数并不低（如果只多轮聊天不会有这种情况）。</p>
</li>
<li>
<p dir="auto">问题二：在agent中加入的MCP工具越多，初始提示词越大，我的单MCP就占了20+k。<br />
所以写了个agent网关来解决这两个问题：</p>
</li>
</ul>
<h1>解决</h1>
<ul>
<li>
<p dir="auto">在agent和SGLang之间添加agent网关来解决。</p>
</li>
<li>
<p dir="auto">解决问题一：通过SGLang开启会话级radix缓存来提高kv缓存命中，但使用这个参数的先决条件是agent必须提交session ID，这个不是行业标准，所以agent请求中基本没有会话ID或位置名称不兼容，通过网关可以解决这个问题，经过初步测试，多轮长任务时基本不会all prefill了，任务执行效率提升很大。</p>
</li>
<li>
<p dir="auto">解决问题二：MCP工具多时初始提示词大是因为agent把所有注册的MCP工具都加载到了初始提示词，网关的作用是通过三层工具暴露策略在不损失 MCP 工具能力的前提下，减少 Agent 初始上下文中的工具定义占用。比如我的Agent 初始上下文的 <strong>22k tokens</strong> 降至 <strong>&lt;5k tokens</strong>。</p>
</li>
</ul>
<h1>效果</h1>
<ul>
<li>使用默认radix缓存和开启会话radix缓存的metrics日志结果对比（deepseek分析，日志基于多轮长任务多工具的情况）<br />
<img src="https://upload.lcz.me/uploads/8cc87bc7-56f2-4255-8eaa-bc3c6448fdd1.jpeg" alt="0ee8211f-1426-41f4-80f3-18c4ec84dfbe-image.jpeg" class=" img-fluid img-markdown" /></li>
<li>MCP工具提示词长度缩减效果（clade code）
<ul>
<li>前<br />
<img src="https://upload.lcz.me/uploads/e46e1423-1266-46d0-94db-b14feb2d6e67.jpeg" alt="ae7d49b8-18c9-43df-818a-4005d40d1f3c-image.jpeg" class=" img-fluid img-markdown" /></li>
<li>后<br />
<img src="https://upload.lcz.me/uploads/ed557b40-2deb-44de-9cf7-2481f3911604.jpeg" alt="432f1d5e-d4f6-4f7a-9d4d-4bb7aacd3ca5-image.jpeg" class=" img-fluid img-markdown" /></li>
</ul>
</li>
</ul>
<h1>软硬件环境</h1>
<ul>
<li>GPU: RTX3080 20G*2</li>
<li>系统：Ubuntu22.04</li>
<li>框架：SGLang v0.5.17</li>
<li>模型：Qwen3.6-27b-INT</li>
<li>Agent：Claude Code</li>
<li>MCP server: searXNG、playwright、GitHub、fetch-mcp、hindsight</li>
</ul>
<h1>说明</h1>
<ul>
<li>开启<strong>会话级radix缓存</strong>需要<strong>SGLang版本v0.5.17</strong></li>
<li>开启参数:
<ul>
<li>--enable-session-radix-cache</li>
<li>SGLANG_ENABLE_UNIFIED_RADIX_TREE=1 （Qwen系列可以不用这个参数，自动开启，其它模型需要根据模型类型来判断）</li>
</ul>
</li>
<li>目前网关先按照我的环境写的，其他的需要一定的适配，比如CC的请求中是有session ID，只是位置和名称与SGLang的要求不兼容。</li>
<li>后面应该会先做Hermes的适配。</li>
</ul>
<p dir="auto">如果有兄弟跟我有一样的情况，到时可以到GitHub上自取。</p>
]]></description><link>https://lcz.me/topic/1082</link><generator>RSS for Node</generator><lastBuildDate>Thu, 10 Sep 2026 02:36:02 GMT</lastBuildDate><atom:link href="https://lcz.me/topic/1082.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 11 Aug 2026 11:11:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 关于SGLang长任务kv缓存prefill优化以及agent初始prompt长度优化 on Wed, 12 Aug 2026 08:52:27 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/terry" aria-label="Profile: terry">@<bdi>terry</bdi></a> 确实，比起VLLM和llama.cpp，SGLang因架构原因kv缓存毋庸置疑的强很多，使用起来感觉还好我想应该是因为你的GPU prefill能力强很多，没有3080这么明显的原因，另外刚从llama.cpp切换到SGLang时，本身会感觉快了不少了。我完善了帖子的内容，希望能给论坛带来信誉提升。</p>
]]></description><link>https://lcz.me/post/11963</link><guid isPermaLink="true">https://lcz.me/post/11963</guid><dc:creator><![CDATA[neo]]></dc:creator><pubDate>Wed, 12 Aug 2026 08:52:27 GMT</pubDate></item><item><title><![CDATA[Reply to 关于SGLang长任务kv缓存prefill优化以及agent初始prompt长度优化 on Tue, 11 Aug 2026 11:34:39 GMT]]></title><description><![CDATA[<p dir="auto">很好的分享，可以分享到github，但是你的这个观察和我的体验不符合。我没研究参数，是hermes配置的，我是直接拿来干活的，测试了一天，就是实际效果它远远快于VLLM， Llama.cpp，反应不能说很敏捷，无法和在线AI比，但是比起那两货可以说是突飞猛进。和在线的差距有，不过可以接受。</p>
<p dir="auto">另外建议你丰富下你的使用场景，硬件配置，模型权重，软件环境，参数等，这样大家好讨论。有截图和设备实拍更好，方便论坛提升信誉，论坛已经被丢入了谷歌的垃圾箱。</p>
]]></description><link>https://lcz.me/post/11890</link><guid isPermaLink="true">https://lcz.me/post/11890</guid><dc:creator><![CDATA[terry]]></dc:creator><pubDate>Tue, 11 Aug 2026 11:34:39 GMT</pubDate></item></channel></rss>