用《指环王》做评测:大模型长上下文能力实战指南
平时做大模型选型或者版本升级最头疼的往往不是模型跑不起来而是“不知道哪个模型更适合自己的业务”。跑分榜翻来覆去就那么几个通用指标到了真实场景里却发现分数高不代表好用。最近 Andrej Karpathy 在社交平台上转推了一个很有意思的评测新方向直接用《指环王》这类长篇文学作品作为评测材料考察大模型在超长上下文下的理解、记忆和检索能力。这个思路看起来“很文科”但背后其实踩中了当前大模型评测体系的一个核心盲区。这篇文章会围绕这个新评测基准展开聊聊它到底在测什么、为什么用《指环王》而不是传统问答集并且给出一个可以在本地复现的超长上下文评测脚本。无论你是在做大模型选型、RAG 方案对比还是单纯想验证手里的模型“是不是真的能读长文”这篇文章都能给你一套可以落地的思路。1. 为什么大模型评测基准需要一次“换血”1.1 传统评测基准的局限大模型评测基准Benchmark是衡量模型能力的一把尺子。早期的 MMLU、C-Eval、GLUE 等基准本质上都是“单选题 知识问答”的组合模型通过选择题的形式被评估知识覆盖面。这类评测有一个共同特点每个问题都是独立的上下文很短模型不需要跨段落记忆和推理。但真实业务场景远不是这样。比如让模型总结一份 50 页的产品文档。让模型基于一份长期合同回答“第 12 章第 3 条和第 8 章第 5 条之间有没有矛盾”。让模型阅读整本小说后分析人物关系变化。这些任务要求模型具备长上下文理解能力和跨区间信息关联能力而传统基准几乎测不到这两点。1.2 长上下文评测为什么难做长上下文评测难难在三个地方难点说明语料不好找需要长度足够、内容有逻辑连贯性的文本不是简单拼接几条新闻问题不好出不能只问“某个人物是谁”要设计能体现“理解”而非“检索”的问题答案不好判长文任务往往没有唯一标准答案自动评估困难这也是为什么过去很多“长上下文评测”看起来像阅读理解题的简单版给一段 3000 字的文章问一个答案就在原文里的问题。这种评测模型很容易“作弊”——靠局部匹配就能回答根本不需要真正读完上下文。1.3 卡帕西转推背后的信号Karpathy 是前特斯拉 AI 总监、OpenAI 创始成员之一在业界有很强的影响力。他转推这个《指环王》评测方向本质上是在提醒大家大模型的评测重点正在从“知识广度”转向“上下文深度”。换句话说下一阶段的大模型竞争不只是比“谁记住的知识多”而是比“谁能在一篇长文里保持对细节的持续跟踪”。这对 RAG、Agent、长文档处理类应用尤其重要。2. 拆解新评测基准《指环王》到底在测什么2.1 为什么选《指环王》《指环王》The Lord of the Rings作为评测材料有以下几个天然优势长度够长。三部曲总字数巨大单卷也有几十万词天然适合测试模型的上下文窗口上限。人物多、关系复杂。佛罗多、山姆、甘道夫、阿拉贡等角色分布在多条故事线上模型要回答“谁在哪条线做了什么”必须跟踪全局。伏笔和呼应密集。很多细节在书的前半部分埋下、后半部分呼应模型要关联到这种跨卷信息不是简单检索能做到的。没有版权障碍的替代方案不好找。当然《指环王》本身有版权评测使用时应考虑合理引用范围更推荐用公开摘要或自建问题集的方式。2.2 评测的核心能力维度这类评测基准主要考察四个维度1. 长程记忆能力模型能否记住几千甚至几万 token 之前出现的细节。例如“阿拉贡第一次见到阿尔玟是在哪里这个地点在第三部里有没有再次出现”2. 跨段落推理能力需要把分散在多个章节的信息组合起来才能回答。例如“甘道夫从灰袍变白袍之后他对佛罗多说的第一句话是什么这句话和第一部里的哪句台词形成了呼应”3. 抗干扰能力长文中包含大量无关信息模型需要区分“重要线索”和“背景描写”。例如“在莫瑞亚矿坑的遭遇中真正导致甘道夫坠落的直接原因是什么” 这个问题的干扰信息很多必须抓到关键事件链。4. 位置偏差抵抗能力很多模型对输入中间位置的信息记忆较差这是长上下文模型常见问题。评测设计者会把关键信息放在长文的不同位置验证模型是否对位置不敏感。2.3 和传统 RAG 评测的区别这里要特别区分一下。RAG检索增强生成评测通常给模型一个检索出来的片段模型只需要基于片段回答。而《指环王》这类评测是直接把整本书塞进上下文不依赖外部检索。这意味着它测的是模型原生上下文窗口的“实际可用长度”模型在长输入下的注意力分配效率模型综合全文信息的能力如果你的业务打算“把整份文档直接丢给模型”而不是“先检索再回答”那这个评测方向就更贴近你的真实场景。3. 环境准备搭建本地长上下文评测环境3.1 版本说明本节示例侧重演示评测思路你可以根据自己的环境和模型版本进行调整Python 3.10一个支持长上下文的模型接口可以是 OpenAI 兼容接口、vLLM 部署的本地模型或者 Ollama 本地部署的模型文本语料可以先用任意一本公版长篇小说代替《指环王》验证流程3.2 安装依赖pip install openai tiktoken pandas如果你使用本地 Ollama 部署的模型也需要确认 Ollama 的服务地址和模型名称。3.3 项目结构llm-long-context-eval/ ├── data/ │ └── book.txt # 测试语料建议使用公版长篇小说 ├── questions.json # 评测问题集 ├── evaluate.py # 评测主脚本 └── results/ └── output.csv # 评测结果输出4. 核心实现设计并运行长上下文评测4.1 准备评测材料由于《指环王》原文存在版权限制本文演示使用公版文本。你可以把任意 txt 格式的长篇小说放入data/book.txt注意保持章节结构完整。# 读取并预处理语料 def load_book(file_path): with open(file_path, r, encodingutf-8) as f: text f.read() # 清理多余空白符 text .join(text.split()) return text这里有一个设计要点评测语料最好保留原始章节结构不要过度清洗。因为真实业务场景里的长文档也不会是“清洗干净”的保留标点、段落、对话格式评测结果才更接近实际。4.2 设计评测问题集评测问题的质量直接决定评测结果的可信度。为了体现“理解而不只是检索”问题应该分为几类事实检索型答案在原文中有明确出处但需要找到正确位置。跨段关联型需要结合两处及以上信息才能回答。推理综合型原文没有直接答案需要模型基于通篇内容推断。{ questions: [ { id: q1, type: fact_retrieval, question: 主角团队第一次遇到戒灵时他们正在前往哪个村庄的路上, answer: 布理, context_range: chapter_1_3 }, { id: q2, type: cross_reference, question: 开篇提到的“夏尔”在哪里在后续章节中这个地点和哪条主线任务直接相关, answer: 中土大陆的西北部魔戒毁灭任务, context_range: full_book }, { id: q3, type: inference, question: 从佛罗多主动承担携带魔戒的任务可以看出他具有哪些性格特点请结合至少两处情节说明。, answer: 勇敢、责任感强、为朋友考虑, context_range: full_book } ] }4.3 编写评测主脚本核心逻辑分为三步把整本书文本拼进 prompt调用模型接口生成回答对比模型输出与标准答案import json import time import csv from openai import OpenAI def call_model(client, model_name, system_prompt, user_prompt): 调用模型接口返回回答文本 response client.chat.completions.create( modelmodel_name, messages[ {role: system, content: system_prompt}, {role: user, content: user_prompt} ], temperature0.2, # 评测场景使用较低温度提高可重复性 max_tokens1024 ) return response.choices[0].message.content def build_prompt(book_text, question): 拼接完整 prompt return f请阅读下面提供的小说全文然后回答一个问题。 【小说全文】 {book_text} 【问题】 {question} 请只输出你的答案不需要解释过程。如果问题需要结合多处情节回答请分别列出依据。 def evaluate(client, model_name, book_text, questions): results [] for q in questions: prompt build_prompt(book_text[:60000], q[question]) try: answer call_model(client, model_name, 你是一名严谨的文学研究者擅长结合原文细节回答问题。, prompt) results.append({ id: q[id], question: q[question], expected: q[answer], actual: answer[:500], status: success }) except Exception as e: results.append({ id: q[id], question: q[question], expected: q[answer], actual: str(e), status: error }) time.sleep(1) # 避免请求频率过高 return results if __name__ __main__: client OpenAI( base_urlhttp://localhost:8000/v1, # vLLM 默认地址 api_keyEMPTY ) model_name your-model-name book_text load_book(data/book.txt) with open(questions.json, r, encodingutf-8) as f: data json.load(f) questions data[questions] results evaluate(client, model_name, book_text, questions) with open(results/output.csv, w, newline, encodingutf-8-sig) as f: writer csv.DictWriter(f, fieldnames[id, question, expected, actual, status]) writer.writeheader() writer.writerows(results) print(评测完成结果已保存到 results/output.csv)4.4 结果评估策略自动评测长文回答最常用的方法是关键词覆盖率 语义相似度但不能完全依赖。def simple_score(expected, actual): 基于关键词覆盖的简单评分 expected expected.strip() actual actual.strip() # 精确匹配 if expected in actual: return 1.0 # 关键词匹配 keywords [w for w in expected if len(w) 1] hit sum(1 for k in keywords if k in actual) return hit / len(keywords) if keywords else 0.0更严谨的做法是引入一个“裁判模型”Judge Model对回答打分判定标准包括事实准确性、逻辑一致性、是否引用原文依据。这种方式成本更高但比关键词匹配可靠得多。5. 用 vLLM 部署一个被评测的长上下文模型要跑上面的评测脚本需要先有一个“被测模型”的接口。5.1 用 vLLM 启动本地模型vLLM 是目前比较主流的大模型推理框架支持高吞吐推理和长上下文。vllm serve your-model-path \ --max-model-len 65536 \ --gpu-memory-utilization 0.9 \ --trust-remote-code这里的关键参数--max-model-len模型最大输入长度不同模型支持的上限不同不能随便设否则会报上下文超限错误。--gpu-memory-utilization控制显存利用率值太高容易 OOM。--trust-remote-code部分模型仓库需要加载自定义代码按需开启。5.2 模型上下文长度确认在评测前建议先确认模型 tokenizer 把长文本编码成多少 tokenimport tiktoken text load_book(data/book.txt) encoder tiktoken.get_encoding(cl100k_base) tokens encoder.encode(text) print(f全书 token 数: {len(tokens)})如果测试文本 token 数超过了模型上下文限制评测就没有意义了。要学会切片控制比如只截取前 60k token 做部分章节评测或者换用更短的长文。6. 常见问题与排查思路跑长上下文评测时容易出现下面几类问题问题现象常见原因解决思路请求报 400 context length exceeded输入文本超过模型上下文上限用 tokenizer 统计 token 数按比例截断文本或换窗口更大的模型生成结果明显偏离原文prompt 中没有强调“结合原文”模型自由发挥在 system prompt 中强制要求“引用原文依据”或开启 json 结构化输出同一个问题多次评测结果不一致temperature 设置偏高评测场景把 temperature 降到 0 或 0.2长文本输入时速度极慢模型 prefill 阶段计算量大使用 vLLM、TensorRT-LLM 等推理框架或启用 prompt caching模型“记住了”开头和结尾但忘记中间内容长上下文位置偏差调整关键信息在文本中的位置做 A/B 测试换用位置编码更强的模型另外有一个非常常见的误判模型输出“看起来合理”但其实是错的。长上下文评测里模型很容易生成流畅但不符合原文的“幻觉内容”。这也是为什么不能只看“能不能生成一段话”要用事实型问题来约束验证。7. 长上下文评测的最佳实践与工程建议7.1 评测集设计建议问题必须可验证。每个问题都要有原文依据不能开放式发问。混合难度梯度。既有直接检索题也有跨章推理题才能区分不同模型的能力层次。控制长度变量。同一组问题分别测试输入 8k、32k、64k token 的表现能画出模型的“长上下文衰减曲线”。避免数据污染。如果模型在训练阶段已经见过这些文学作品的问答对评测结果会虚高。尽量使用新编的、不常见的问题。7.2 评测执行建议固定随机种子和温度确保可复现。多次运行取平均。长文本生成的随机性比短文本更大至少跑 3 次。记录 token 消耗和时间。长上下文评测不仅要看回答质量还要看成本因为输入 token 越多推理成本和延迟越高。同一个任务在 Llama 和 Qwen 上可能答案接近但时间差异明显。7.3 业务落地建议能用 RAG 就别硬塞全文。如果业务只关心文档里的几个片段RAG 的成本和延迟远低于全文输入。长上下文能力更适合“必须理解全局”的场景。长上下文模型不是越长越好。上下文窗口的上限和“有效使用率”是两回事。很多模型声称支持 128k但实际在 32k 之后表现急剧下滑。建议用上述评测脚本测出“有效长度”。生产环境加入回归评测。模型升级时跑一遍同样的长上下文评测防止“换模型后长文能力反而退化”的情况。7.4 一个务实的选型思路结合当前大模型评测趋势建议团队建立“两份榜单”通用能力榜单用 MMLU、C-Eval 等传统基准快速筛掉明显不合格的模型。长上下文专项榜单用类似《指环王》评测方案的自建问题集测出模型在你业务场景下的真实长文表现。两张榜单交叉对比才能选到“知识广”和“读得懂长文”兼顾的模型。8. 写在后面卡帕西转推《指环王》评测新基准给行业提了个醒大模型的评测重心正在从“背知识”转向“读长文”。对做 LLM 应用的开发者来说这意味着选型逻辑要跟着变——不要只看排行榜总分要用自己的真实业务数据去测。本文给出的评测脚本只是一个起点你可以把自己的业务文档、行业资料替换进去生成属于自己团队的“长上下文评测集”。如果手头有用长文档场景的同学建议现在就把这套流程跑一遍至少能知道当前模型的长文能力底线在哪里。后续想深入了解的话可以从这几个方向继续学习模型位置编码RoPE、ALiBi对长上下文的影响vLLM 的 PagedAttention 和 prefix caching 原理RAG 与长上下文模型的成本对比用 LLM-as-a-Judge 做自动评测的可靠性讨论评测这件事只有结合自己的业务场景动手做才有真正的参考价值。希望这篇文章能帮你少走一些弯路。如果觉得有启发欢迎收藏备用也欢迎在评论区交流你的长上下文评测经验。

相关新闻

从Kimi K3看开源大模型:本地部署与工程实践

从Kimi K3看开源大模型:本地部署与工程实践

最近几年,关于国内 AI 创业者的讨论越来越多。每当有顶尖人才放弃海外高薪、选择回国做大模型,都会引发一轮关于技术理想、创业路线和产业格局的讨论。杨植麟这个名字,不少人并不陌生:清华背景、卡内基梅隆大学博士、回国创办月之…

2026/8/27 7:26:45 阅读更多 →
家庭实验室服务菜单:Debian GNOME 中用 .desktop 文件打造统一入口

家庭实验室服务菜单:Debian GNOME 中用 .desktop 文件打造统一入口

先说明一个真实场景:家庭实验室里的服务越来越多,路由器后台开端口、NAS 跑 Docker、一台 Debian 主机上挂着十几个自建服务,每个服务都对应一个 IP 加端口。浏览器书签栏越塞越满,真正要找某个服务时反而找不到。Kinjo 这个项目名…

2026/8/27 7:26:45 阅读更多 →
CS+SAR雷达成像原理与Matlab实现详解

CS+SAR雷达成像原理与Matlab实现详解

简介:压缩感知(CS)是一种突破奈奎斯特采样定理的信号重建理论,其核心在于利用信号在特定变换域(如小波、傅里叶)的稀疏性,通过欠采样观测和L1范数优化实现高保真重构。在合成孔径雷达&#xff0…

2026/8/27 7:26:45 阅读更多 →

最新新闻

2026 推理时扩展 Test-Time Compute:答案质量取决于“想多久“,MonkeyCode 云端实战

2026 推理时扩展 Test-Time Compute:答案质量取决于“想多久“,MonkeyCode 云端实战

同样一道复杂的编程题,直接问大模型 vs 让它"多想一会",答案质量能差出几个量级。2026 年,AI 圈最热的话题之一,是把更多的计算花在"思考"上,而不是只堆在"训练"上——这就是推理时扩展…

2026/8/27 8:12:09 阅读更多 →
熵权法原理与Matlab实现:从信息熵到客观赋权的完整指南

熵权法原理与Matlab实现:从信息熵到客观赋权的完整指南

1. 项目概述:从“拍脑袋”到“算权重” 在数学建模、综合评价或者任何需要给一堆指标分配重要性的场景里,你是不是也经常为“权重”头疼?专家打分太主观,层次分析法(AHP)两两比较又繁琐,尤其是当…

2026/8/27 8:12:09 阅读更多 →
ASP.NET MVC4企业级架构解剖:CMS/CRM/OA与SQL Server耦合真相

ASP.NET MVC4企业级架构解剖:CMS/CRM/OA与SQL Server耦合真相

简介:企业级Web系统架构本质上是业务逻辑与组织结构的数字化映射,其核心不在于技术选型的新旧,而在于模块间的数据依赖、权限边界与部署约束。ASP.NET MVC4虽已非主流,但在特定历史场景下展现出强约定带来的可维护性优势&#xff…

2026/8/27 8:12:09 阅读更多 →
贪心算法解决区间选点问题:从藏匿的刺客到最少监控点覆盖

贪心算法解决区间选点问题:从藏匿的刺客到最少监控点覆盖

1. 问题引入:从“藏匿的刺客”到区间覆盖的经典模型最近在整理蓝桥杯的算法训练题,翻到了ALGO-986这道名为“藏匿的刺客”的题目。初看这个标题,你可能会联想到一些策略游戏或者推理情节,但在算法竞赛的语境下,它其实是…

2026/8/27 8:12:09 阅读更多 →
蓝桥杯Scratch国赛捉迷藏项目:事件驱动与状态管理实战解析

蓝桥杯Scratch国赛捉迷藏项目:事件驱动与状态管理实战解析

1. 项目背景与核心挑战解析“捉迷藏”这个题目,听起来像是小朋友的游戏,但在蓝桥杯Scratch国赛的舞台上,它可一点都不简单。作为第10届国赛的第6题,而且是程序2,它考察的绝不仅仅是让角色动起来那么简单。我辅导过不少…

2026/8/27 8:12:09 阅读更多 →
现代前端框架实战(5):数据请求与缓存

现代前端框架实战(5):数据请求与缓存

上一篇把本地、URL、全局与服务端状态分开,本篇专攻最后一类。任务列表会用稳定缓存键表达依赖,用 staleTime 表达“多久仍可信”,并在修改时乐观更新、失败回滚、成功后再验证。 一、痛点:fetch 只解决传输 在 Effect 中 fetch…

2026/8/27 8:11:09 阅读更多 →

日新闻

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

1. 项目概述:从零构建一个企业级的AI服务网关 最近在帮一个做内容审核的团队做技术架构升级,他们原来的业务里,每天有几十万张图片和短视频需要过审,最初是接了几个开源的AI模型自己部署,但效果和性能一直不太稳定。后…

2026/8/27 0:00:51 阅读更多 →
网盘直链下载助手5分钟解析八大网盘真实地址

网盘直链下载助手5分钟解析八大网盘真实地址

网盘直链下载助手5分钟解析八大网盘真实地址 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / 迅雷云盘 / 夸…

2026/8/27 1:06:27 阅读更多 →
从零点亮 ESP32:Arduino ESP32 开发环境搭建与首次烧录完整指南

从零点亮 ESP32:Arduino ESP32 开发环境搭建与首次烧录完整指南

从零点亮 ESP32:Arduino ESP32 开发环境搭建与首次烧录完整指南 【免费下载链接】arduino-esp32 Arduino core for the ESP32 family of SoCs 项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32 Arduino ESP32 是乐鑫官方的 ESP32 系列 Ardui…

2026/8/27 1:06:27 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/26 14:45:33 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/26 17:46:43 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/26 14:46:37 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/26 3:50:20 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/26 17:46:39 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/26 1:24:05 阅读更多 →