先这样答
上下文长度和知识切片长度不是同一个维度。上下文长度是模型一次能接收的总 token 上限。知识切片长度是单个 chunk 的 token 数,也就是一个检索单元的大小。
上下文长度要把历史消息、系统提示词、检索内容和生成预留一起算进去。它描述模型这一次能处理的总预算,不代表这些 token 都能用于放知识。知识切片长度只描述单个切片有多长。检索时,系统会把若干切片放进上下文,再交给模型处理。
两者的关系是,召回的 chunk 长度乘以召回数量,再加上历史、系统提示词和生成预留,必须小于上下文预算。比如上下文标称为 128K,也不能把 128K 的知识直接塞满。还要给其他内容和生成留下空间。实际有效注意力也远小于标称长度,所以不能只看上下文的最大数字,还要看每次真正放入的内容规模。
面试官会怎么追问
-
「上下文长度是不是知识库能放进去的最大长度?」 不是。上下文长度限制模型一次处理的总 token 数,知识库内容还要先切成 chunk,再按召回结果放入上下文。历史、系统提示词和生成预留也会占用这部分预算。
-
「如果模型支持 128K 上下文,知识切片是不是也应该设成 128K?」 不是。知识切片是单个检索单元,通常需要配合召回数量使用。单个 chunk 过长,会直接占用大量上下文预算,也会压缩其他内容和生成空间。
-
「你会怎么检查召回内容是否超出上下文预算?」 先计算每个 chunk 的 token 数,再乘以召回数量。然后加上历史消息、系统提示词和生成预留,确认总量小于上下文预算。还要考虑实际有效注意力小于标称长度,不能只按最大上限硬塞。
回答的坑
- 把上下文长度当成知识容量,忽略历史、提示词和生成预留也占用 token。
- 把单个知识切片直接做成上下文上限,忽略切片数量和实际有效注意力。
同系列的题
—— 本题完 ——