我将一份40页的PDF扔给ChatGPT,它瞬间回复了。我们来揭秘是怎么做到的。

Reddit r/artificial 新闻

摘要

详细解析了为什么向ChatGPT上传大型PDF不会显著减慢响应时间,涉及流式传输、KV缓存和并行预填充阶段等技术。

好吧,这个问题困扰了我一段时间,我想真正理解它,而不是把它当作魔法接受。当你向ChatGPT输入一个普通问题时,它感觉几乎是即时的,这可以理解。但让我困惑的是,当你上传一份像40页的PDF并开始提问时——它的回复速度几乎和纯文本问题一样快。直觉上,难道说“阅读”所有额外文本不应该花费更长时间,然后才开始回答吗?所以,我们来看看实际上发生了什么,基于我的理解(如果我错了请纠正,我是真心想学习): 问题明确来说:逐个token生成文本本质上是顺序的——每个新词都依赖于之前的所有词。这部分天生就慢。但输入一个巨大的文档似乎也应该很慢。那么,为什么一个大文档没有像你预期的那样拖慢响应时间呢? 第一部分——为什么纯文本感觉很快: 流式传输:模型不会等完全生成答案后再显示给你。生成的token会逐个流式输出,所以即使完整回复需要几秒钟,感觉也是即时的。这是经典的感知延迟技巧。 KV缓存:一旦模型处理了一段文本,它不会为每个新token重复该计算——它会缓存注意力状态,因此只会为新token进行新的计算。 量化:以较低精度运行模型(如8位而非32位)意味着原始数学运算更快,但会损失一些精度。 推测解码:显然有些设置使用一个较小的“草稿”模型来猜测几个后续token,然后大模型只需验证它们,而不是逐个生成。如果属实,这是一个可观的加速。 当然还有原始基础设施——定制硬件、将多个用户的请求批处理在一起,使GPU在用户之间不会闲置。 第二部分——为什么文档似乎不会按比例拖慢速度: 这部分我最不确定,所以请真正研究过推理引擎的人来指正——但据我所知,“阅读”输入(预填充阶段)比生成输出更易于并行化。输入token可以通过矩阵乘法一起处理,而输出token必须逐个进行。因此,较大的输入文档不会像较长的回复那样按比例增加等待时间。 此外,对于大型文档,可能还有检索/分块处理在幕后进行——而不是每次都将文档的每个token暴力输入模型,相关的块可能会被拉取并缓存,这样对同一文档的重复提问就不会重复执行昂贵的部分。如果跨轮次缓存起作用,这也能解释为什么关于同一文档的后续问题感觉很快——昂贵的首轮处理可能只发生一次。 说实话,我不确定这些对ChatGPT本身有多准确,因为OpenAI不发布他们确切的推理堆栈,所以很多是基于一般LLM服务技术(如vLLM、TensorRT-LLM)的有根据的猜测。希望真正从事服务基础设施或阅读过相关论文的人能够纠正或补充。 开放讨论问题: 文档速度在多大程度上是实际架构(高效预填充) vs 产品级技巧(分块/RAG) vs 纯基础设施规模? 有人知道推测解码是否已确认在生产环境中使用,还是主要仍处于研究/本地推理领域? 有没有好的技术文章或论文,详细分析了此类实际服务的优化方法?
查看原文

相似文章

在ChatGPT中处理文件

OpenAI Blog

# 在ChatGPT中处理文件 来源:[https://openai.com/academy/working-with-files/](https://openai.com/academy/working-with-files/) 2026年4月10日 OpenAI Academy 上传并处理文件,以分析、编辑和生成内容。ChatGPT允许您直接在对话中上传和处理文件。这意味着您无需离开聊天窗口即可分析电子表格、编辑文档、总结PDF或处理图像。1. 开始与ChatGPT对话。2. 通过打开方式上传文件

扩展PostgreSQL以支持8亿ChatGPT用户

OpenAI Blog

OpenAI分享了扩展PostgreSQL以支持8亿ChatGPT用户及每秒数百万查询的技术见解,采用了单主架构搭配50个只读副本,同时通过分片和优化策略管理写入密集型工作负载带来的挑战。