关于SGLang长任务kv缓存prefill优化以及agent初始prompt长度优化
-
问题
用了一段时间SGLang了,发现一些问题:
-
问题一:当agent执行多轮长任务多工具时,全部prefill的次数并不低(如果只多轮聊天不会有这种情况)。
-
问题二:在agent中加入的MCP工具越多,初始提示词越大,我的单MCP就占了20+k。
所以写了个agent网关来解决这两个问题:
解决
-
在agent和SGLang之间添加agent网关来解决。
-
解决问题一:通过SGLang开启会话级radix缓存来提高kv缓存命中,但使用这个参数的先决条件是agent必须提交session ID,这个不是行业标准,所以agent请求中基本没有会话ID或位置名称不兼容,通过网关可以解决这个问题,经过初步测试,多轮长任务时基本不会all prefill了,任务执行效率提升很大。
-
解决问题二:MCP工具多时初始提示词大是因为agent把所有注册的MCP工具都加载到了初始提示词,网关的作用是通过三层工具暴露策略在不损失 MCP 工具能力的前提下,减少 Agent 初始上下文中的工具定义占用。比如我的Agent 初始上下文的 22k tokens 降至 <5k tokens。
效果
- 使用默认radix缓存和开启会话radix缓存的metrics日志结果对比(deepseek分析,日志基于多轮长任务多工具的情况)

- MCP工具提示词长度缩减效果(clade code)
- 前

- 后

- 前
软硬件环境
- GPU: RTX3080 20G*2
- 系统:Ubuntu22.04
- 框架:SGLang v0.5.17
- 模型:Qwen3.6-27b-INT
- Agent:Claude Code
- MCP server: searXNG、playwright、GitHub、fetch-mcp、hindsight
说明
- 开启会话级radix缓存需要SGLang版本v0.5.17
- 开启参数:
- --enable-session-radix-cache
- SGLANG_ENABLE_UNIFIED_RADIX_TREE=1 (Qwen系列可以不用这个参数,自动开启,其它模型需要根据模型类型来判断)
- 目前网关先按照我的环境写的,其他的需要一定的适配,比如CC的请求中是有session ID,只是位置和名称与SGLang的要求不兼容。
- 后面应该会先做Hermes的适配。
如果有兄弟跟我有一样的情况,到时可以到GitHub上自取。
-
-
很好的分享,可以分享到github,但是你的这个观察和我的体验不符合。我没研究参数,是hermes配置的,我是直接拿来干活的,测试了一天,就是实际效果它远远快于VLLM, Llama.cpp,反应不能说很敏捷,无法和在线AI比,但是比起那两货可以说是突飞猛进。和在线的差距有,不过可以接受。
另外建议你丰富下你的使用场景,硬件配置,模型权重,软件环境,参数等,这样大家好讨论。有截图和设备实拍更好,方便论坛提升信誉,论坛已经被丢入了谷歌的垃圾箱。
-
,
T terry 固定了此主题
-
,系统 取消固定了此主题