当前位置: 首页 > news >正文

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_mindocument_depth_percent_max控制"针"在文档中的位置
  • 并发请求管理num_concurrent_requests参数支持批量测试(默认1,需注意API速率限制)
  • 结果存储配置save_resultssave_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),并对大上下文进行了额外测试以增加样本量。

快速开始与使用指南

基本安装步骤

  1. 克隆仓库:
git clone https://gitcode.com/gh_mirrors/ll/LLMTest_NeedleInAHaystack
  1. 安装依赖:
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),仅供参考

http://www.cnnetsun.cn/news/2172406.html

相关文章:

  • AUTOSAR存储栈调试实录:如何通过NvM_GetErrorStatus返回值快速定位MemIf/Fee层读写故障
  • 如何实现高效分布式数据处理:多节点训练的datasets终极解决方案
  • 如何快速掌握Windows Cleaner:解决C盘空间危机的完整指南
  • InfluxDB 3.0 终极 DevOps 监控指南:轻松跟踪系统性能与资源使用
  • Wand-Enhancer:WeMod专业版功能的本地化解锁方案
  • 拼多多数据采集利器:用Scrapy轻松获取电商商品与评论
  • 终极视频下载速度对比:Seal如何超越其他Android下载工具
  • 如何3分钟掌握Iwara视频下载:终极批量下载工具使用指南
  • 突破传统神经网络局限:PyKAN无监督学习实现复杂数据生成的终极指南
  • 如何3步搞定网易云音乐NCM格式转换:高效解密工具完整指南
  • 从普通用户到核心贡献者:APITable开源社区的成长蜕变之路
  • Spring Boot项目实战:5步搞定腾讯云人脸核身H5接入(附完整Java代码)
  • 第三部分-纹理与贴图——14. 纹理基础
  • Java发展史之Java由来
  • simple-llm-finetuner性能优化:如何在有限GPU内存下获得最佳效果
  • SAP SmartForms深度使用指南:从OTF数据到PDF,一次讲清CONVERT_OTF和CONVERT_OTF_2_PDF的区别
  • 5分钟快速上手:完全免费的本地视频字幕提取终极指南
  • KikoPlay局域网服务完全指南:网页控制、Android客户端与多设备同步
  • 产品经理和开发者的高效协作神器:Balsamiq Wireframes实战配置与团队项目搭建
  • 协议逆向工程实践:基于TEA加密算法的手机号与QQ号关联查询技术解析
  • 5分钟快速上手QtScrcpy:电脑键鼠操控安卓手机的完整指南
  • Redisson 分布式锁实现:可重入与看门狗
  • 嵌入式Linux开发板深度定制:从内核驱动到根文件系统构建实战
  • 支付宝异步通知处理库alipay-notify:安全验签与生产环境实践指南
  • Windows Cleaner:告别C盘爆红的智能系统清理神器
  • 从Arduino到STM32:用AS5600磁编码器做个角度传感器,附完整代码与精度对比
  • TMC2240 芯片数据手册解读|第七篇 步进/方向接口(Step/Direction Interface)全解析
  • Gemini 3.1 在线入口(官方镜像):为什么它被持续关注
  • 64、【Agent】【OpenCode】用户对话提示词(推理链)
  • Gemini 官方下载,安全无病毒