Shopify 用 Gisting 压缩 Agent 提示词,吞吐量提升 16%
Shopify 通过 Gisting 技术将 LLM Agent 系统提示词压缩 4 倍,TTFT 下降 19%、E2E…
Shopify 工程团队近日发布技术博客,详细介绍其如何通过 "Gisting" 技术将 LLM Agent 的系统提示词从约 6,000 tokens 压缩到 1,500 gist tokens(4:1 压缩比),并在实际生产负载中将 GPU 用量减少 14%,同时显著降低延迟、提升吞吐量。该技术最早源于论文《Prompt Compression and Contrastive Conditioning for Controllability and Toxicity Reduction in Language Models》。
核心效果:4:1 压缩带来显著性能提升
Shopify 在自家 Sidekick GraphQL Agent 上落地了 Gisting。其核心思路是通过知识蒸馏学习一组特殊 token 的 embedding,在推理时将其替换为原始长 prompt,使模型仅看到短上下文也能保持与长 prompt 一致的行为。
在 350 RPM(每分钟请求数)的负载下,gisted 模型相比原始 prompt 模型获得如下收益:
- TTFT(首个 token 时间)中位数从 438ms 降至 354ms,下降约 19%
- E2E(端到端)请求延迟中位数从 6.8s 降至 4.2s,下降约 38%
- 吞吐量从 20.2 QPS 提升至 23.4 QPS,提升约 16%
- 生产环境下 GPU 数量减少 14%
Gisting 的实现原理
Gist token 是添加到模型词表中的一组特殊 token。训练过程冻结模型原始权重,仅学习 gist embedding 序列,使得用 gist tokens 替换完整 prompt 后模型行为与看到完整 prompt 时一致。在 4:1 压缩比下,每 4 个 prompt tokens 对应 1 个 gist token。
训练采用知识蒸馏:对同一条轨迹运行两次前向传播——教师前向传入完整自然语言 prompt 得到 teacher logits,学生前向传入 gist tokens 得到 student logits,通过两者之间的 KL 散度训练 gist embedding,直到学生预测与教师预测高度一致。
部署非常简单:训练完成后将 gist embedding 写入模型 embedding 矩阵,并把 gist tokens 注册为 tokenizer 的特殊 token。推理时无需自定义 attention mask、额外 encoder 或特殊服务路径,只需在请求侧把 prompt 替换为 gist tokens 字符串即可。压缩的全部成本在训练阶段一次性支付。
为什么 Prefix Cache 还不够
现代推理引擎普遍使用 KV cache 做 prefix caching:当新请求包含已缓存序列(如系统提示词)时直接复用 KV 张量,避免重复计算。但 prefix caching 并不消除 decode 成本——模型每生成一个 token 都要 attend 整个 KV cache,缓存长度增加会让读取开销线性增长,且 decode 受限于显存带宽。Gisting 同时降低了 attention 计算量和 KV cache 读取成本,批量越大对吞吐量的提升越明显。Shopify 在实验和生产服务栈中同时使用 Gisting 与 prefix caching,两种优化效果可叠加。
Autoresearch 自动找到最优配方
Shopify 用 autoresearch 循环自动调参,由其提出配方→训练 gist embedding→评估模型→重复迭代。三项优化被证实影响最大:
- 初始化:放弃随机噪声初始化 embedding,而是将 prompt 按 k 长度分块,用第 n 个 prompt chunk 的均值初始化第 n 个 gist embedding,使初始损失降低 7 倍
- 压缩比:实验发现 4:1 是该领域最佳比例,超过该比例预测质量开始下降
- 数据多样性与数量:构建大规模多样化训练集填补剩余质量差距
此外,团队还改进了训练基础设施:loss 按 batch 维度归一化(而非按 response token),避免模型幻觉;预计算 teacher logits 并预分词数据,使单次完整训练从 30 小时缩短到 6 小时。
