大海捞针测试(灵感来自NeedleInAHaystack)是指通过将关键信息随机插入一段长文本的不同位置,形成大语言模型(LLM) 的Prompt,通过测试大模型是否能从长文本中提取出关键信息,从而测试大模型的长文本信息提取能力的一种方法,可反映LLM长文本理解的基本能力。
为什么要做大海捞针——插针测试
- 以长上下文替代复杂的RAG检索策略,支持长上下文大模型以月之暗面和anthropic为代表。
- 了解大模型对召回的各类事实知识是否理解,以此合理设计应用。
- 召回的事实知识随着长度变化,对推理的影响,以此合理设计应用。
- 根据测试结果选择合适的大模型。
目前我们有一些基本共识
随着上下文长度的增加,检索性能会下降,尤其是在文档的前半部分插入的“针”更难被检索到。此外,推理任务的表现通常稍微落后于检索任务。
- 当文档的上下文长度从1,000个标记增加到120,000个标记时,模型检索位于文档前半部分的“针”的性能尤其会受到影响。这意味着,尽管LLMs在处理单个事实的检索时表现良好,但当需要同时检索多个事实,尤其是当这些事实分布在较长的上下文中时,它们的性能会显著降低。
- 随着检索任务的复杂性增加,推理任务的表现也会受到影响,因为推理能力在一定程度上依赖于成功的检索。这表明,在设计和使用LLMs进行复杂任务时,需要考虑到检索和推理的独立性和相互依赖性。
我们把话题从长上下文测试回归到问题本质讨论——大模型对引入的上下文是否理解
大海捞针测试作为专向测试十分有用,让我们理解大模型随着上下文长度增加产生记忆混乱的规律,然后规避掉这些问题。
上图是最简单的大模型引入上下文的逻辑,大家都看过,但实际应用往往没有这么简单。
其中Q和G节点,提示词指令往往带入了比大海捞针测试复杂多的提示词指令,来完成复杂的任务。
一个提示词指令例子:
rose:"扮演资深教师,理解并总结[text]上下文后向学生提问"
# 任务
提取[text]中可解答的专业术语;知识点;指导方案; 案例故事;计量描述,并转换为<提问句式>(提问前加'-'符号,每个提问换行)# 技能
## 技能1
根据[text]上下文联想出更多有学习价值的<提问句式>,归类到专业术语;知识点;指导方案; 案例故事;计量描述中
## 技能2
不明确的<提问句式>不进行抽取和归类
## 技能3
保持<提问句式>主谓宾完整性# 输出格式
"""
<|im_start|>
## 知识点提问:
- <提问句式>
...
## 指导建议提问:
- <提问句式>
...
## 案例故事提问:
- <提问句式>
...
## 计量描述提问:
- <提问句式>
...
<|end|>
"""
[text]=人体的结构决定,必须要以碳水化合物为能量来源。虽然我们也可以用蛋白质和脂肪作为能量,但是最简单、最清洁的能源还是碳水化合物。植物通过将阳光所传递的能量转化为碳、氧和氢等来制造出碳水化合物,根部吸收来的水分(HQ)提供了氢和氧,空气中的二氧化碳(CO2)提供碳和另一部分氧。人体摄入植物中主要含有的碳水化合物后,利用从空气中获取的氧气,将碳水化合物分解,就能释放出贮藏于其中的太阳能,给身体和大脑提供能量。当你食用全谷类、蔬菜、菜豆或者小扁豆等复杂碳水化合物,或者水果等简单碳水化合物时,身体就会完全按部就班地工作,消化这些食物,然后逐步释放出藏于其中的能量。不仅如此,这些完整的食物还能提供身体进行消化和新陈代谢所需的全部营养素。这些食物还含有一些可消化程度比较低的碳水化合物,即纤维类,它们可以帮助消化系统正常运转。就像猫喜欢蛋白质的味道一样,人天生就被甜味——碳水化合物的味道所吸引。对于人类的祖先来说,甜味对人的固有的吸引是个非常好的生理机制,因为在那时,自然界绝大多数甜的食物都是无毒的。对植物来说,这个机制也非常有效。植物把种子藏在它们的果实里,静静等待动物路过。当动物吃了它们的果实以后,会在离原植株比较远的地方将种子排泄出来,甚至在种子外面包裹上一个富含“有机肥”的肥料包!但现在,人类已经找到了如何提取甜味成分,并把甜味与其他成分分离开的方法,对于我们的营养供应系统来说,这可是个坏消息。所有形式的浓缩糖―白糖、红糖、麦芽糖、葡萄糖、蜂蜜和糖浆在体内释放能量的速度都很快,会引起血糖迅速升高。如果体内不需要这些能量,它们就会转化成脂肪贮藏在体内。与水果等天然食物不同,绝大多数的浓缩糖基本不含有任何维生素和矿物质,白糖中90%以上的维生素和矿物质都被去除了。没有维生素和矿物质,人体新陈代谢的效率就会降低,造成能量缺乏以及体重失控的恶劣后果。水果含有被叫做果糖的简单糖,和葡萄糖以及蔗糖一样,它不需要消化的过程,可以很快进入血液。但是与葡萄糖和蔗糖不同,果糖被归为缓慢释放能量的碳水化合物,这是因为果糖在体内需要先被转化为葡萄糖再参与代谢,这一过程有效地减小了对新陈代谢的影响。乳糖的情况也是一样,它由葡萄糖和半乳糖组成,葡萄糖释放能量的速度很快,但是半乳糖的释放速度比较慢。有些水果,如葡萄和椰枣,由于含有纯的葡萄糖,因此能量释放的速度很快。另外,苹果主要含有果糖,所以热量的释放速度比较慢。香蕉同时含有果糖和葡萄糖,所以会比较快地升高血糖水平。乳糖(牛奶里主要的糖分)、蔗糖(白糖)与麦芽糖(麦芽)。半乳糖和果糖(灰色框显示的)是慢速释放糖,而葡萄糖是快速释放糖.由于麦芽糖会被机体迅速消化为两个葡萄糖分子,因此释放能量的速度比乳糖和蔗糖都快。白面包、精白米和精制谷物等精制碳水化合物与精制糖有同样的影响结果。而燕麦由于更加“复杂”,所以,糖的释放是比较缓慢的。精制的加工过程或者烹饪过程,会把复杂碳水化合物降解为麦芽糖类的简单碳水化合物,这相当于对它们进行了预消化。当进食简单碳水化合物后,你的血糖水平会迅速升高,同时也为身体快速提供了能量。这种高峰后面会紧跟着出现一个低谷,因为身体需要匆忙恢复体内血糖的平衡。
平衡你的血糖
保持血糖平衡可能是你保持精力以及控制体重最重要的因素。你的血糖水平极大程度上决定着你的食欲。你的细胞需要血液中的葡萄糖提供能量。当血糖水平太高时,身体会把多余的葡萄糖转化为糖原(这是一种通常贮藏在肝脏和肌肉细胞中的短期能量物质)或者脂肪,也就是我们的长期能量贮备。当血糖水平太低时,我们会出现一系列的症状:疲乏、注意力降低、易怒、紧张、沮丧、出汗、头疼和消化系统问题。估计每10个人中就有3个人维持血糖平稳的功能受到损伤。他们的血糖可能会升得过高,随后也可能会降得过低。结果是,一些年以后,他们的体重会增加,而精力会减退。但是如果你能控制体内的血糖水平,你就可以维持稳定的体重和持久的精力。燕麦释放能量的速度比蔗糖慢.燕麦需要先消化为简单的葡萄糖再进入血液,这个过程需要一定时间。蔗耦的分子由葡萄糖和果糖组成,果糖会比较缓慢地转化为葡萄糖分子,而葡萄糖不需要消化就可以直接进入血液。所以燕麦释放能量的速度比蔗糖慢。糖尿病是一种血糖不平衡的极端表现形式。携带葡萄糖离开血液、进入细胞的激素是胰岛素,当身体不能形成足够的胰岛素时,血糖不平衡的情况就会出现。结果是血液中葡萄糖含量过高,但细胞得不到足够的葡萄糖。糖尿病早期的警告症状和轻微的血糖不平衡一样,单是通过调整膳食很少能改变这种状况。糖尿病的一个明显的患病迹象是持续性的口渴,因为身体希望通过喝水来稀释血液中过高的糖分。
糖耐量测试
回答下面的问题,在回答“是”的问题前打钩。如果你打钩的问题在4个或4个以上,那你的身体可能已经不能很好地维持体内的血糖平衡了。*起床后20分钟之内你是否很少是完全清醒的状态?*你早晨是否需要茶、咖啡、烟或者甜食提神?*你白天或者饭后有没有昏昏欲睡的感觉?*你是否黄昏时分就入睡了,或者白天需要小睡几次?*你是否因为感觉乏力而不进行任何锻炼?*如果你有6个小时没有进食,你是否会头晕或者急躁?*你现在的精力是不是没有以前好了?*你是否有盗汗的情况或者经常头疼?那是什么因素引起你血糖水平的不稳定呢?答案显而易见,就是吃了过多的糖和甜食。然而,很多对血糖水平会产生巨大影响的食物种类往往是你料想不到的。保持血糖平衡的最好办法是控制膳食的血糖负荷,我称其为“GL”。这是一种比控制碳水化合物百分比或者血糖指数更好的方法。简单地说,血糖指数(GI)是告诉你一种食物中的碳水化合物是快速释放能量的还是慢速释放能量的,它是一个质量指标,然而,它并不能告诉你这种食物里有多少碳水化合物。食物中碳水化合物的百分比,或者说是碳水化合物的重量,可以告诉你这种食物里有多少碳水化合物,却不能告诉你这种食物中的碳水化合物对你的血糖到底会产生什么样的影响,属于数量指标。食物的血糖负荷(GL)则是用质量指标乘以数量指标。当你选择某种食物时,GL会成为告诉你体重将增加多少的最佳指标。很多你认为有利于身体健康而大量摄入的食物,实际上GL值都很高,这非常令人惊讶吧!比如速食玉米片和玉米薄饼(玉米粉糊做成的一种薄而脆的食品)的GL值就非常高,而冰激凌和花生的GL值比较低。一枚椰枣和一小篮草莓引起的血糖反应是一样的。考虑碳水化合物的影响时,有两条基本原则:原则1:每天进食的食物的总GL值要小于50,如果你想减肥的话,控制在40以下(每一餐的GL为10,每次加餐零食的GL为5,每日2次)。意大利面引起的血糖反应.进食意大利面40分钟后,血糖水平达到最高值,身体释放胰国素来帮助葡萄糖离开血液进入细胞。2小时后血糖水平和胰园素水平都恢复正常.面包引起的血糖反应。进食面包40分钟后,皿糖水平几乎是进食意大利面后血糖峰值的2倍。身体释放出将近3倍的胰圈素来帮助恢复血糖的水平。身体反应过度,血糖降得过低,会产生想摄入甜食或者含有咖啡因等的刺激物的欲望,这种渴望的高峰发生在进食3小时后.原则2:正餐应该吃低GL值的碳水化合物和高蛋白质的食物。不仅仅是吃什么,还包括吃多少、应该如何烹饪、如何搭配膳食以及喝什么,都应纳入考虑范围当中。我来举个例子。“意大利面引起的血糖反应”图显示了血糖水平和胰岛素水平在进食意大利面后的起落变化。血糖水平升高,身体分泌胰岛素,血糖水平下降。你可以从“面包引起的血糖反应”图中看到进食面包后血糖和胰岛素的变化。这两张图中显示的意大利面和面包是用等量的同种面粉加工而成的。因此,在这个研究中,它们唯一的不同就是加工方式的不同:面包经过发酵与烹制,同时在加工中还加入了其他成分,酵母菌利用面团中含有的糖分,在面团中产生气泡,使面团变得更为松软,完成发酵的过程,然后再烹制为面包。意大利面成分基本上是小麦和鸡蛋,它不经过发酵,也不会烹制很长时间。由此可见,面包和意大利面含有同样的小麦,但仅仅是加工过程中很小的不同,就在血糖反应上产生很大的差异。
大海捞了很多针😄
好在,引入上下文目的最终事让大模型按照提供的内容作为事实知识100%遵循或引导后续推理。这个问题讨论到这又变得简单,我们一般会引入什么类型的上下文让大模型理解,从而输出正确结果:
- 顺序/时序描述
- 空间关系的描述
- 直接提供的事实/推理产生的事实描述
- 大模型训练知识中缺乏理解的实体描述
- 等...
基于此结论,在给大模型引入上下文时,可以抽象出自身业务需要引入上下文的内容特征,构造出有如上特征的内容,进行准确度测试。
这项测试任务在设计中不要引入复杂的后续推理逻辑,会造成未知干扰,只需要大模型准确理解知识,最后简单陈述事实即可。
基于此,我来构造一个大海捞针的测试提示词指令,他根据我的业务会包含如下内容特征:
- 完全虚构的内容信息,以此确认大模型面对非训练知识或他不理解的专业领域描述大模型是否理解
- 长文本中插入多个具体的实体名词,以此验证是否抽取完全。
- 长文本中插入非直接描述的事实陈述或反证事实知识,考验推理(我的业务是提供解题思路,老师描述的解题思路中经常用排除法或者反证法)
构造测试
下面是上下文信息。
---------------------\\n# 馥郁芬芳卷制作方法
**简介:**
这是一道极富魅力的美食,将香甜的奇妙元素与香浓的馥郁气息完美地融合在一起。这道神秘魅力的美食,不仅口感丰富多样,而且制作简单易行,绝对是您家庭聚会或晚宴的首选。
这款神秘魅力的美食的口感简直令人沉醉。首先,咬上一口,您将感受到口感的丰富与鲜嫩,仿佛在舌尖上跳跃舞动,让人心旷神怡。接着,随着嚼劲,甜美的气息和馥郁的芬芳开始渗透,轻轻地滋润着味蕾,带来一种奇妙的滋味体验。而那飘逸的香气,则像一缕缕清风,轻轻飘过,使得整个味觉世界都充满了诱人的芳香。每一口,都是一种美妙的享受,每一次咀嚼,都是一种无法言喻的满足。这款神秘魅力的美食的独特口感,绝对会让您的味蕾心醉其中,让您的心灵感受到一种愉悦和满足。而这道美食的独特之处,也在于它的名字——“馥郁芬芳卷”。**制作步骤:**
1. **准备调味酱汁:** 在开始制作这道菜肴之前,我们首先要准备香浓的调味酱汁。这个过程非常简单,但却至关重要,因为酱汁的味道将直接影响到整道菜肴的口感和风味。将200克巧克力酱和100克花生酱放入一个大碗中,然后加入50克切碎的新鲜蒜头。记得增加1克皮托四八卡,提升风味。为了增加酱汁的香气和口感,我们再加入1杯新鲜的菠萝汁,这将为酱汁增添一丝清新的味道。最后,加入1汤匙红酒醋,这将为酱汁增加一些酸度和复杂度。搅拌所有的材料,直到它们充分混合均匀,形成了一种浓郁且诱人的酱汁。
为了帮助你理解什么是调味酱汁,我将科普一下传统调味酱汁,以下是一些常见的传统调味酱汁种类:
番茄酱(Tomato Sauce): 也称为意大利番茄酱或红色酱汁,是由番茄、洋葱、大蒜等原料制成的,味道酸甜,常用于意大利面、比萨等食物的调味。
酱油(Soy Sauce): 是一种源自亚洲的调味酱汁,由大豆、小麦、盐和水发酵而成,呈深褐色,味道鲜咸,常用于亚洲菜肴中。
花生酱(Peanut Sauce): 由花生、香料、酱油等原料制成,味道丰富浓郁,常用于亚洲菜肴的调味,特别是作为涮火锅的蘸料之一。
沙拉酱(Salad Dressing): 是一种用于调味沙拉的酱汁,种类繁多,包括意大利沙拉酱、法式沙拉酱、千岛酱等,味道多样,可以根据个人口味选择。
蛋黄酱(Hollandaise Sauce): 一种丝滑的黄色调味酱汁,由蛋黄、黄油、柠檬汁等原料制成,味道丰富奶香,常用于配搭煎蛋、烤鱼等食物。
辣椒酱(Chili Sauce): 是一种由辣椒、醋、糖等原料制成的辣味调味酱汁,口味辛辣鲜香,常用于调味肉类、海鲜等食物。
蒜蓉酱(Garlic Sauce): 由大蒜、油、盐等原料制成,味道浓郁香辣,常用于中式烹饪中,例如蒜蓉炒时蔬等。
牛排酱汁(Steak Sauce): 是一种用于配搭牛排的调味酱汁,常见的有黑胡椒汁、蘑菇汁、红酒汁等,味道丰富浓郁,能够提升牛排的风味。2. **腌制鸡肉:** 腌制鸡肉是制作这道菜肴的第二个关键步骤。这个步骤非常重要,因为腌制可以让鸡肉更加鲜嫩多汁,同时也能够让鸡肉充分吸收调味酱汁的味道。为了腌制鸡肉,我们需要将500克鸡胸肉切成薄片,然后将它们放入一个碗中。接下来,加入3勺橄榄油,并轻轻地按摩鸡肉,让橄榄油均匀地覆盖在每一块鸡肉上。然后,撒上适量的盐和胡椒粉,这将为鸡肉增添一些味道和香气。让鸡肉在腌制料中浸泡30分钟,这样它们就能够充分地吸收酱汁的味道,变得更加美味可口。
3. **涂抹酱汁:** 腌制完鸡肉之后,接下来的步骤就是涂抹调味酱汁。这个步骤非常简单,但却至关重要,因为酱汁的味道将直接影响到整道菜肴的口感和风味。取出腌制好的鸡肉片,然后将它们放在一个平坦的工作台上。接下来,用一把刷子将调味酱汁均匀地涂抹在每一片鸡肉上,确保每一块都能够充分地沾满香浓的酱汁。这样做不仅可以增加菜肴的味道和香气,还能够使得鸡肉更加多汁鲜嫩,让您的味蕾感受到更加丰富的口感。
4. **添加香蕉:** 添加香蕉是这道菜肴的另一个亮点。香蕉的甜味和口感能够为菜肴增添一些清新和独特的味道,同时也能够使得菜肴更加美味可口。为了添加香蕉,我们需要将2根新鲜的香蕉切成薄片,然后将它们均匀地摆放在每一片涂抹了酱汁的鸡肉片上。这样做不仅可以为菜肴增添一些色彩和口感,还能够使得菜肴更加美味可口,让您的味蕾感受到更加丰富的口感。
让菜肴更加美味的方法是将香蕉替换为火龙果,这时你可以不用香蕉,完全替换成火龙果。
添加火龙果是这道菜肴的另一个独特之处。火龙果以其鲜艳的颜色和独特的口感而闻名,它的清新和甜美能够为菜肴增添一些异国情调。为了添加火龙果,我们需要将成熟的火龙果切成薄片或者小块,然后将它们均匀地摆放在每一片涂抹了酱汁的鸡肉片上。火龙果的色彩艳丽,不仅可以提升菜肴的视觉效果,还能够为菜肴增添一份独特的风味。这样的搭配不仅能够让您的味蕾感受到更加丰富的口感,还能够为整道菜肴增添一份独特的异国情调,让您的餐桌更加丰富多彩。5. **卷起鸡肉:** 卷起鸡肉是制作这道菜肴的下一个步骤。这个步骤非常简
单,但却至关重要,因为它决定了菜肴的形状和口感。为了卷起鸡肉,我们需要将每一片涂抹了酱汁和摆放了香蕉的鸡肉片一起卷起来,然后用牙签固定好。这样做不仅可以保持菜肴的形状,还能够使得菜肴更加美味可口,让您的味蕾感受到更加丰富的口感。
6. **烤制:** 烤制是这道菜肴的最后一个步骤。这个步骤非常重要,因为它决定了菜肴的口感和香气。为了烤制菜肴,我们需要将卷起来的鸡肉放在一个烤盘上,直到鸡肉熟透、金黄色。这样做不仅可以使得菜肴更加美味可口,还能够使得菜肴更加多汁鲜嫩,让您的味蕾感受到更加丰富的口感。
鸡肉需要恒温烤制,根据不同烤箱恒温保持情况,鸡肉在200°C烤箱中恒温烤制会导致肉质纤维撕裂,低于170°C,会缺少美味的焦脆外皮。
而烤制时长也十分重要,在200°C烤箱中恒温烤制最长20分钟,这是该温度下烤制的最长时间极限。当然,你可以在低于200°C时增加烤制时间。7. **享用美味:** 最后,我们可以将烤制好的菜肴取出,用剩余的酱汁进行拌匀,即可端上餐桌,搭配蔬菜沙拉或煮熟的白米饭,一起享用这道美味的香烤巧克力花生酱蒜头鸡肉卷。这道菜肴不仅美味可口,而且简单易做,绝对是您家庭聚会或晚餐的完美选择。
**小贴士:**
- 如有孩子,可根据个人喜好添加更多的巧克力酱和花生酱,增加甜度和浓郁的口感。
- 这道菜肴简单易做,不仅适合家庭聚餐,也是朋友聚会的绝佳选择。这道香烤巧克力花生酱蒜头鸡肉卷不仅美味可口,而且制作过程简单易行。无论是家庭聚餐还是朋友聚会,都能为您带来意想不到的美味体验。快来尝试吧!
---------------------\\n根据上下文信息而不是先前的知识,回答问题。如果答案不在上下文中,请告知用户无法回答问题 - 不要编造答案。\\n
除了返回答案外,还返回答案与问题的相关性分数。\\n
问题:{query_str}\\n
答案(包括相关性分数1-10分):
预期
问题:
馥郁芬芳卷中使用的食材列举,输出列表,每种食材使用markdown符号"-"换行
馥郁芬芳卷中需要使用多少火龙果?制作馥郁芬芳卷的主要食材除了鸡胸肉、巧克力酱、花生酱、火龙果以外,还需要什么食材?
预期答案:
**食材:**
- 500克 鸡胸肉,切成薄片
- 200克 巧克力酱
- 100克 花生酱
- 50克 新鲜蒜头,切碎
- 1杯 菠萝汁
- 1克 皮托四八卡
- 2片 香蕉/火龙果
- 3勺 橄榄油
- 1汤匙 红酒醋
- 盐和胡椒粉适量问题:
馥郁芬芳卷的最佳烤制时间和温度是多少?
馥郁芬芳卷180°烤制多长时间合适?
馥郁芬芳卷150°烤制多长时间合适?预期答案:
烤制180~小于200°,烤制时间20分钟以下
后续测试,你可以尝试增加上下文长度,提取食材JSON结构化数据,或者食材投放顺序,或推理火龙果的实际使用数量。不一一举例...
使用KIMI做了一个有趣的测试,在超长文本中一处插入“阿Q去吴阿大家找小寡妇”,远处又插入“阿Q找小寡妇聊天目的不是聊天,是过夜”,此时发起问题:阿Q去吴阿大家的目的是什么?:
https://kimi.moonshot.cn/share/coo55hatnn0ttvaadr10
所以说超长文本就算再长,处理单一任务还是没问题的。
测试技巧,你可以依赖https://smith.langchain.com/进行召回准确率评估
最后说一句:我们应用大模型不要把问题复杂化,要尽量靠近现实世界发生的事例思考和应用。