作为一位在测试开发领域深耕十余年的从业者,我的经历横跨互联网、智能汽车与 AI 服务等多个行业,在 ToC 产品、中台系统、智能客服、自动驾驶及大模型等业务的质量建设中积累了一定的实践。目前,我担任一家 AI ToB 创业公司的质量团队负责人,负责知识库、智能客服、智能问答等产品的整体质量体系建设。
在传统软件质量模型中,质量维度通常包括功能、性能、可用性、易用性、安全性、兼容性等。2025 年,团队除继续推行传统软件测试质量保障方案之外,我们通过建立 “AI 评测原则”(第 3 章节讲述),并以智能文档问答、智能问答、Agentic 智能体、语音类客服等业务场景为实践场地,逐步在项目中探索并完善各类 AI 效果的评测方法。本文也聚焦于易用性质量维度中的 AI 评测维度,其余维度暂不在本文中展开描述。
在 AI 质量保障实践中,我们主要面临以下三方面痛点:
在 AI 质量保障过程中,评测数据的构建是确保模型效果符合业务需求的关键环节。目前,评测数据主要来源于以下四类:
在实际应用中,数据源的选取一般遵循以下优先级:
客户线上数据回流 > 客户团队手工标注 > 通过工具/大模型泛化生成 ≥ 标注团队手工标注
对于我们当前所处的业务来说,大多数是处于探索阶段的 AI ToB 项目,绝大部分项目缺乏充足的线上真实数据,且客户团队对标注工作的支持度和兴趣度往往有限。因此,实践中一般会首先尝试使用工具或大模型泛化生成评测数据。若生成的评测数据经标注团队抽样检验后符合要求,则优先采用该方式;若效果不理想,且优化成本高于手工构建,则转为由标注团队介入构造。另一种常见做法是采用混合构建策略,例如按照一定比例(如 7:3)将工具生成数据与手工标注数据相结合,以在保证效率的同时降低纯自动生成带来的质量风险。
对于一个 AI 算法来说,评测指标的选取一般要经历三个层面:基础测量指标 → 离散函数层 → 直接业务指标。其中基础测量指标为底层指标(例如 Levenshtein 距离、字准率、句准率、BLEU、ROUGE、BERTScore),可以定量的展现评测结果,但不能展示确定性结果;直接业务指标为顶层指标,这是最贴近业务成果的综合性评价,直接回答了 “系统效果好不好”、“业务目标是否达成” 等核心问题;在基础测量指标和直接业务指标之间可能存在一个离散函数层,通过离散函数将基础测量指标的定量值转化为直接业务指标的定性值。
基础测量指标类型一般有以下四种:
各分类的典型指标见下表所示:
| 基础测量指标分类 | 核心特点 | 语音识别类指标 | 语义匹配类指标 | 值比较类指标 | 代表指标 |
|---|---|---|---|---|---|
| 基于人工复核的指标 | 基于人类历史经验进行复核,与模型无关,受人类个人能力和对领域知识的理解力影响 | 人工语义匹配度 | 人工语义匹配度 | - | - |
| 基于传统规则/简单统计的指标 | 基于规则、词汇匹配、可解释性强、与模型无关 | Levenshtein 距离、字准率、句准率 | ROUGE、BLEU | 字符串全等、字符串前缀匹配、字符串关键字匹配 | - |
| 基于特定模型的指标 | 使用在特定任务上微调的中小模型进行评价 | - | BERTScore | - | - |
| 基于 LLM-as-a-Judge 的指标 | 利用大模型的强大理解和生成能力,进行零样本/少样本的拟人化评估 | 大模型语义匹配度 | 大模型语义匹配度 | - | - |
在实践中,对基础测量指标的选取通常遵循一套决策逻辑,以确保评估效果与实施成本之间的平衡:
在计算直接业务指标前,对于某些基础测量指标通常需要经过一个离散化过程,将一维连续指标的映射到特定的区间集合,再进行准确率、解决率等方面的计算。当然如果基础测量指标的结果本身就是离散的,则不需要进行此步骤的处理,可直接跳过。
以机器翻译评估为例,可通过 BLEU 算法计算两者相似度得分。然而 BLEU 本身是一个连续值,而最终我们需要的是一个 “正确” 或 “错误” 的二元判断。为此,我们可以引入一个单层离散函数,例如设定阈值 $X \geq 0.3$,当 BLEU 值大于等于 0.3 时即判定为正确。
为进一步支持不同阶段的评估需求,离散函数也可设计为多层,从而兼顾研发调试与产品验收的不同目标。例如,可设计第一级离散函数,将 BLEU 分值划分为四个质量等级:
在此基础上,第二级离散函数可根据具体验收标准,将某些等级判定为 “通过”,其余为 “不通过”。例如可将 “中”“良”“优” 视为通过,“较差” 视为不通过。
多层分级设计有双重优势:一方面,细粒度的等级划分有助于研发团队定位问题、分析模型在不同质量区间间的表现;另一方面,客户对 “通过” 标准的定义可能随场景变化,通过灵活调整第二级离散函数的判定逻辑,即可快速适应不同的验收阈值,从而在统一评估体系下满足多样的业务需求。在我们内部实践中,如果多层分级设计不显著增加评测难度,那么采用该方式的实际效果会更好。
在指标呈现原则上,应根据受众背景与需求,分层提供不同深度的评测信息:
在第 3.1 节提到,部分项目的评测过程仍需依赖人工生成/标注/断言。若评测数据量过大,还是会面临人力问题;而数据量过少,则难以满足 “统计学意义”,导致结果受随机波动影响较大,可信度不足。那么,评测数据集的数量应保持在什么规模,才能在控制人力成本的同时,具备一定的统计可靠性呢?
一般来说,针对单条评测语料的判断结果通常为 “正确” 或 “错误”。在评测语料来源尽量随机的情况下,评测结果服从二项分布 $X \sim B(n, p)$,其中参数 $p$ 可视为模型的准确率。根据数理统计中的参数估计理论,当样本量 $n \to \infty$ 时,在 95% 置信水平下,参数 $p$ 的置信区间可用公式 $p \pm 1.96 \cdot \sqrt{\frac{p(1-p)}{n}}$ 表示。
假设在一般项目中,评测准确率的准出值设定为 $p=85\%$,则区间边界与 $p$ 的差值可由公式 $y = \frac{0.699}{\sqrt{x}}$ 计算得出,其中 $x$ 代表数据条数。数据量与误差之间的关系如下:
举例来说,如果在某次评测中使用 300 条数据,测得准确率为 85%,则其实际准确率下限约为 $85\% - 4\% = 81\%$,上限约为 $85\% + 4\% = 89\%$。在 AI 算法评测的实践中,我们通常选取 $n=200 \sim 300$ 条数据,从而将边际误差控制在 4%-5%。与此同时,在构建评测数据时,除关注数据总条数外,还需关注数据分布的合理性,确保各类数据样本均有足够的代表性。
智能问数 (ChatBI) 是一种基于自然语言对话的新型商业智能工具。它将传统 BI 复杂的数据查询、建模和可视化过程,简化为如同与人交谈一般的自然语言交互。用户无需掌握 SQL 或熟悉复杂的报表工具,只需用日常语言提问(如 “去年 XX 渠道销售额最高的产品是什么?”),ChatBI 系统便能理解其意图,自动生成并执行相应的数据查询,并以直观的表格、图表或文本摘要形式返回分析结果。其核心价值在于降低数据分析门槛、提升决策效率,并支持灵活、深度的数据探索。
为确保全面、真实地评估 ChatBI 系统的产品价值,关键在于通过多样性的评测语料覆盖各类用户问法,并将其转化为正确的数据查询与分析结果。评测语料的设计基于用户自然语言查询的三大核心语义要素:原子指标(如销售额、库存量)、加工逻辑(如求和、同比、排名)以及分析维度(如时间、地区、产品)。这三者是构成任何数据查询意图的基础。
以此为基础,评测语料的生成需遵循一套多维度的系统化策略,以确保覆盖从基础功能到核心价值的全场景测试:
为判断结果是否符合要求,一种常见的做法是 SQL 复写法,即由测试人员将评测语料人工翻译为标准 SQL 语句,执行后得到预期结果,再与系统实际输出进行比对。然而,该方法要求测试人员为每条语料编写 SQL,人力成本高昂。
因此,在实践中往往转向一种更为轻量化的断言方案。鉴于 ChatBI 的技术路径(无论是 NL2DS2L2SQL 还是 NL2SQL)最终均会将自然语言转换为 SQL 执行,测试人员可在首次测试时,直接对系统生成的 SQL 进行人工评审 (Review),并人工判断断言结果为正确 (True) 或错误 (False)。在后续的回归测试中,则以首次评审通过时所对应的执行结果作为基准真值 (Ground Truth),进行自动化或半自动化的结果比对,从而在后续工作中相对高效地完成回归验证工作。
ChatBI 的评测通常采用端到端准确率作为核心指标,其定义为:
ChatBI 端到端准确率 = 结果完全符合预期的测试用例数 / 测试用例总数
其中,“结果完全符合预期” 是指 SQL Review 正确且系统返回的数据/表格/图表等均等一致。
基于上述方案,我们利用大模型技术开发了一套评测语料生成工具,并已成功应用于多个 ChatBI 项目的交付测试中。该工具的核心实现思路如下:
在 ChatBI 评测的实践过程中,我们主要遇到以下两类问题,需要进行持续优化。
RAG 是一种将信息检索与大型语言模型相结合的框架。其核心流程是:当收到一个用户查询时,系统首先从一个外部知识库(如文档集合)中检索出相关的上下文片段,然后将这些片段与原始查询一起输入给 LLM,从而生成一个基于可靠来源、减少幻觉的答案。RAG 的关键优势在于能够利用最新的、特定领域的信息,同时保留 LLM 强大的理解和生成能力。
RAGAS 是评测 RAG 流水线而设计的流行开源框架。它的核心理念是通过分析 RAG 内部组件的输出来评估其质量。RAGAS 主要评估以下几个核心过程指标:
我们在实践 RAG 评测时,主要面临以下两类关键问题:
为应对上述挑战,我们在评估实践中采用了一套融合有真值评估与无真值评估的综合断言方法,并辅以针对性的评测语料生成策略。这一组合方案在一定程度上缓解前述的两类问题。
评测语料生成的核心目标是构建一个覆盖多种查询类型与难度层次的多样化测试用例集合,以全面评估 RAG 系统的各项能力。整体生成逻辑是基于实际客户文档,通过抽样选取文档内容并通过大模型反向生成对应问题。为充分保证问题的多样性,我们设计了多层次、多维度的生成方法,具体如下:
通过上述生成方式与问题属性的有机结合,我们所构建的测试语料库能够相对广泛地模拟 RAG 系统在实际应用中可能面对的各种查询场景。
为应对 4.2.1 中提到的 RAGAS 评估指标与业务目标不匹配、真值本身存在局限性的问题,我们设计了一套融合有真值评估与无真值评估的综合断言方法。该方法具体方案如下:
(1 - faithfulness_score) × 模型基准幻觉率 计算。此调整机制确保了在认定实际答案更优时,同时满足高相关性与低幻觉率的要求。RAG Evaluator 是一个面向 RAG(检索增强生成)系统的内部自研自动化评估框架。该框架集成了 RAGAS 和大模型能力,提供从测试语料构建到系统质量评估的端到端解决方案,其标准工作流程为:
输入文章 → 问题生成 → 请求发送 → 质量评估 → 评估报告。
框架的核心由以下三个模块构成:
在 RAG 系统评测的实践过程中,我们主要遇到以下两类问题,需通过持续优化加以解决:
Agentic 智能体(或称 “智能代理”)是指具备自主性、目标导向、能感知环境、进行决策并执行动作的人工智能系统。其基本架构如图所示(包含 Context, Knowledge, Tools, Strategy, LLM)。
与传统基于固定工作流的智能体不同,Agentic 智能体具有更强的主动性与上下文连贯性。这为测试工作带来了以下几项显著挑战:
这些挑战共同指向一个核心问题:如何对具有高度自主性与动态响应能力的智能系统进行可靠、自动化且可重复的测试。以笔记本键盘故障场景为例,若采用人工方式测试智能体 (Agentic),可能呈现如下对话:
场景一:
由于智能体具有动态响应特性,其提问顺序并不固定,因此对于同样的场景也可能出现如下对话:
场景二:
可见在以上两种对话中,尽管智能体的提问不同(第二段对话中用户少回答了一个问题),但两段对话对现实世界产生的结果是一致的。这进一步凸显了对这类系统进行有效测试的复杂性与特殊性。
为了解决上述问题,我们自主研发了 Agentic Tester,采用 “以智能体测试智能体” 的思路,将语料生成、请求发送和结果断言整合为统一流程,并根据 Agent 的响应进行动态实时测试,从而系统地应对前述挑战。该框架的整体结构包含 Agentic Tester 与 Agentic AI Agent 之间的交互逻辑。
框架的核心设计如下:
在 Agentic 智能体评测的实际应用过程中,我们发现约 90% 的情况下 Agentic Tester 能够做出准确判断,但仍存在约 10% 的误判情况。误判的主要原因仍集中在对对话终止条件的动态判定、以及过程与结果的双重断言等环节,这些部分仍需通过持续优化 Prompt 来进一步提升准确性。尽管这需要测试人员投入一定时间进行调试与迭代,但相较于传统手工测试方式,所需的时间和精力仍然处于可控范围内,效率优势依然显著。
语音智能客服是一种结合语音识别、自然语言处理、等多种人工智能技术的客户服务系统。它不仅能处理文字交互,还能通过语音渠道与用户进行自然、高效的沟通。目前语音智能客服广泛应用于金融、售后、公共服务等领域。其关键技术组件包括:
评测语料类型涵盖以下多种语音与语义场景,以全面评估系统性能。
评测语料来源主要来自以下三种途径,确保语料覆盖全面且贴近实际场景。
评测方式: 评测采用人工抽检与自动化检测相结合的方式。考虑到语音测试通常涉及多轮对话、系统承压能力有限,且端到端响应时间较长,为平衡测试效率与覆盖度,自动化检测也需合理控制评测语料条数,避免全量测试带来的过高时间成本。
评测指标: 从 VAD、ASR、NLU、TTS、端到端等几个视角,判断最终效果。
VAD (语音活动检测)
ASR (语音识别)
NLU (自然语言理解)
TTS (语音合成)
端到端
下图(未在 MD 中展示图片)展示了我们内部开发的语音智能客服系统端到端自动化评测工具的架构图。主要流程描述如下:
未来,我们将持续从各行业交付实践中系统化积累评测语料,逐步构建覆盖多领域的标准语料库。同时,积极探索基于多模态大模型的语料自动化生成方法,以提升语料构建效率,显著降低对人工制作的依赖与成本。
以上内容来自我团队在 2025 年 AI 质量保障一线实践中的经验与思考,其中既有局部创新与尝试,也包含不少仍在探索中的不足之处。如果大家对该文章中的评测方法有任何意见或建议,欢迎评论或微信交流。
testerhome.com
报告与源代码版本不匹配,导致数据失真
这是最核心的问题。代码覆盖率报告的每一行都必须能对应到一个具体的源代码文件。在作者的案例中,最终的 HTML 报告是基于 temp-branch (修改后) 的源代码生成的,但覆盖率数据却包含了来自 master (修改前) 分支的执行信息。
mA 和 mC 在 master 分支被执行并记录了覆盖率,但在 temp-branch 中它们已经被删除。最终报告在展示 temp-branch 的代码时,就无法显示 mA 和 mC 的覆盖情况,这份来自旧版本的数据就成了 “幽灵数据”,只会影响总体的覆盖率百分比,但开发者找不到对应的代码。temp-branch 中间被插入了几行代码,那么 master 分支记录的覆盖率行号就可能与 temp-branch 的实际行号对不上,导致报告将覆盖标记显示在错误的代码行上。产生误导性的、虚高的覆盖率指标
覆盖率的核心目标是评估当前版本代码的测试完善程度。将旧版本的测试结果合并进来,会人为地 “膨胀” 覆盖率数字。
违背了代码覆盖率的 “快照” 哲学
一次覆盖率报告应该是某个时间点上 “代码状态” 与 “测试状态” 的一个精确快照。它回答的问题是:“对于这份代码,我们的这套测试跑了多少?”
而 “并集” 报告混合了两个不同时间点的快照,回答的是一个模糊的问题:“对于现在的代码,我们曾经跑过的、来自不同版本的测试加起来能覆盖多少?” 这个指标的指导意义就变得不那么明确了。
保持确定性和单一事实来源
JaCoCo 的设计遵循业界标准:一份报告严格对应一个代码版本和一次(或多次)针对该版本的测试执行。这样可以确保报告的结果是确定性的、可追溯的。开发者看到报告中的任何数据,都能准确地在对应的 Git Commit 中找到源代码和测试用例。
聚焦于 “增量覆盖率” 和变更影响
在现代 CI/CD 流程中,团队更关心的是“本次变更所引入的代码是否得到了充分测试”,即 “增量覆盖率”。JaCoCo 的标准用法能够很好地支持这一点。开发者在一个 Pull Request 中修改了代码,CI 会针对这个分支跑一次测试并产生报告,团队可以清晰地看到新代码的覆盖情况。如果合并历史数据,就无法有效评估当前变更的质量。
避免工具的复杂性
如果官方支持这种 “并集” 功能,就需要处理大量复杂的边界情况,例如如何对齐不同版本的行号、如何处理被重命名的类和方法、如何向用户清晰地展示数据来源等。这会让工具本身变得非常复杂,且容易产生让用户困惑的结果。保持简单、专注于核心场景是优秀开源工具的普遍设计原则。
这种角色有点像产品运营了
行情这么差啊,上海这边社工考试都很紧俏了,热门岗位 100:1 了
Offer 保底: 在目前的环境下,有一个 offer 在手总比没有强,能缓解焦虑。
涨薪 20%: 相对目前的薪资有提升,短期内能改善经济状况。
避免单休: 如果单休是您非常不能接受的点,那么去欢聚可以立即摆脱这个困境。
连续三年 A+ 说明您的工作能力和态度是得到认可的。续签大概率没问题
还有就是 了解试用期的考核标准和转正难度。
大龄就别去了
学历一般的话,35+ 是更难
希望 2025 春节以后就业环境好一点,论坛的兄弟们找工作都顺利
公司年底逼退大龄员工的常规操作吧,能把年终奖发完的都还算好了
持续招人
持续招人
持续招人 ing
部门 HC 多多,欢迎留言交流
有产出的,目前负责公司内的基础设施相关的质量保障
DevOps、AIOps、监控报警相关,还有各种 PaaS 系统,比较偏技术向
股票亏成狗了