想象你是一位高三班主任。每年六月,你心里清楚班上的学生谁勤奋、谁聪明,可外人只看那张成绩单。你带的学生再优秀,没有一张统一试卷上的漂亮分数,到了招生办那里就是说不清道不明。AI界也有同样的难题:当团队训练出一个大模型,它读了多少语料、跑了多少轮微调,都不算数。研究者、项目经理、甲方客户——所有人都只看一件事:它在统一试卷上的成绩。 今天,我要带你认识中国AI圈的“三大统考”:C-Eval、CMMLU 和 CMMMU。C-Eval像全国文理综合卷,52个学科的大题库;CMMLU像名校自主招生素质测试,更偏常识、推理与文化底蕴;CMMMU则像美院加试,要求图文并茂地思辨作答。看懂这三张卷子,你就掌握了给AI“发毕业证”的完整标准。这篇文章要解决的问题很实际:在RAG客服系统项目里,如何用这套“高考”来选拔模型、验收升级、监控上线后的能力变化。你不需要懂数学,只需要带着“班主任思维”跟我走。

岗位关联

理解中文AI评测基准,是AI从业者做模型选型、质量监控与项目汇报的基本功——这套“高考”能把模糊的“模型能力”翻译成可量化的KPI。

目录
  1. 可视化演示
  2. 评测基准概述
  3. C-Eval题库
  4. CMMLU特性
  5. CMMMU多模态
  6. 评测方法
  7. 成绩解读
  8. RAG落地应用
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

对比C-Eval多学科、CMMLU多任务与CMMMU多模态三大中文评测基准的覆盖范围、题量与能力侧重,可切换三种模式观察。

本节配有交互动效(进入视口后自动加载,约 3KB)。

C-Eval:多学科知识评测 13948道多选题,覆盖52个学科 分STEM/人文社科/其他三大类,难度分级 题量 = 52学科 侧重模型知识广度储备。

评测基准概述

每个高三班主任都明白一个道理:你光说“这孩子挺聪明”没人信,你得拿出分数。在AI工程中同理。你向领导汇报“我们的模型中文能力很强”,领导会问:强在哪?跟谁比?用什么证明?这时候,评测基准就是你办公桌上的那张标准答案卷。它由一批人工精挑细选、带标准答案的题目构成,模型做一遍,算出的分数就是它的“高考成绩”。

国内的中文评测生态里,“三大统考”地位突出:C-Eval 以52个学科、13948道选择题成为覆盖最广的中文知识考试;CMMLU 用67个主题、11528道题强调多任务语言理解与知识深度;CMMMU 则引入图像,成为中文多模态评测的标杆。三者的关系就像“全国卷”、“自主招生卷”和“美院加试”——都叫考试,但考察维度各有侧重。对AI从业者而言,这三张卷子共同回答了最基础的问题:一个模型的中文能力底线到底在哪里?

技术上看,评测基准确是一场规模化的“改卷”:把题目输入模型,让模型输出选项字母,再与标准答案比对。衡量指标核心就是准确率。它看似简单,却是一切榜单、排名、验收结论的基石。

理解了准确率,你就拿到了解读整个AI评测世界的钥匙。接下来,让我们看看这三张卷子各自的“考纲”到底长什么样。记住,班主任拿到成绩单后第一件事,永远是翻开单科明细——这正是后面几节要做的。

Accuracy=NcorrectNtotal\text{Accuracy} = \frac{N_{\text{correct}}}{N_{\text{total}}}
准确率 = 答对的题数 ÷ 总题数。好比一张卷子50道题,你答对35道,准确率就是 0.7,换算成百分制就是70分。
  1. N_total(总题数)考试的“总题量”,就像高考卷子一共有多少道题,这是分数的分母,决定了一次评测的统计底气。
    Ntotal=样本总数N_{\text{total}} = \text{样本总数}
  2. N_correct(答对题数)模型答错的不计入,只有预测答案与标准答案一致才算有效得分,这是分数的分子。
    Ncorrect=∑i=1Ntotal1[y^i=yi]N_{\text{correct}} = \sum_{i=1}^{N_{\text{total}}} \mathbb{1}[\hat{y}_i = y_i]
  3. Accuracy(准确率)分子除以分母,得到一个0到1之间的数值。满分是1.0,也就是100%全对——现实中几乎不可能,因为连人类平均水平也只是勉强及格。
    Accuracy=答对总题\text{Accuracy} = \frac{\text{答对}}{\text{总题}}

C-Eval题库

如果你只记住一个数字,请记住52——C-Eval覆盖的学科数。它像一个庞大的“文理综合卷库”:从初中数学到高等数学,从大学计算机到临床医学,从法律职业资格考试到会计实务,横跨STEM理工科、人文社科、商科、医学法律等几乎所有知识门类。相比只考语文英语的中文测试,C-Eval更像“全科统考”——每一道题都要求模型调取对应领域的知识储备。

C-Eval的具体规模是这样的:13948道多项选择题,按难度分为四个层级——初中、高中、大学、职业。这四个层级的分布并不平均,而是呈“中间大、两头小”的纺锤形:初中题相对少,大学题最多,职业题次之。这种设计非常像高考出题组的“双向细目表”:既考察基础知识的牢固度(初中),又考察专业知识的深度(大学、职业),确保分数能区分出模型能力的精细梯度。

对于每个学科,官方榜单会单独计算一科的平均准确率。这样你不仅能看总分,还能看清模型是“偏理”还是“偏文”。学科级指标是C-Eval区别于一般“平均分榜单”的核心优势,它允许工程团队按业务需要筛选模型——比如客服系统需要法律知识,就看“法律”这一科的成绩。

C-Eval的价值在于它“多而全”。就像高考为何要考六科而不是只考一科——因为单一学科无法衡量一个学生的综合素质。在RAG客服项目里,我们也用C-Eval的学科分布来回答一道关键问题:这个模型在哪些知识领域值得信任,在哪些领域需要靠知识库外挂来补足。

Aˉj=1nj∑i=1nj1[y^i=yi]\bar{A}_{j} = \frac{1}{n_{j}} \sum_{i=1}^{n_{j}} \mathbb{1}[\hat{y}_{i} = y_{i}]
这是“第 j 个学科的准确率”:把该学科所有题目的对错加起来,再除以该学科题数。相当于班主任单独算出“数学单科平均分”。
  1. j(学科下标)j 从1到52,逐个遍历每个学科,比如 j=1 是初中数学,j=30 是大学物理。
    j∈{1,2,…,52}j \in \{1, 2, \dots, 52\}
  2. n_j(该学科题数)每个学科的题目数量不同,用 n_j 表示,它是该学科平均分的除数。
    nj=学科 j 的题目总数n_{j} = \text{学科 } j \text{ 的题目总数}
  3. 指示函数 1[·]方括号里的条件成立就记1,不成立记0。模型预测值与标准答案完全一致,这一题才算得分。
    1[y^i=yi]={1y^i=yi0其他\mathbb{1}[\hat{y}_i = y_i] = \begin{cases} 1 & \hat{y}_i = y_i \\ 0 & \text{其他} \end{cases}
  4. 平均分 Ā_j把该学科所有“是否答对”的结果累加后除以题数,得到0到1之间的单科得分率。
    Aˉj=学科 j 答对题数nj\bar{A}_{j} = \frac{\text{学科 } j \text{ 答对题数}}{n_j}

CMMLU特性

如果说C-Eval像高考,那CMMLU就像名校的“自主招生面试”——不满足于考死记硬背的知识,更看重常识推理、文化素养和语言的深层理解。CMMLU全称是“中文多任务语言理解”,由67个主题构成,共11528道题。它的出题思路是:同样是考“社会的含义”,C-Eval可能直接问社会学定义,CMMLU则会设置一个贴近生活的场景,考察模型是否真的“懂”这个概念。

CMMLU的题目分布也很有讲究:它把知识分为STEM、人文社科、商科等大类,每个大类下又细分到“中国法律”“中医”“饮食文化”等本土化主题。这种设计使它对中文语境的敏感性远超一般翻译类测试。你问模型“垃圾分类中'干垃圾'包括什么”,如果模型只在英文语料上训练过,大概率会答错——这正是CMMLU想暴露的短板。

为了量化评测的覆盖面,我们可以用“覆盖率”来衡量一个模型擅长处理的主题比例。这好比班主任统计“哪些科目能及格”,而不是只看平均分。CMMLU还引入了难度梯度:同一主题下既有简单常识题,也有专业研究级难题,确保分数能拉开差距。

CMMLU和C-Eval的差异不是替代关系,而是互补关系:C-Eval更“应试”,题量庞大、标准严格,适合衡量知识面;CMMLU更“素质”,情境丰富、贴近生活,适合衡量模型在真实中文场景中的可用性。在客服系统中,我们往往用CMMLU来判断模型能否理解用户一句带口语、带隐含前提的话——这正是知识型选择题测不出来的能力。

Coverage=∣Scovered∣∣Stotal∣\text{Coverage} = \frac{|S_{\text{covered}}|}{|S_{\text{total}}|}
覆盖率 = 模型能够正确作答的主题数 ÷ 全部主题数。好比统计学生“单科及格率”,而不是只看六科总分。
  1. S_total(全部主题集合)CMMLU定义的所有主题构成的集合,共67个,相当于学生的课程表。
    Stotal={主题1,主题2,…,主题67}S_{\text{total}} = \{ \text{主题}_1, \text{主题}_2, \dots, \text{主题}_{67} \}
  2. S_covered(已覆盖主题集合)模型在该主题题目上正确率达到设定阈值(如60%)以上的主题子集,相当于“及格科目”清单。
    Scovered={主题∣Aˉ主题≥阈值}S_{\text{covered}} = \{ \text{主题} \mid \bar{A}_{\text{主题}} \ge \text{阈值} \}
  3. 覆盖率两集合的元素个数之比。0.5的覆盖率意味着67个主题里模型只有一半能合格作答。
    Coverage=∣Scovered∣67\text{Coverage} = \frac{\lvert S_{\text{covered}} \rvert}{67}

CMMMU多模态

前两张卷子都用纯文字出题,而CMMMU则打破了这一限制——它是“美院加试”,要求模型看图作答。CMMMU全称“中文多模态多学科理解”,由约11500道题组成,覆盖30个学科,分为艺术、工程、人文、科学、社科、商业六大核心领域。每道题都包含图像与文字的组合:可能是一张数据图表配一道数学题,可能是一幅油画配一道美术史题,也可能是一个电路图配一道物理题。

多模态评测难点在于:模型不仅要“读题”,还要“看懂图”。C-Eval考的是“知识”,CMMLU考的是“理解”,CMMMU考的是“观察+推理”的组合拳。这与高考中的“实验题”异曲同工——不给出直接答案,而是让你从图表、数据、图示中自己提取信息,再结合知识得出结论。

CMMMU的评分方式与纯文本基准类似,也按学科划分统计准确率。但由于每题都包含视觉内容,模型的文本编码能力与视觉编码能力必须协同工作——任何一个环节掉链子,分数都会立刻跳水。这也是它被看作“最难的中文AI考试”的原因之一。

在实际项目中,CMMMU的意义在于“SOTA智商的质检员”。如果你的客服系统要处理用户上传的截图、拍照的订单、产品图片,那么一个CMMMU分数过低的模型,即使C-Eval再高,也可能在真实图文场景中“看不明白”。选型时多花10分钟瞄一眼CMMMU,能让你避开“文字天才、视觉色盲”的模型。

S=1M∑m=1M1[am=am⋆]S = \frac{1}{M} \sum_{m=1}^{M} \mathbb{1}[a_{m} = a_{m}^{\star}]
S是总得分率:全部图文混合题中,答对的比例。相当于美术加试的“总分÷题数”,看图题答错一题,总评就被拉下一截。
  1. M(题目总数)CMMMU全部图文结合题的数量,约1.15万道,是本次考试的“总题目数”。
    M=约 11500M = \text{约} \, 11500
  2. a_m(模型输出)模型对第m题的作答结果。在生成式模型中,这个答案可能是一段文本,而不仅是一个选项字母。
    am=模型输出的答案文本a_m = \text{模型输出的答案文本}
  3. a_m*(标准答案)由出题者人工标注的正确结果,通过与a_m的严格匹配来判断对错。
    am⋆=人工标注的标准答案a_m^{\star} = \text{人工标注的标准答案}
  4. 累加平均每题对错求和后除以M,得到0到1之间的总分率,换算成百分制就是考试分数。
    S=答对题目数MS = \frac{\text{答对题目数}}{M}

评测方法

考试有了,考生有了,接下来就看“考试策略”了。同一个模型,用不同的方式参加评测,分数可能天差地别——这就像同一个学生,裸考、带例题参考、打草稿演算,成绩完全不同。评测界把这三种策略称为零样本(zero-shot)、少样本(few-shot) 和思维链(CoT)。

零样本最简单粗暴:直接把题目丢给模型,不加任何示范,让它作答。这好比高考第一天早上的裸考——模型完全靠训练阶段掌握的“本能”应对。零样本分数能反映模型的真实知识储备,但往往因为模型不熟悉“回答问题要用选项字母”这种格式而吃亏。

少样本则是在正式答题前,先给模型看几道“例题+答案”作为示范,业界最常用的是5条示例(5-shot)。相当于考前做了5道模拟题,让模型“开窍”地掌握答题格式。5-shot分数通常是官方榜单的默认成绩,因为它在公平和实用之间取了平衡。

思维链CoT更进一步:要求模型在输出答案之前,先把推理过程一步步写出来,然后“根据推理给出结论”。就像数学考试要求“写出解题过程,过程分也算”。CoT在数学、逻辑类题目上提升明显,但对简单常识题可能无帮助甚至有害——不是所有题都需要打草稿。

评测方法的选择,本质是“如何在标准化的考场规则下,让每个模型发挥出可重复、可比较的水平”。在RAG客服系统的评测脚本里,我会默认采用5-shot+CoT的组合,因为客服场景中用户问题有上下文范例,模型的“答题格式”也是通过示例训练出来的——这和few-shot的思路完全一致。

P(a∣x)=exp⁡(sθ(x,a))∑a′∈Aexp⁡(sθ(x,a′))P(a|x) = \frac{\exp(s_{\theta}(x, a))}{\sum_{a' \in A}\exp(s_{\theta}(x, a'))}
这是模型在题目 x 下选择答案 a 的概率:把“题目+答案”组合的匹配分数转化为四个选项之间的相对权重,谁的分值高谁就更可能被选中。
  1. x(题目输入)把题目文本(含图像编码后的特征)作为模型输入,这里还可能拼上few-shot示范。
    x=题目 + 提示词 + 可选示例x = \text{题目 + 提示词 + 可选示例}
  2. s_θ(x,a)(匹配分数)模型内部计算的、衡量“题目x与答案a的匹配程度”的原始分值,可以理解为“直觉上的信心值”。
    sθ(x,a)=模型对组合的置信度s_{\theta}(x, a) = \text{模型对组合的置信度}
  3. exp(指数函数)把可能是负数的匹配分统统转为正数,并放大差异,让高分选项更突出。
    exp⁡(z)=ez(e≈2.718)\exp(z) = e^{z} \quad (e \approx 2.718)
  4. 分母归一化对四个候选答案(A/B/C/D)分别算出exp值后求和,每个答案的exp值除以总和,就变成“概率”——四个概率之和始终等于1。
    P(a∣x)=es(x,a)es(x,A)+es(x,B)+es(x,C)+es(x,D)P(a|x) = \frac{e^{s(x,a)}}{e^{s(x,A)} + e^{s(x,B)} + e^{s(x,C)} + e^{s(x,D)}}

成绩解读

考完了,分数出来了,最难的部分来了:怎么看成绩单? 普通的家长只盯着总分的数字,有经验的班主任却会看三个维度的信息:总分在年级什么位置、各科是否偏科、相比上次是进步还是退步。AI评测成绩的解读也有同样的三层逻辑。

第一层:总体平均分。 C-Eval榜单上的“Average“列,就是把所有学科准确率按题量加权平均后的总成绩。它决定了模型在”年级排名“中的大档位——50分以下是”不及格“,60分以上是”及格线“,70分以上属于”优秀梯队”。但只看平均分会犯大错:一个模型可能在STEM科目拿90分、人文只有20分,平均后还能有55分,看上去还行,实际上文科已经完全不可用。

第二层:学科分布。 这也是C-Eval榜单提供“按学科排序查看”功能的原因。你需要问自己:我的业务需要哪些学科?做客服,法律、职业、商科分数更重要;做教育产品,初中、高中学科分数更重要。这就像重点大学的强基计划——不看你总分,看你物理是不是够亮眼。

第三层:人类基线。 C-Eval论文中给出了一个重要参照:经过教育的人类平均准确率约为58.5分。这意味着,一个模型如果低于58.5分,它在中文知识综合能力上还不如一个认真学习的高中生;超过这个线,才谈得上“达到了人类知识水平的及格线”。这在向非技术领导解释“模型到底行不行”时,是非常有说服力的一把尺子。

记住:成绩单不是用来贴墙炫耀的,而是用来做决策的。选模型时,看行业相关学科分;升级模型时,看总分是否下降;向上汇报时,拿人类基线做参照物。一个会读成绩单的AI工程师,比只会跑榜单的工程师,在老板眼中值钱得多。

Aoverall=∑j=152NjAˉj∑j=152NjA_{\text{overall}} = \frac{\sum_{j=1}^{52} N_{j} \bar{A}_{j}}{\sum_{j=1}^{52} N_{j}}
总体平均分 = 各学科“题数 × 学科准确率”的总和 ÷ 总题数。这相当于高考“加权总分”——题目多的学科,对总分的影响更大。
  1. N_j(学科题量)每个学科的题目数量。C-Eval中“大学”类学科题量一般比“初中”类多,所以它们在总分中的权重也更大。
    Nj=学科 j 的题量N_{j} = \text{学科 } j \text{ 的题量}
  2. Ā_j(学科准确率)上一节算出的单科得分率,取值范围0到1。它与N_j相乘得到“该学科贡献的加权分”。
    Aˉj=学科 j 答对题数Nj\bar{A}_{j} = \frac{\text{学科 } j \text{ 答对题数}}{N_j}
  3. 分子求和把52个学科的加权分全部累加,相当于把各科成绩按权重汇总成“总分”。
    总分=∑j=152NjAˉj\text{总分} = \sum_{j=1}^{52} N_j \bar{A}_j
  4. 分母归一化用总题量 ∑N_j 除以加权总分,得到0到1之间的“综合得分率”,即榜单上的平均分。
    Aoverall=加权总分总题数A_{\text{overall}} = \frac{\text{加权总分}}{\text{总题数}}

RAG落地应用

我们终于在RAG客服系统里相遇了。前面铺垫了这么多,就为了回答这个项目中最现实的问题:国内C-Eval/CMMLU这套“高考”,怎么用到客服系统的日常开发中? 答案可以浓缩成一句话:把评测当“员工考核”,而不是“荣誉榜”。

第一个应用场景:底座模型选型。 客服系统的对话能力由底座LLM决定。候选模型可能有五六个,价格、延迟都相近,怎么选?用C-Eval/CMMLU先跑一遍,按客服业务的学科权重排序:法律咨询多的看“法律”学科,电商售后的看“商科”和“职业”学科。这就是给候选“员工”做入职笔试。

第二个应用场景:升级回归测试。 你不可能直接把新模型替换到线上。正确做法是:把旧模型在新版本上的C-Eval/CMMLU成绩作为基线,升级后重新评测,算出一个“能力增益”。如果总分提升但某些关键学科下降超过3个百分点,说明新模型在这些领域出现知识“回退”,需要谨慎上线。

第三个应用场景:RAG知识库质量监控。 评测集也可以当作“探针”:从C-Eval的学科题中抽取与客服业务相关的题目,改造成问答题形式,注入RAG系统后测试。如果某个学科的正确率显著低于基线,说明知识库对这个领域的检索覆盖率不足——就像班主任发现班里学生的化学普遍低分,那多半是化学老师(知识库)出了问题。

这样一来,“高考”就不再是每年六月的一次性事件,而是贯穿客服系统生命周期的常态化考核:入职(选型)考一次,晋升(升级)考一次,日常(监控)抽考。你的RAG客服系统,从此有了一套清晰的能力体检表。

G=Anew−AbaseG = A_{\text{new}} - A_{\text{base}}
能力增益 = 新模型总体准确率 - 旧模型总体准确率。正数代表升级带来提升,负数代表退化。这是每次模型升级验收时最核心的一个数字。
  1. A_base(旧模型基线)升级前模型在同一套评测题集上的准确率,作为对照基准。
    Abase=升级前的评测准确率A_{\text{base}} = \text{升级前的评测准确率}
  2. A_new(新模型成绩)同一套题、同样的评测方法,换上新模型重跑得到的准确率。
    Anew=升级后的评测准确率A_{\text{new}} = \text{升级后的评测准确率}
  3. G(增益)两者之差。G > 0 表示进步,G < 0 表示回退,G ≈ 0 表示“换了模型但能力没变化”。
    G=Anew−AbaseG = A_{\text{new}} - A_{\text{base}}

AI 应用场景

底座模型选型——给客服系统“高考招聘”

阶段:模型选型 / 采购决策

解决的问题:市面上可选的中文大模型众多,仅凭口头宣称的“中文能力强”无法量化对比。传统方式靠个别评测截图或人工试聊,结论主观且难以复现。用C-Eval/CMMLU对候选模型统一评测,能把“谁更适合做客服底座”变成一个可量化的排序。

具体案例:某电商客服团队有3个候选模型,在C-Eval的“职业+商科”学科子集上分别得到62%、55%、48%的准确率,在CMMLU常识类题上分别得到58%、61%、52%。团队选择第一个模型做底座——尽管它在CMMLU上略低于第二个,但客服场景最看重的商业、职业知识明显占优,最终上线后售后问题解决率提升12%。

客服模型升级回归测试——防止“升级变降级”

阶段:模型迭代 / 版本发布

解决的问题:新版本模型可能在特定任务上提升,但中文基础知识出现回退(如特定领域术语能力下降)。传统做法是仅依赖线上A/B测试,但线上流量小、观测周期长,风险高。离线用C-Eval/CMMLU跑回归,能在上线前快速发现知识回退。

具体案例:客服系统从V1升级到V2,C-Eval总体成绩从61%提升到64%,但“法律”学科从58%下降到52%。团队定位到V2在法律领域训练数据被新数据稀释,回滚后重新微调,再测法律学科恢复到57%,才允许发布。

知识库短板探查——给RAG系统照一张“CT片”

阶段:RAG优化 / 知识库建设

解决的问题:客服系统面对用户问题时,经常出现“检索到了但答不对”或“根本没检索到”的情况。传统排查靠人工翻阅日志,效率低。把C-Eval学科题改造成客服问答题集,注入RAG系统评测,能快速定位知识库的学科短板。

具体案例:团队把C-Eval“医学”类题目改写成“我最近血压偏高,请问……”的客服问法,投喂给RAG客服系统,发现准确率仅38%,而模型本身零样本下有55%。对比后确认是向量检索对医学术语的分词和召回不佳,于是补充了医学同义词库和知识段落切分规则,二次评测提升到51%。

Python 演示

python57 行
# -*- coding: utf-8 -*-"""模拟C-Eval风格评测:给AI模型打分的小工具"""import random  class MockModel:    """模拟一个正在'备考'的大模型"""     def __init__(self, name, smart=False):        self.name = name        self.smart = smart        self.gc_count = 0     def answer(self, options):        self.gc_count += 1        if self.smart:            for opt in options:                if "视科目" in opt or "看科目" in opt:                    return opt            return options[1]        return options[0]  def load_mini_eval():    """构造迷你版C-Eval数据集:涵盖四个学科的选择题"""    return [        {"subject": "初中数学", "question": "1+1等于多少?", "options": ["A.1", "B.2", "C.3"], "answer": "B.2"},        {"subject": "高中物理", "question": "重力的方向是?", "options": ["A.向上", "B.向下", "C.水平"], "answer": "B.向下"},        {"subject": "大学计算机", "question": "1MB等于多少?", "options": ["A.1024KB", "B.1000KB", "C.2048KB"], "answer": "A.1024KB"},        {"subject": "职业会计", "question": "记账凭证中贷方表示?", "options": ["A.收入", "B.支出", "C.视科目而定"], "answer": "C.视科目而定"},    ]  def evaluate(model, questions):    """逐题作答并统计总分,返回 (正确数, 总题数, 准确率)"""    correct = 0    for q in questions:        if model.answer(q["options"]) == q["answer"]:            correct += 1    total = len(questions)    return correct, total, correct / total  def print_report(name, correct, total, acc):    print("=" * 30)    print("模型:", name)    print("正确:", correct, "/", total)    print("准确率: {:.1%}".format(acc))  if __name__ == "__main__":    random.seed(42)    dataset = load_mini_eval()    for smart in (False, True):        model = MockModel("精调模型" if smart else "粗训模型", smart=smart)        c, t, a = evaluate(model, dataset)        print_report(model.name, c, t, a)
目的:模拟C-Eval评测流程——加载一个4道题的迷你中文题库,让两个“模型”分别作答,输出各自的准确率成绩单。它还演示了“学科”维度的数据组织方式。
  1. def load_mini_eval():构造迷你评测集,每道题包含学科、题干、选项和标准答案,对应C-Eval的JSON数据格式
  2. class MockModel:用一条规则模拟模型行为,方便在不调API的情况下演示评测流程
  3. model.answer(q["options"])让模型对一道选择题作答,返回它选择的选项文本
  4. if model.answer(q["options"]) == q["answer"]:将模型输出与标准答案比对,答对才计分
  5. correct / total计算准确率,对应文章中的核心公式 Accuracy
  6. random.seed(42)固定随机种子,保证结果可复现,模拟真实评测的“确定性”
  7. print_report(...)按成绩单格式打印结果,模拟C-Eval榜单的展示方式

常见误区

误区“我一直以为C-Eval就是给AI考语文和常识,像小学《练习册》一样简单。模型只要中文说得溜,随便考个85分没问题。”

正解C-Eval的52个学科覆盖STEM、人文、社科、职业等大量专业领域,很多题需要真正的领域知识。论文中经过教育的人类平均水平也仅为58.5分左右。中文流利只代表“会读题”,离“会做题”还差得远——就像语文成绩好不代表数学能拿高分。

为何常见:看到“选择题”和“中文”两个词,容易联想起小学考试,低估其专业性;加上厂商宣传时总晒高分榜,让外行误以为刷分很容易。

误区“我把C-Eval、CMMLU、CMMMU的分数放一起排个平均分榜,谁均值高谁就全面胜出,选模型就看这个榜。”

正解三者题库构建方式、学科种类、题型都有本质差异:C-Eval侧重知识广度,CMMLU侧重知识与推理深度,CMMMU引入多模态图文理解。就像语文卷、理综卷和美术加试——总分第一不代表每科都强。选型要看业务场景,客服系统应重点看C-Eval的“职业/商科”类学科和CMMLU的常识类主题。

为何常见:人天生想用一个数字排名来降低决策复杂度,却忽略了评测工具的“目的决定指标”原则。

误区“我把C-Eval题目直接丢给模型,它只得了40分,我立刻断定这个模型中文能力不及格,准备换掉。”

正解零样本条件下,模型往往是因为不熟悉“只输出选项字母”这类答题格式而丢分,真实知识储备未必差。加上5条few-shot示例或思维链CoT提示后,同一模型可能从40分跳到60分以上。裸考成绩低,不代表实力差,可能是“考试技巧”不到位——评测方法需要与模型能力匹配。

为何常见:对few-shot和提示工程的作用不了解,把“没有示范的裸考”误当成“模型的真实水平”,忽略了评测协议本身也是分数的一部分。

误区“C-Eval的题大家都看得到,模型厂商早就拿这些题做过提示词优化了,我再用它评测有什么意义?”

正解任何公开评测集都存在“刷题”风险,但它的核心价值不在“绝对分”,而在“相对比较”:同一个模型升级前后的成绩差、不同候选模型在同一评测协议下的位次、以及学科维度的偏科画像。就像高考真题每年公开,但用它做模拟考的意义在于排名,而不是卷面绝对分。

为何常见:把公开榜单当成“最终结论”,忽视了评测集作为工程“度量工具”的定位——尺子可能被磨损,但用它量相对身高仍然有效。

面试题

Q1. C-Eval评测集一共包含多少个学科?

单选题 · easy

  • A.32个学科
  • B.42个学科
  • C.52个学科← 正确答案
  • D.62个学科

答案:C。C-Eval的官方设计是52个学科,这也是它区别于一般中文评测的最大特征——覆盖面广。32、42、62都是干扰数字,说明对基础数字的记忆不够准确。记住52这个数,就像记住高考考几科一样重要。

Q2. C-Eval的题目类型是什么?

单选题 · easy

  • A.填空题型
  • B.判断题型
  • C.选择题型← 正确答案
  • D.简答题型

答案:C。C-Eval全部采用多项选择题(选择题型),这样设计的好处是评分客观、可自动比对。如果C-Eval有简答题,自动评测的难度会大幅上升,榜单也就无法像现在这样标准化。

Q3. CMMLU的完整含义是什么?

单选题 · easy

  • A.中文多任务语言理解← 正确答案
  • B.中文多模态理解评测
  • C.中文多学科能力评测
  • D.中文跨语言迁移评测

答案:A。CMMLU是“Chinese Multi-task Language Understanding“,直译就是”中文多任务语言理解”。它的特点正是多任务、多主题。B选项描述的是CMMMU(多模态),C选项更贴近C-Eval,D选项则是混淆项。

Q4. C-Eval的四个难度层级是以下哪一组?

单选题 · mid

  • A.初中、高中、大学、职业← 正确答案
  • B.入门、中级、高级、专家
  • C.基础、应用、综合、研究
  • D.语言、数学、科学、历史

答案:A。C-Eval模仿真实教育体系,将题目按初中、高中、大学、职业四个层级划分,形成纺锤形难度分布。B选项是通用难度词,C选项是抽象的层级划分,D选项是学科分类而非难度层级——这三者都偏离了C-Eval的真实设计。

Q5. 以下哪些领域属于C-Eval的学科覆盖范围?

多选题 · mid

  • A.STEM理工领域← 正确答案
  • B.人文社科领域← 正确答案
  • C.医学法律领域← 正确答案
  • D.图像识别领域

答案:ABC。C-Eval的52个学科覆盖STEM、人文社科、医学、法律、商科等知识领域。但D选项“图像识别”不属于C-Eval——C-Eval是纯文本选择题,图像理解是CMMMU的考察范围。这题考查的是对三大基准边界的清晰认知。

Q6. C-Eval论文中给出的“受过教育的人类平均水平”大约是多少?

单选题 · hard

  • A.平均45.2分
  • B.平均58.5分← 正确答案
  • C.平均72.3分
  • D.平均85.1分

答案:B。论文中人类基线约为58.5分,意味着一个模型低于这个分数,在中文综合知识能力上不如一个认真学习的高中生。58.5分这个基线的意义在于:它给了“模型是否达到人类水平”一个直观参照,是所有成绩解读中最有说服力的锚点。

Q7. 关于思维链CoT提示方法,以下说法正确的是?

多选题 · mid

  • A.引导模型逐步推理← 正确答案
  • B.提高复杂题准确率← 正确答案
  • C.必定降低推理性能
  • D.要求模型给出解释← 正确答案

答案:ABD。CoT(思维链)通过让模型在给出答案前写出推理步骤,引导逐步思考,能提升数学、逻辑等复杂题的准确率,D选项的“要求模型给出解释”正是CoT的具体做法。C选项“必定降低性能”是错的——CoT只在部分简单题上无益,但谈不上必定降低性能。

Q8. 在RAG客服系统中,C-Eval/CMMLU的主要用途是什么?

单选题 · hard

  • A.向量数据库替代组件
  • B.底座模型选型与评测← 正确答案
  • C.前端交互渲染引擎
  • D.客服日志存储系统

答案:B。RAG客服系统用C-Eval/CMMLU做三件事:底座模型选型、升级回归测试、知识库短板探查,本质是把评测集当成模型能力考核工具。A、C、D选项分别属于存储、前端、日志系统,与评测无关。这题考的是评测基准在真实工程链路中的定位。

Q9. 关于CMMMU的说法,哪些是正确的?

多选题 · mid

  • A.属于多模态评测体系← 正确答案
  • B.考察图文关联理解← 正确答案
  • C.只包含纯文本题目
  • D.覆盖理科与工科领域← 正确答案

答案:ABD。CMMMU是中文多模态评测,每道题包含图像与文字的组合,考察视觉与语言的协同推理;它覆盖30个学科、六大核心领域,其中包括理科与工科。C选项“只包含纯文本题目”与CMMMU的核心设计完全相反,排除。

Q10. 关于few-shot评测策略,以下说法正确的是?

单选题 · hard

  • A.在提示词中给若干示例← 正确答案
  • B.增加额外训练数据量
  • C.提升解码温度采样
  • D.禁止模型参考上下文

答案:A。few-shot的“shot“指示例数量,5-shot就是在提示词里拼接5组”题目-答案“对作为示范,让模型理解答题格式。B选项混淆了”训练数据“与”推理时的示例”,C选项温度是解码参数,D选项与少样本的初衷相反。在C-Eval评测中,5-shot是官方最常用的默认协议。