Needle In A Haystack (NIAH)
大海捞针 (NIAH) 用于测试 LLM 能否在长上下文的任意位置找到一条隐藏事实。内容涵盖其起源、结果、变体和局限。
大海捞针(NIAH)是一种评估方法:它会在一段很长且无关的文本(即“大海”)中选定一个深度,藏入一条事实(即“针”),然后要求大型语言模型(LLM)找出这条事实。在不同上下文长度和针的位置上重复测试,就能生成热力图,显示模型在上下文窗口的哪些位置会找不到信息。Greg Kamradt 于 2023 年 11 月通过一个开源 NIAH 代码库介绍了这项测试:他将句子“The best thing to do in San Francisco is eat a sandwich and sit in Dolores Park on a sunny day”藏进 Paul Graham 的一组随笔中,并询问每个模型在旧金山最值得做什么。最初的测试使用了 OpenAI 的 GPT-4 Turbo(具有 128K-词元窗口)和 Anthropic 的 Claude 2.1(具有 200K 窗口)。
测试原理#
先将“大海”裁剪到目标词元长度,再按该长度的某个比例插入“针”:位置从开头的 0% 到结尾的 100% 不等,随后根据“针”对模型的回答进行评分。完整测试会遍历以下两个维度:
“针”与周围的随笔毫无关系,因此这项测试能够单独考察注意力机制的一项能力:在长提示中的任意位置找到并复制特定段落。
主要结果#
Kamradt 最初的热力图显示,GPT-4 Turbo 在词元数超过约 73K 时会漏掉“针”,尤其是当“针”位于约 7% 到 50% 的深度时;这与同年 Lost in the Middle研究测出的提示中部薄弱问题类似。Claude 2.1 在原始提示上的得分为 27%;Anthropic 通过一项提示工程改动将得分提高到 98%:让 Claude 的回答以“Here is the most relevant sentence in the context:”开头。NIAH 后来成为模型发布时常见的图表。Google 的 Gemini 1.5 报告称,模型在至少 10 million 个词元范围内的检索率超过 99%,并将测试扩展到音频和视频“大海”;Anthropic 则报告称,Claude 3 Opus 的召回率超过 99%,有时还会指出“针”看起来像是人为插入文本的。
变体与局限#
普通 NIAH 与词汇搜索很接近,因为问题中的关键词与“针”重合,而前沿模型如今已在这项测试上达到饱和。更难的变体会改变“针”的要求:
- 口令检索:在重复的填充文本中隐藏一个随机数字;2023 年,人们在 NIAH 出现之前用它测试 Landmark Attention。
- 多针与聚合:NVIDIA 的 RULER 基准测试会隐藏多个键和值,并加入变量追踪和常见词聚合;测试发现,17 个声称支持 32K 或更长上下文的模型中,只有一半在 32K 长度下表现令人满意。
- 没有字面匹配:NoLiMa会对问题措辞,使其与“针”的词汇重合度极低。在 32K 词元长度下,13 个模型中有 11 个的得分低于各自在短上下文下得分的一半。
随着输入变长,这些更难的测试所揭示的准确率下降称为上下文腐化。NIAH 也不同于检索增强生成(RAG):RAG 会先通过外部向量搜索选取段落,再让模型读取;它也不同于异常检测,后者寻找未知偏差,而不是已知目标。
图像中的针#
计算机视觉也用这个说法指代小目标检测:例如航拍图像中的人、卫星图像中的船,或用于医学图像分析的全切片病理扫描中的肿瘤细胞。难点在于分辨率:Ultralytics YOLO26默认会将每张图像的最长边缩放到 640 像素,因此一张 4,000 像素的无人机画面会缩小六倍以上,一个 10 像素宽的行人最终会窄于 2 像素。使用 SAHI 进行切片推理会在原生分辨率下对重叠切片(例如 256 × 256 的图块)运行 YOLO26,并合并边界框。在 SAHI 论文对 VisDrone和 xView航拍数据集进行的测试中,切片使三种不同检测器的目标检测 AP 提高了 5.1% 到 6.8%。










