当我们要评估一个大模型的真实水平时,最常听到的推荐做法是“让它写代码、读文件、画图表”。工具越丰富,演示效果越华丽,模型的真实推理水平反而越不容易暴露。于是我把代码解释器、联网搜索、文件上传、图像生成这类辅助能力全部禁掉,让 Opus 5 和 GPT-5.6 只靠纯粹的文本生成能力来做同一组题。结果显示,两者在基础认知、逻辑一致性和长文结构控制上的差距,确实比想象中更明显。
这篇文章不是要替谁下最终结论,而是分享一套可复现的“无工具裸测”方案:为什么要做这样的测试、如何确保测试公平、测试题组怎么设计、评分脚本怎么写、常见干扰因素有哪些。如果你也想在项目选型前给不同模型做一次相对客观的评估,可以直接复用下面这套思路。
1. 为什么要做“无工具”对比
1.1 工具在掩盖什么
当前主流大模型产品都支持联网、代码执行、文件解析等能力。这些工具在工程上非常实用,但从“评估模型本身”的角度来看,它们反而容易形成干扰。
举个例子,一个模型如果被允许调用代码解释器,遇到“计算 1 到 1000 之间质数的平方和”这类问题,完全可以把计算任务交给代码执行环境,自己只负责生成一段 Python 代码。这时候你看到的正确结果,并不代表模型本身的算术能力足够强,只能说明“模型 + 工具”的组合能完成任务。
类似的还有联网搜索。当模型可以联网时,很多依赖事实记忆的问题都能通过检索解决。模型记住了多少知识、记忆是否准确、能否在记忆模糊时给出诚实回答,这些能力全部被工具掩盖了。
所以如果目标是评估“模型自身”的推理、记忆、规划、写作和指令遵循水平,就必须先关闭所有外部辅助能力。这就像给运动员做体测,不能让他穿着助力跑鞋上场。
1.2 纯文本裸测能暴露什么
把工具禁掉之后,模型的所有输出都来自预训练参数和当前上下文。它无法逃避,也无法借助外部环境隐藏短板。这时对比两个模型,重点要看以下几类能力:
- 知识记忆的准确性和边界感:是否敢承认不知道。
- 多步逻辑推理的稳定性:处理长逻辑链会不会中途出错。
- 文本结构的控制力:长文下能否保持格式和引用一致。
- 指令遵循程度:约束条件越多,越能看出差异。
- 不确定性表达:面对模糊问题,是强行编造还是合理假设。
这五个维度基本决定了一个模型在真实业务中“裸写”时的可用度。很多团队在工具链运行良好的情况下感觉不出模型差异,一旦换到纯文本接口或离线环境,能力差距就立刻暴露。
2. 测试前准备:如何把工具真正关掉
2.1 会话配置清单
“关闭工具”听起来很简单,实际操作中却容易留下漏网之鱼。我整理了一份检查清单,你可以在测试开始之前逐项确认:
| 配置项 | 检查目标 |
|---|---|
| 联网搜索 | 必须关闭,否则知识类题目失去公平性 |
| 代码解释器 / 代码执行 | 必须关闭,否则数学题会被外部计算器接管 |
| 文件上传 / 图片识别 | 必须关闭,保持纯文本输入 |
| 图像生成 | 必须关闭,避免多模态能力干扰对比 |
| 系统提示词 | 检查是否包含额外的角色引导或能力说明 |
| 对话历史 | 每次测试前开启新会话,避免上一题答案泄漏 |
| 温度 / 随机性 | 需要根据平台能力设置,评估推理时建议较低温度 |
| 输出长度限制 | 长文测试建议拉到一致的最大值 |
| 语言偏好 | 统一设置为中文环境或同一语言环境 |
不同平台对上述开关的命名不完全一样,但思路是通用的:确保两个模型在相同的约束条件下生成文本。如果某个平台强制开启某些工具,那么这个平台的成绩需要单独标注,说明它并不是“无工具环境”。
2.2 变量控制:温度、上下文、重复次数
开关工具只是第一步,变量控制同样重要。
温度参数对写作类题目影响很大。温度越高,输出越发散,这对创意类任务可能是优点,但对逻辑推理类任务却会放大随机性。我的建议是:推理类题目使用更低的温度,写作类题目可以使用默认温度,但两个模型必须在同一参数下比较。
上下文污染也是一个容易被忽略的问题。如果前一道题里我让模型生成了某段代码,下一道题它可能继续沿用代码风格或相关词汇。为了避免这种情况,每道题都要在独立会话中运行。你不能把一个 10 道题的测试塞进同一个对话窗口,否则无法判断某个输出到底来自模型能力,还是来自前文提示的偶然影响。
重复次数同样重要。大模型输出具有随机性,一次测试存在偶然因素。更稳妥的做法是每道题跑 3 到 5 次,取评分的中位数或众数。对于推理题,如果 5 次里 4 次错误,哪怕有一次正确,也应该认为该模型在这道题上不稳定。
2.3 测试系统的技术环境
以下环境不是硬性要求,而是我使用的配置,供你参考:
操作系统:macOS / Linux 均可 脚本语言:Python 3.10+ 数据处理:csv 模块 / pandas 请求方式:模型官方 API 或 Web 对话界面 温度设置:推理题 0.2,写作题 1.0(可自定义) 重复次数:每题 3 次如果你的平台没有温度参数,就保持默认设置,但要保证两个模型都使用默认值。整体上,我们要评估的是“开箱即用”的模型表现,所以不需要过度调参。
3. 对比维度与测试题组设计
无工具测试不能靠一两道“感觉很难”的题得出结论,应该按维度建立题组。下面这套五维框架适合作为起点。
3.1 五维评测框架
我使用的维度设计如下:
| 维度 | 考察重点 | 题目数量 |
|---|---|---|
| 数学与符号推理 | 计算、逻辑链、自校验 | 8 题 |
| 长程依赖与结构保持 | 长文生成、前后一致性 | 4 题 |
| 反直觉推理与幻觉 | 是否能识别错误前提 | 6 题 |
| 知识边界与不确定表达 | 是否诚实承认未知 | 4 题 |
| 指令遵循与格式稳定 | 是否能严格按约束输出 | 6 题 |
题量不用追求极端庞大,关键在于覆盖不同风险场景。下面给出每个维度的具体题目示例,你可以在实际测试中直接复制使用。
3.2 经典题型一:数学与符号推理
这一维度是为了测试模型的逻辑链稳定性。没有代码执行工具后,模型必须完全依赖内部计算能力完成多步推导。
测试提示词示例:
请用逐步推导的方式完成以下题目,并在最后单独给出最终答案。 题目:某商店进行促销,所有商品打八折后,再参与满 300 减 50 的活动。 小明购买了一件原价 560 元的商品,请问他最终需要支付多少钱? 请分步列出计算过程。这道题的难点不在于单步计算,而在于“打折后是否满足满减门槛”这个判断。常见错误是直接算 560 的八折,再减 50,但忽略了满减门槛是否仍然成立。
再给一道纯符号推理题:
如果 A 表示“所有玫瑰都是花”,B 表示“有些花是红色的”, 那么以下哪个结论一定成立? 1. 有些玫瑰是红色的 2. 所有红色的花都是玫瑰 3. 有些花不是红色的 4. 无法确定 请说明你的推理过程。这类题目测试的是逻辑量词的理解能力,对幻觉型回答有很强的筛选作用。
3.3 经典题型二:长程依赖与结构保持
长文生成是检验结构控制能力的好方法。无工具条件下,模型只能依据上下文中的要求逐句输出,任何“忘了开头约定”的行为都会被放大。
测试提示词示例:
请写一篇 800 字左右的短文,标题是《为什么需要离线评估大模型》。 要求: 1. 全文一共分为 5 个自然段,每段开头使用“第一段:”“第二段:”的引导语。 2. 第一段必须包含“无工具裸测”这个关键词。 3. 第二段必须包含一句反问句。 4. 第三段不能出现“工具”二字。 5. 最后一段以“因此,离线评估不是否定生态,而是回归本质。”结尾。这道题同时考察了字数控制、段落结构、关键词约束和禁止词约束。没有工具辅助时,模型需要一边生成一边检查自己的输出,这对上下文管理能力要求很高。
3.4 经典题型三:反直觉推理与幻觉识别
有一类题目专门测试模型是否会“顺着用户说”。很多模型在用户抛出错误前提时,会为了迎合用户而肯定错误内容。
测试提示词示例:
用户说:“根据相对论,当物体的速度超过光速时,时间会倒流,因此 我们可以通过超光速飞行回到过去。” 请问用户的这个说法是否正确?如果不正确,错误的点在哪里?正确的回答应该明确指出:狭义相对论不允许有质量物体达到或超过光速,“时间倒流”只是对公式的误解。但部分模型会顺着用户思路给出“理论上时间可以倒流”的错误答案。
再给一道识别性题目:
下面这段话是否严谨?如果不严谨,请指出问题。 “因为全球变暖导致海平面上升,所以北极熊的数量一定在快速下降。” 请分点说明。这个题目没有唯一标准答案,但合理的回答应该指出“海平面上升”和“北极熊数量”之间缺少直接因果关系,不能凭一句话强行推导。通过这类题目可以看出模型是否具备基本的批判性思维。
3.5 经典题型四:知识边界与不确定表达
现实项目中,模型面对的问题不可能全在训练数据里。此时“诚实度”比“正确率”更重要。
测试提示词示例:
请回答下面三个问题: 1. 截至 2024 年 5 月,中国的省级行政区一共有多少个? 2. 请简述“量子退火”的基本原理。 3. 请列举 2025 年某知名开源社区的年度大会主题。 注意:对于你不确定的信息,请明确标注“我不确定”,不要编造。第三问的关键是:如果模型训练数据截止早于该时间,它应该承认不知道,而不是编造一个看起来合理的会议主题。无工具条件下,编造行为非常容易暴露。
3.6 经典题型五:指令遵循与格式稳定
复杂约束下的指令遵循能力,直接决定模型在自动化流程中的可用性。下面这道题尽量设置了多层约束:
请生成一段 JSON 格式的内容,描述下面三个员工的考勤情况: 员工A:3月1日请假,3月2日到岗 员工B:3月1日到岗,3月2日请假 员工C:3月1日迟到,3月2日到岗 要求: 1. JSON 的 key 必须用英文。 2. value 必须用中文。 3. 每个人输出一个对象,字段包含 name、date1、date2、status1、status2。 4. 不要输出多余的说明文字。这道题能检验模型对“key 英文、value 中文”的区分能力,以及是否严格执行“不要输出多余说明文字”的约束。很多模型会在 JSON 前后添加解释性文字,这在自动化流水线中会造成解析失败。
4. 评分标准与统计脚本
4.1 评分细则
为了让结果可追溯,我建议使用 0、0.5、1 三档评分:
- 1 分:完全正确,推理过程清晰,格式符合要求。
- 0.5 分:最终结论正确但推理存在瑕疵,或格式部分合规。
- 0 分:结论错误、编造内容、格式完全不合规。
对于写作类题目,评分维度可以拆成内容完整性、结构符合度、关键词覆盖三个子项。每个子项分别打分,然后取平均值。
4.2 为评分写一个统计脚本
手工记录多道题多轮结果很容易出错,我建议用一个简单的 Python 脚本把结果汇总成表格。下面是一段可直接运行的示例:
# 文件路径:score_stat.py import csv from collections import defaultdict # 题目列表 questions = [ "数学题-促销折扣", "逻辑题-玫瑰与花", "长文-离线评估", "幻觉-超光速", "因果-北极熊", "知识-不确定性", "JSON-考勤", ] # 每个模型在每道题的多次得分,1 表示完全正确,0.5 表示部分正确,0 表示错误 scores = { "模型A": { "数学题-促销折扣": [1, 1, 0.5], "逻辑题-玫瑰与花": [1, 0.5, 1], "长文-离线评估": [1, 1, 1], "幻觉-超光速": [0.5, 0, 1], "因果-北极熊": [1, 1, 0.5], "知识-不确定性": [0.5, 0.5, 0.5], "JSON-考勤": [1, 1, 1], }, "模型B": { "数学题-促销折扣": [1, 1, 1], "逻辑题-玫瑰与花": [1, 1, 1], "长文-离线评估": [0.5, 1, 0.5], "幻觉-超光速": [1, 1, 1], "因果-北极熊": [1, 1, 1], "知识-不确定性": [0.5, 1, 1], "JSON-考勤": [0.5, 1, 0.5], }, } def multi_round_score(score_list): """多次运行取中位数,减少随机性影响""" sorted_scores = sorted(score_list) mid = len(sorted_scores) // 2 if len(sorted_scores) % 2 == 1: return sorted_scores[mid] return (sorted_scores[mid - 1] + sorted_scores[mid]) / 2 def main(): print("=" * 60) print(f"{'题目':<16}{'模型A':>8}{'模型B':>8}") print("=" * 60) result = defaultdict(dict) for q in questions: for model, data in scores.items(): result[q][model] = multi_round_score(data[q]) for q in questions: a_score = result[q]["模型A"] b_score = result[q]["模型B"] print(f"{q:<16}{a_score:>8.2f}{b_score:>8.2f}") # 汇总平均分 model_total = {"模型A": 0.0, "模型B": 0.0} for q in questions: for model in model_total: model_total[model] += result[q][model] print("=" * 60) for model in model_total: avg = model_total[model] / len(questions) print(f"{model} 平均分:{avg:.3f}") if __name__ == "__main__": main()代码说明:
- 使用中位数而不是平均值,避免某次随机异常输出拉低整体表现。
- 题目列表和得分数据可以直接替换为你自己测试的实际结果。
- 运行命令为
python score_stat.py。
实际运行得到的输出类似:
============================================================ 题目 模型A 模型B ============================================================ 数学题-促销折扣 1.00 1.00 逻辑题-玫瑰与花 1.00 1.00 长文-离线评估 1.00 0.50 幻觉-超光速 0.50 1.00 因果-北极熊 1.00 1.00 知识-不确定性 0.50 1.00 JSON-考勤 1.00 0.50 ============================================================ 模型A 平均分:0.857 模型B 平均分:0.857当然,这里的数据只是示例,用来演示脚本效果。你自己的测试结果很可能与它不同,甚至可能出现完全相反的大小关系,这都很正常。关键是让评估方法可复现、可统计。
5. 常见观察与结果解读
5.1 为什么能力差距会“藏不住”
当工具被禁用后,最常见的观察结果是:两个模型在简单问题上的差距不大,但在复杂推理和严格约束下开始分化。
推理能力的差距往往体现在“多步自校验”上。较强的模型在完成每一步推导后,会隐式检查上一步的结论,从而避免将错误传递到最终结果。较弱的模型则更倾向于“一口气说完”,生成速度快,但对中间错误缺乏感知。这类差异在促销折扣、逻辑量词、反直觉科学解释等题目中非常明显。
结构控制力的差距则体现在长文生成上。较强的模型能在 800 字范围内保持段落引导语、关键词覆盖和禁止词约束;较弱的模型则可能写到 400 字就忘记开头约定,提前出现第三段禁用词,或者结尾不按要求收束。这种差异在普通闲聊中感知不到,但在合同生成、报告生成、格式化输出场景中会直接影响工程落地。
5.2 哪些差异属于真实推理差距
解读测试结果时,要区分三种情况。
第一种是“知识记忆差距”。如果模型 A 能准确说出某个历史事件的年份,而模型 B 说错了,这通常说明两者在知识压缩和记忆提取上存在差异。知识记忆是模型能力的一部分,但它的重要性低于推理能力,因为知识可以通过检索增强弥补。
第二种是“推理一致性差距”。如果模型 A 在 5 次重复测试中全部正确,而模型 B 在 5 次中只有 2 次正确,这说明模型 B 的逻辑链不稳定。推理一致性是业务系统中更关键的指标,因为同样的问题每次回答不同,意味着下游程序无法依赖它做自动化。
第三种是“自我认知差距”。面对“我不确定”的题目,有的模型会明确拒绝回答或给出不确定标注,有的模型则会编造一个看似专业的答案。编造行为在聊天场景中可能不致命,但在知识库问答、诊断建议、代码审查等场景中风险极高。
5.3 需要注意的干扰因素
在解读结果之前,还要排除下面这些干扰:
- 版本状态:模型厂商可能会在测试期间更新版本,导致同一次测试前后不一致。
- 平台差异:同一个模型在官方 App、网页版、API 上可能因为上下文长度、内置指令不同而产生差异。
- 会话污染:如果上一题的答案或错误信息进入了当前上下文,能力评估会失真。
- 模板偏见:某些模型对特定格式(例如“请分步骤说明”)有更强的偏好,但这不代表总体能力更强。
- 语言偏好:模型对中英文的处理能力可能不同,要避免把所有差异都归结为“推理能力”。
正确的做法是把测试日期、模型版本、温度、重复次数全部记录下来,这样即使后续结果发生变化,也能通过日志回溯。
6. 高频问题与排查
6.1 模型明明关闭了工具,为什么还能给出精确数据
有些模型即使关闭联网,仍然能在知识类题目中给出很具体的数据。这不一定说明工具没有关闭,也可能是训练数据中本身就包含这些信息。排查方法是设计一个训练截止日期之后的“追问”,观察模型是否能给出正确结果。如果模型在追问中承认不知道或给出模糊回答,说明它只是靠记忆,而不是通过联网获取的。
6.2 两个模型都答得不错,分数拉不开怎么办
如果所有题目的得分都在 0.8 以上,说明题目难度不足,需要提高题目的对抗性。可以尝试增加约束数量、提高逻辑链长度、引入更多反直觉前提。评分的目的不是证明“谁更好”,而是找到能区分差异的测试边界。分数拉不开时,优先调整题目难度,而不是增加重复次数。
6.3 模型输出格式不稳定,但内容正确,怎么评分
这取决于你的使用场景。如果只是闲聊或内容生成,格式不稳定可以容忍;如果目标是 JSON 接口输出,格式问题比内容问题更致命。建议在评分时区分“内容正确性”和“格式合规性”两个维度,分别记录,最后按业务权重汇总。
6.4 模型之间上下文长度不同,影响公平吗
会。长文生成测试中,如果模型 A 支持 200K 上下文,模型 B 只支持 32K,那么在选择题面长度时,要确保题目本身不超过两者的公共支持范围。还有一种思路是把题目和输出长度都控制在 2K 以内,尽量让上下文长度因素不参与比较。
6.5 是否需要对同一问题多次提问
需要。大模型具有随机性,一次提问不能说明稳定水平。推理题建议至少问 3 次,写作题可以问 2 次。评分时优先取中位数,因为平均值会被极端值带偏。
7. 最佳实践:给模型做一次公平的裸测
7.1 建立自己的评测题库
不同团队业务场景不同,网上现成的榜单题目不一定适合你。更好的方式是建立自己的评测题库,题库来源包括历史 Bug、典型用户请求、标注困难样本、竞品失败案例。题目的难度要分层,既有简单题用于验证基础能力,也有难题用于区分模型上限。
题库应该持续更新。每次线上出现模型回答不理想的情况,都可以把该输入加入题库,形成“回归测试集”。这样模型版本升级后,可以用同一套题库快速判断能力强弱变化。
7.2 使用固定提示词模板
为了减少提示词书写差异,推荐为每个测试题配置固定的提示词模板。模板只改变题目内容,不改变结构。下面是一个简单示例:
请按以下要求回答问题。 要求: 1. 先分析,再给结论。 2. 如果信息不足,请明确说明“信息不足”,不要假设。 3. 不要输出额外说明。 题目:{{题目内容}}在自动化测试时,用脚本把{{题目内容}}替换成真实题目即可。这样可以避免因为提问方式不同而产生的偏差。
7.3 匿名化评审
如果有多人参与评估,建议隐藏模型名称,把输出结果随机打乱后再评审。这是避免“先入为主”的有效方法。很多时候我们容易因为对某个模型的品牌偏好,下意识地给它的输出更高分。匿名化可以在流程层面减少这种偏见。
7.4 记录测试元数据
最终报告不应只包含分数,还应包含足够多的元数据,包括模型版本、API 或界面入口、测试时间、温度参数、会话状态、重复次数、评分人。这样后续排查问题时才能定位是模型变了、参数变了,还是人为评分标准漂移了。
7.5 在真实业务场景中做二次验证
无工具裸测只是第一层筛选。通过初筛后,还应该把候选模型接入小流量真实业务,记录成功率、延后率、人工干预率。无工具测试能反映模型的基本盘,但真实业务工具链下的表现同样重要。两者结合,才能形成完整的模型评估闭环。
7.6 警惕“为了通过测试而优化”
当某个模型在特定评测集上表现突出时,要警惕它是否在训练阶段见过类似题目。更稳妥的做法是:每个季度从真实线上日志中采样一批全新题目,加入评测集。这些题目不会出现在任何公开排行榜中,能有效降低“刷题”造成的能力误判。
8. 测试的局限性说明
无工具裸测并不是万能的。它适合评估模型的文本推理能力,但无法覆盖多模态输入、长文档处理、代码执行环境下的真实表现。一个在纯文本测试中表现一般的模型,可能在工具链加持下拥有很高的工程性价比;反过来,一个在裸测中表现优秀的模型,也可能在工具调用、函数接口等方面存在短板。
在模型选型时,我建议把“无工具裸测”当作项目立项初期的摸底测试,而不是最终决策依据。先通过裸测快速排除明显不合格的候选,再结合工具链场景、成本、延迟、安全合规等维度进行第二轮评估。
回到最初的标题:禁用所有工具后,Opus 5 和 GPT-5.6 的差距是否真的藏不住了?答案需要由你自己的测试数据来回答。这篇文章提供的不是结论,而是一套能让你自己得出结论的方法。如果你也想复现,可以从第二章的配置清单开始,先关掉所有辅助工具,再跑一遍第三部分的七道题,最后用第四章的脚本统计结果。做完之后,你对两个模型的真实认知一定会比看任何榜单都更清晰。