vLLM prefix caching怎样减少重复提示词延迟
vLLM prefix caching 要减少重复提示词延迟,需要同时满足两个条件:引擎启用了 Automatic Prefix Caching(APC),后续请求又拥有与已有请求一致、仍可复用的输入前缀。把固定规则和共享文档稳定地放在前面,把每次变化的问题放在后面,通常比单纯打开开关更值得先做。它节省的是重复输入的预填充计算,不是直接重用上一份答案。
官方地址:https://docs.vllm.ai/en/latest/features/automatic_prefix_caching/
设想一个设备手册问答服务:同一份手册被反复询问“怎样更换滤芯”“指示灯表示什么”。每次都把整份手册作为输入,用户往往关心回答开始出现之前的等待。下面围绕这类请求设计接入方式,不提供未经测量的加速倍数,示例也未在本文执行。
确认请求是否有可复用的共同前缀
先区分“内容相似”和“前缀一致”。两个问题主题相近,并不代表输入开头一致;同一份手册放在随机请求标识后面,也不等于形成很长的共同前缀。应检查最终送入模型的消息模板、角色顺序、固定文本以及文档内容,找到差异从哪里开始。
适合优先尝试的,是长文档被重复提问、稳定系统提示词服务大量请求,或者聊天历史逐轮追加的场景。若每次输入都不同,或者绝大部分时间用于生成很长的回答,APC能改善的部分就可能有限。先问“延迟主要花在哪里”,再判断是否值得围绕缓存调整请求组织。
以设备手册为例,可以为文档选择一个稳定版本,并保持同一版本的文本规范化方式一致。不要在请求前端反复改变章节排序、插入不同的页眉或附加随机空白。这里的建议是减少无意义的输入差异,不是为了命中而删掉用户问题或必要的业务信息。
把稳定内容放在真正的共同前缀里
一种清楚的组织方式是:固定回答规则、同一版手册、当次问题。若业务确实需要时间、工单号或追踪标识,优先判断它们是否必须进入模型上下文;仅用于日志关联的标识可以留在应用日志中。确实影响回答的信息必须保留,也不能为了缓存效果违反消息角色和指令层级。
# 固定部分在不同问题之间保持一致;示例只构造文本,不发起推理 rules = "依据下面的设备手册回答。资料没有说明时明确指出。\n" manual = "设备手册正文:这里替换为应用持有的同一版完整手册。\n" questions = ["怎样更换滤芯?", "指示灯闪烁表示什么?"] # 将差异问题置于共同前缀之后,避免前端追踪标识打断前缀 prompts = [rules + manual + "\n用户问题:" + q for q in questions]

聊天接口还会把消息转换成模型使用的聊天模板。因此,只比较业务日志中一个文本字段可能不够。应把模板版本与分词器配置纳入接入记录,在模板升级后重新观察实际请求表现。不同模板生成的token序列可能不同,不能只看界面中展示的文字是否相同。
显式启用并固定模型配置
在线服务可使用引擎参数 --enable-prefix-caching 显式启用。下面的目录是部署者需要替换的模型目录,不是可直接下载的模型名称;硬件、依赖以及模型支持情况需符合自己的部署环境。
# 将模型目录替换为已经准备好且与环境兼容的模型 vllm serve /models/your-supported-model --enable-prefix-caching
离线接口可以在创建引擎时传入 enable_prefix_caching=True。如果已有服务配置显式设置过关闭,应在实际启动入口处统一配置,避免只改了一份没有被读取的文件。不同版本的默认行为不应靠旧文章推断,记录本次使用的版本及最终生效参数更便于比较。
第一次接入建议只改变缓存开关,先固定模型、并行设置、输入模板与输出长度。一次同时改变模型精度、并发、调度参数和缓存开关,即便响应变快,也很难说明收益来自哪里。示例命令只是配置表达,不意味着任何机器都能直接装载该模型。
分清KV复用与答案复用
APC缓存的是符合前缀条件的KV计算结果。后续问题仍然要参与推理,生成结果也仍由本次输入和生成参数决定。它与“按完整问题查一份已存好的最终回复”属于不同层次,应用不应把前缀命中当成回答已经完成。
官方设计采用基于哈希的缓存标识:当前块内容、此前块的关联信息以及必要的额外标识共同决定可复用对象。因此,同一段文本出现在不同前文后面,不应被当作一个与上下文无关的任意段落缓存。LoRA、多模态等输入也存在额外区分因素。

实际可复用范围还受缓存匹配粒度和模型结构影响,不保证文本中每一个共同字符都对应可跳过的计算。接入阶段先让稳定前缀自然变长,再根据对应版本和模型文档研究细粒度参数,不必先为一个短提示词设计复杂的块边界填充。
用冷暖对照观察首字延迟
为设备手册场景准备三组请求:共享同一手册但问题不同的一组、输入长度接近但开头不同的一组,以及第一次处理该前缀的请求。保持输出长度限制与并发条件一致,分别记录首个输出token到达时间、整体耗时和输出token数。
| 请求组 | 用途 | 主要观察 |
|---|---|---|
| 首次出现的前缀 | 了解尚未复用时的表现 | 输入处理及首字等待 |
| 相同前缀与不同问题 | 观察重复前缀的收益 | 首字延迟与命中相关指标 |
| 相近长度的不同前缀 | 排除只因输入变短而加快 | 未共享前缀时的差异 |
不要只拿第一次和第二次完整响应时间做结论。首次模型运行还可能包含其他预热成本,排队压力和输出长度也会改变总耗时。比较时重复采样并保持负载条件一致,注明数据来自冷缓存还是暖缓存。本文没有实际测量,因此不列出速度数字。
如果首字延迟改善明显、完整响应时间变化不大,先看输出长度及生成阶段占比。这与APC主要节省预填充工作的定位并不矛盾。若首字时间也没有改善,再从前缀是否一致、请求是否落到具有对应缓存的实例,以及缓存是否仍可用等方面分析。
处理命中不足与部署限制
常见的应用侧问题包括:每次在最前面加入新时间戳、对共享文档随机拼接段落、模板不一致,或在多实例间随机分散同一组重复请求。先消除这些结构差异,再讨论更复杂的缓存部署。路由优化应同时考虑负载均衡,不应为命中让单个实例长期过载。
缓存复用也不是永久存储承诺。容量竞争、服务重启及部署变化都可能让后续请求重新计算。系统设计应允许未命中时正常工作,把命中作为性能收益,而不是保证请求正确性的前提。
为什么一样的手册没有带来明显加速?
检查手册之前是否出现变化内容,再看最终模板与实际token前缀。同时区分首字等待与整段回答耗时,避免把长输出的生成成本归因于前缀没有复用。
可以直接用APC代替业务答案缓存吗?
不能按同一个接口语义使用。答案缓存处理完整回复的复用与失效,APC处理模型内部的重复前缀计算,两者需要各自的使用条件。
是否要修改所有提示词来追求命中?
优先稳定本来就相同的规则和材料。会改变语义、权限或回答质量的信息不应为命中而删改,缓存收益应服从业务正确性。
官方资料:https://docs.vllm.ai/en/latest/configuration/engine_args/;https://docs.vllm.ai/en/latest/design/prefix_caching/。
MCP 多轮往返请求怎样让工具调用继续执行
- 上一篇
- MCP 多轮往返请求怎样让工具调用继续执行
- 下一篇
- Transformers Trainer怎样保留自定义字段传入模型
-
- 科技周边 · 人工智能 | 55分钟前 | 性能优化 · 人工智能 · 深度学习 · PyTorch CUDA SDPA scaled_dot_product_attention Flash Attention
- PyTorch scaled dot product attention怎样选择高效注意力后端
- 214浏览 收藏
-
- 科技周边 · 人工智能 | 56分钟前 | 性能优化 · python · ONNX Runtime InferenceSession SessionOptions 图优化 Execution Provider
- ONNX Runtime怎样为推理启用图优化
- 281浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 |
- OpenTelemetry GenAI怎样记录模型调用 token 属性
- 414浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 | 向量数据库 · RAG 向量检索 LlamaIndex metadata filters
- LlamaIndex metadata filters怎样按元数据筛选检索节点
- 157浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 |
- MLflow prompt registry怎样给提示词版本做回滚管理
- 234浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 |
- LangChain structured output怎样把工具结果映射到数据模型
- 135浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 |
- Ollama embeddings怎样为本地文档生成向量
- 230浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 |
- Transformers Trainer怎样保留自定义字段传入模型
- 344浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 |
- MCP 多轮往返请求怎样让工具调用继续执行
- 458浏览 收藏
-
- 科技周边 · 人工智能 | 2小时前 |
- Gemini API context caching怎样复用长文档上下文
- 394浏览 收藏
-
- 科技周边 · 人工智能 | 2小时前 | python · 人工智能 · gemini · 结构化输出 · Pydantic JSON Schema Gemini API google-genai structured output
- Gemini API structured output怎样约束返回 JSON Schema
- 136浏览 收藏
-
- 科技周边 · 人工智能 | 1天前 | python · 异步任务 · gemini · 批处理 · JSONL Batch API Gemini API 离线生成 google-genai
- Gemini API Batch 怎样处理大量离线生成请求
- 486浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 880次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 877次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 960次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 941次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 768次使用
-
- 量化模型本地推理的显存估算方法
- 2026-10-17 501浏览
-
- 本地大模型反复输出同一句话怎么调整生成参数
- 2026-09-06 501浏览
-
- Python 调用大模型时如何用结构化输出校验 JSON:从解析失败到可重试
- 2026-08-29 501浏览
-
- AI写作工具免费版安装教程(含豆包Clawdbot)
- 2026-05-30 501浏览
-
- WPS AI能自动生成PPT吗?输入主题一键制作演示文稿
- 2026-05-27 501浏览

