LLMTest_NeedleInAHaystack代码解析:从单针到多针测试的完整实现
LLMTest_NeedleInAHaystack代码解析:从单针到多针测试的完整实现
【免费下载链接】LLMTest_NeedleInAHaystackDoing simple retrieval from LLM models at various context lengths to measure accuracy项目地址: https://gitcode.com/gh_mirrors/ll/LLMTest_NeedleInAHaystack
LLMTest_NeedleInAHaystack是一个用于测试大型语言模型(LLM)在不同上下文长度下信息检索准确性的工具。该项目通过"针在草堆中"(Needle In A Haystack)的测试方法,评估模型在长文本中定位特定信息的能力,为开发者和研究人员提供直观的性能参考。
核心功能与架构设计
该项目的核心功能围绕两大测试类构建,分别处理单针和多针测试场景:
单针测试核心类:LLMNeedleHaystackTester
位于needlehaystack/llm_needle_haystack_tester.py的LLMNeedleHaystackTester类是整个项目的基础。它通过以下关键参数控制测试过程:
- 上下文长度控制:通过
context_lengths_min(默认1000)和context_lengths_max(默认200000)设置测试范围 - 文档深度设置:使用
document_depth_percent_min和document_depth_percent_max控制"针"在文档中的位置 - 并发请求管理:
num_concurrent_requests参数支持批量测试(默认1,需注意API速率限制) - 结果存储配置:
save_results和save_contexts参数控制测试数据的持久化
多针测试扩展:LLMMultiNeedleHaystackTester
needlehaystack/llm_multi_needle_haystack_tester.py中的LLMMultiNeedleHaystackTester类继承自基础测试类,增加了多针测试能力:
class LLMMultiNeedleHaystackTester(LLMNeedleHaystackTester): """ Extends LLMNeedleHaystackTester to support testing with multiple needles in the haystack. """ def __init__(self, *args, needles=[], model_to_test: ModelProvider = None, evaluator: Evaluator = None, print_ongoing_status = True, eval_set = "multi-needle-eval-sf", **kwargs): super().__init__(*args, model_to_test=model_to_test, **kwargs)通过needles参数接收多个待测试的事实,实现更复杂的信息检索场景测试。
测试流程与实现原理
1. 环境准备与初始化
项目提供了简洁的启动流程,通过几行命令即可开始测试:
核心初始化代码:
ht = LLMNeedleHaystackTester() ht.start_test()2. 测试数据构建
测试使用的"草堆"文本来自needlehaystack/PaulGrahamEssays/目录下的多篇文章,通过拼接形成不同长度的上下文。"针"则是预设的事实性语句,如示例中的"The best thing to do in San Francisco is eat a sandwich and sit in Dolores Park on a sunny day."
3. 模型调用与评估
项目通过needlehaystack/providers/目录下的模型适配器支持多种LLM,包括OpenAI和Anthropic等主流模型。评估逻辑则由needlehaystack/evaluators/目录下的评估器实现,通过对比模型输出与标准答案判断检索准确性。
测试结果可视化分析
项目生成的热力图直观展示了不同模型在各种上下文长度和文档深度下的表现:
Claude 2.1测试结果
图表显示Claude 2.1在200K上下文窗口中,随着上下文长度增加,检索准确率逐渐下降。测试覆盖了35个不同文档深度(从顶部到底部)和35种不同上下文长度,全面评估了模型在长文本中的信息定位能力。
GPT-4测试结果
GPT-4的测试结果显示,当事实放置在文档深度10%-50%之间时,在大上下文长度下检索准确率开始下降。测试覆盖了15个不同文档深度和15种上下文长度(1K-128K tokens),并对大上下文进行了额外测试以增加样本量。
快速开始与使用指南
基本安装步骤
- 克隆仓库:
git clone https://gitcode.com/gh_mirrors/ll/LLMTest_NeedleInAHaystack- 安装依赖:
cd LLMTest_NeedleInAHaystack pip install -r requirements.txt单针测试执行
python > from needlehaystack import LLMNeedleHaystackTester > tester = LLMNeedleHaystackTester(model_to_test="claude-2.1") > tester.start_test()多针测试执行
python > from needlehaystack import LLMMultiNeedleHaystackTester > tester = LLMMultiNeedleHaystackTester(model_to_test="gpt-4", needles=["事实1", "事实2", "事实3"]) > tester.start_test()项目扩展与自定义
LLMTest_NeedleInAHaystack设计具有良好的可扩展性,用户可以通过以下方式自定义测试:
- 添加新模型:在needlehaystack/providers/目录下实现新的模型适配器
- 修改评估逻辑:扩展needlehaystack/evaluators/evaluator.py中的评估方法
- 自定义测试数据:更换needlehaystack/PaulGrahamEssays/目录下的文本文件
- 调整测试参数:通过初始化参数配置上下文长度、文档深度等测试条件
测试结果默认保存在original_results/目录下,采用JSON格式存储,便于后续分析和比较。
通过这些工具和方法,LLMTest_NeedleInAHaystack为研究人员和开发者提供了全面评估LLM长文本信息检索能力的解决方案,帮助理解不同模型在处理超长上下文时的表现特点。
【免费下载链接】LLMTest_NeedleInAHaystackDoing simple retrieval from LLM models at various context lengths to measure accuracy项目地址: https://gitcode.com/gh_mirrors/ll/LLMTest_NeedleInAHaystack
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
