输入到大型语言模型 (LLM) 中的检索上下文的长度直接影响其性能以及忽略部分输入的可能性。当上下文太短时,模型缺乏足够的信息来生成准确或相关的响应。相反,过长的上下文会超出模型的处理能力,导致它优先考虑某些部分而忽略其他部分。大多数 LLM 都有固定的令牌限制(例如,GPT-3.5 为 4K 令牌,Claude 为 100K 令牌),即使在这些限制范围内,注意力机制(确定关注输入哪些部分的算法)也可能难以平等地衡量所有信息。这通常会导致“迷失在中间”效应,即上下文开头或结尾的细节受到不成比例的关注,而中间的关键信息则被忽略。
例如,假设一名开发人员查询 LLM 以调试代码片段。如果上下文包含 10 页日志,则模型可能会专注于第一个错误消息,而忽略稍后更关键的异常。同样,在问答任务中,如果用户提供一个 5,000 字的文档作为上下文,则模型可能会根据介绍和结论进行回答,而忽略正文中的关键证据。LLM 处理序列的方式加剧了这个问题:注意力权重(决定焦点)会随着距离的增加而衰减,从而更难连接输入的早期和晚期部分。例如,与较短、重点突出的提示相比,GPT-4 改进的上下文窗口(32K 令牌)仍然难以在极长的输入中保持连贯性。开发人员在总结多页文档时经常会遇到这种情况——输出可能会省略隐藏在中间的核心论点。
为了减轻这些风险,开发人员可以优化上下文长度和结构。一种方法是通过截断或总结不相关的部分来预处理输入。例如,使用检索增强系统仅获取最相关的段落(例如,通过向量相似性搜索)可确保模型接收到简洁、有针对性的数据。另一种策略是将长上下文分成块,分别处理每个块,然后聚合结果——但这需要仔细处理以保持连续性。像 LangChain 的“map-reduce”模式或 Claude 的文档层级结构功能等工具可以帮助管理这一点。此外,显式突出显示关键部分(例如,使用类似“