| Q84 | Why is context important in prompt design
1️⃣ 考察意图
面试官想看你是否真正理解“上下文”在 prompt 设计中的核心作用,而不仅仅是背概念。考察类型是工程取舍:你需要解释上下文如何影响模型输出质量,并权衡信息量与模型能力(如注意力衰减、窗口限制)。刁钻点在于:很多人只会说“上下文很重要”,但说不出具体设计原则(如优先级排序、噪声控制)或实际坑(如长上下文导致幻觉)。答好了能展示你对 LLM 工作记忆(attention 机制)的深刻理解,以及系统化设计 prompt 的硬实力。
2️⃣ 标准答
上下文在 prompt 设计中是模型输出的“锚点”,它提供背景、示例和约束,让 LLM 从泛化生成转向精准执行。核心原因有三:消除歧义、引导格式、注入知识。但设计不当会适得其反,以下是关键原则和实战细节。
- 上下文定义与作用上下文包括任务描述、示例(few-shot)、外部知识(如 RAG 中的文档片段)或约束(如输出格式)。例如,在问答系统中,提供相关文档片段(如“根据以下文本:... 回答:”)能将准确率从 30% 提升到 80%+(基于通用知识)。缺乏上下文时,模型依赖训练数据中的统计模式,输出泛化且不可控。
- 关键设计原则
- 优先级排序:模型对 prompt 开头和结尾的注意力更强(注意力衰减现象),所以关键上下文(如任务指令、核心事实)应放在开头或结尾。例如,在长文档问答中,将问题放在 prompt 末尾,文档摘要放在开头。
- 分隔符区分:使用
###、---或 XML 标签(如<context>)明确分隔上下文与指令,避免模型混淆。例如:<context>文档内容</context> 基于以上,回答:。 - 长度控制:上下文过长会稀释注意力,导致模型忽略关键信息。实际落地的坑:在 4K token 窗口内塞入 3.5K 文档,模型可能只关注前 500 token 的噪声。解法:使用滑动窗口(如每 1K token 分块,分别生成答案后投票)或摘要压缩(用 LLM 将文档压缩为 200 字摘要)。
- 噪声过滤:无关上下文会引入幻觉。例如,在代码生成中,提供函数签名(
def foo(x: int) -> str:)比提供整个代码库更有效。实战中,用 BM25 或 embedding 相似度(如 Cohere rerank)筛选 top-3 相关片段。 - 工程取舍
- 上下文 vs 窗口限制:长上下文(如 128K token)虽能覆盖更多信息,但模型在中间段的注意力衰减严重(实验显示,GPT-4 在 64K token 后准确率下降 20%)。取舍:优先提供高信息密度的上下文(如关键句提取),而非完整文档。
- 静态 vs 动态上下文:静态上下文(固定 few-shot 示例)简单但可能不匹配输入;动态上下文(如 RAG 检索)更精准但增加延迟。解法:混合策略——用静态示例保证格式,用动态检索补充知识。
- 实际落地的坑 + 解法
- 坑:在客服系统中,提供过多历史对话(>10 轮)导致模型重复用户错误信息。
- 解法:只保留最近 3 轮对话,并用摘要压缩历史(如“用户之前抱怨过发货延迟”)。
- 坑:在文档问答中,上下文包含矛盾信息(如文档 A 说“价格 100 元”,文档 B 说“价格 200 元”),模型输出混乱。
- 解法:在 prompt 中加指令“如果上下文矛盾,请指出并优先采用最新来源”,或使用置信度阈值过滤低分片段。
3️⃣ 答题模板(30 秒电梯版)
“这个问题我从三个层面回答:第一,上下文消除歧义并注入知识,比如在 RAG 中提供文档片段能提升准确率 50%+;第二,设计时需权衡长度与注意力衰减,关键信息放开头或结尾,用分隔符区分;第三,实际落地要过滤噪声,比如用 BM25 筛选 top-3 片段。总结一句:上下文是 prompt 的骨架,设计核心是优先级排序和噪声控制。”
4️⃣ 高频追问 & 应对
追问 1:如果上下文太长,模型忽略中间信息怎么办?
这是注意力衰减的典型问题。解法:1)位置优化:将关键信息(如任务指令)放在 prompt 开头,问题放在末尾,中间放次要上下文。2)分块策略:将长上下文切分为 1K token 块,每块独立生成答案,再用投票或 rerank 合并。3)摘要压缩:用 LLM 将上下文压缩为 200 字摘要,保留核心事实。例如,在 128K 文档问答中,先用 GPT-4 生成每 4K 块的摘要,再基于摘要回答,F1 分数提升 15%。
追问 2:上下文中的噪声如何影响输出?怎么量化?
噪声会引入幻觉或偏离主题。量化方法:在测试集上,对比有噪声(如加入 20% 无关文本)和无噪声的准确率下降幅度。例如,在 SQuAD 上,加入 500 字噪声后 F1 下降 10%。解法:1)相关性过滤:用 embedding 相似度(如 text-embedding-3-small)或 BM25 筛选 top-k 片段,阈值设为 0.7。2)指令约束:在 prompt 中加“只基于提供的上下文回答,忽略无关信息”。
追问 3:few-shot 示例的上下文如何选择?数量多少合适?
示例选择:用 k-NN 检索与输入最相似的示例(如基于 embedding 距离),而非随机选。数量:通常 3-5 个示例最佳,过多(>10)会稀释注意力且增加 token 成本。取舍:示例质量比数量重要——1 个高质量示例(覆盖边缘 case)比 5 个普通示例更有效。例如,在分类任务中,用 3 个难例(如边界样本)比 5 个简单例准确率高 8%。
5️⃣ 避坑 · 常见错误答法
- ❌ “上下文越多越好,模型能自动提取关键信息。” → ✅ “上下文过长会导致注意力衰减和噪声引入,需优先级排序和分块策略,比如只保留 top-3 相关片段。”
- ❌ “上下文设计就是提供背景信息,没有具体方法。” → ✅ “上下文设计需用分隔符(如 XML 标签)、长度控制(如 1K token 分块)、噪声过滤(如 BM25 筛选),并考虑位置优化(关键信息放开头)。”
6️⃣ 简历呼应
- 如果你有 RAG 项目:从上下文检索和筛选切入,强调你用 BM25 + embedding 双路召回,并设计 prompt 指令(如“只基于检索片段回答”)来减少幻觉,F1 提升 12%。
- 如果你只做过传统 NLP:用信息检索类比,比如上下文就像查询扩展中的相关反馈,设计原则类似 TF-IDF 的权重排序,关键信息放开头对应 BM25 的 IDF 权重。
- 如果你是校招无项目:聚焦论文复现,比如复现“Lost in the Middle”实验(Liu et al., 2023),展示你理解注意力衰减对上下文位置的影响,并设计滑动窗口策略优化。
- “Lost in the Middle: How Language Models Use Long Contexts” (Liu et al., 2023)
- “RAG: Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks” (Lewis et al., 2020)
- “Prompt Engineering Guide” (DAIR.AI) - 上下文设计章节
- “BM25: The Next Generation of Text Retrieval” (Robertson & Zaragoza, 2009)
- “Cohere Rerank” 官方文档 - 上下文噪声过滤实践