免费POC, 零成本试错
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


我要投稿

AI应用上线就崩?你可能缺个“评测引擎”

发布日期:2026-01-22 22:27:36 浏览次数: 1530
作者:通义大模型

微信搜一搜,关注“通义大模型”

推荐语

还在为AI应用上线就崩而头疼?OpenJudge评测引擎帮你从"凭感觉调优"升级为"量化评估",让AI应用真正具备企业级可靠性。

核心内容:
1. AI应用从Demo到生产环境面临的典型困境与根本原因
2. OpenJudge评测框架的核心功能与三大应用场景
3. 解决企业级AI评测深水区的关键技术与创新方案

杨芳贤
53AI创始人/腾讯云(TVP)最具价值专家

你的AI应用是不是“一上线就崩”?调优全靠感觉,修复一个 Bug 却引入两个新问题?

很多开发者在从 POC(早期原型)走向真实生产环境时都会遇到这样的困境:在 Demo 中惊艳的 Agent,一旦面对海量用户和复杂业务,就开始“盲人摸象”,只能靠猜测反复修补 Prompt,修复一个问题又祈祷不要触发其他 Bug。

这背后的根本问题是:从“Demo 惊艳”到“企业级可靠”之间存在一道必须跨越的鸿沟。

行业领先者早已意识到:评测驱动迭代是 AI 应用从原型走向生产的关键路径。无论是 Anthropic 构建 Claude Code,还是 Shopify 保障电商交易链路,都验证了同一原则:从依赖主观反馈转向量化评估、从人工抽检转向自动化评测,才能支撑 AI 从 Demo 走向规模化。

项目地址 (GitHub):https://github.com/agentscope-ai/OpenJudge


官方文档:https://agentscope-ai.github.io/OpenJudge/

OpenJudge 正是为此而生的开源自动化评测框架,由通义实验室和阿里云-计算平台事业部共同推出,在企业级场景下进行过打磨和验证,赋能阿里云百炼、人工智能平台PAI、蚂蚁集团等多个业务。

它提供了50+即拿即用且高质量的评测器,多种评测器自定义方法,能够快速对业务目标,以及无缝集成到现有工作流,帮助开发者实现从“凭感觉调优”到“评测驱动迭代”的范式转变。

作为开发者,你可以利用 OpenJudge 完成以下核心场景。

1、快速构建多维度评测指标:调用内置50+专业评测器,覆盖从语义相关性到 Agent 核心逻辑的全方位评估。

2、构造业务场景专属评测器:无论是冷启动期的零样本生成,还是成熟期的专属模型训练,都能让评测器深度适配你的业务逻辑。

3、无缝集成现有研发工作流:已完成与 Langfuse、LangSmith、verl、trinity-rft 等框架的深度适配,评测结果可观测,可作为奖励函数支持模型训练,让优化形成闭环。


面对企业级评测的深水区,OpenJudge 深入解决了几个根本性难题:

对于开发者而言,最令人头疼是 “模型看起来在工作,但你不知道它什么时候会出错”这源于 AI 评测的两个根本盲区:

1、业务需求是“多选题”:用户要的不仅是“答案正确”,还要它相关、真实、安全、有用,不能只靠单一维度评测。

2、决策过程是“黑匣子”:任务失败时,无法诊断:是规划偏了?工具调用错了?还是记忆乱了?

为了打破这种“盲盒状态”,OpenJudge 提供了 50+ 即拿即用的专业评分器,实现了对 Agent 行为全方位可观测

1、全场景覆盖内置针对文本质量代码逻辑数学推导多模态(图文对齐)的专项评估器。

2、深度拆解 Agent 行为链:追踪其推理轨迹的逻辑性,检验工具调用的准确率与效率,并评估记忆提取的有效性与自我纠错能力

为解决此困境,OpenJudge 建立了一套让评测结果 可信、可比、可解释的机制,确保每一次评分都经得起检验,让“评测驱动迭代”真正成为可信赖的工程实践。

1、从“模糊主观”到“结构化准则”将复杂评估拆解为细粒度、可解释的评分点,通过明确的得分区间和具体加减分项,将感性判断转化为理性逻辑。每次打分都附带详细理由,让你清楚看到判定依据。

2、设立“黄金数据集”上岗考试每个评测器在正式“上岗”前,必须通过在黄金数据集上的 “对齐性校验” 。只有其评分与高质量人工标注高度一致、准确率达标(平均80%以上)的评测器,才会被投入使用,从源头保障评测的客观与可靠。

预置评测器准确率


每个垂直场景都有其独特的逻辑准则,金融行业重点关注风控合规与事实准确性、医疗领域对事实幻觉零容忍,需要极高的专业严谨性、电商客服要求话术与品牌风格高度一致......通用的评测标准无法覆盖这些垂直领域的特殊要求,导致评测结果与真实业务价值脱节。

OpenJudge 的提供 “三阶进化”适配路径,让评测体系与你的业务共同成长:

1、冷启动:零样本生成,5分钟建立防线

即使在没有标准、没有数据的项目初期,只需输入一段业务场景描述,OpenJudge 即可自动生成专属评测准则,快速将模糊的业务需求转化为可量化的评估指标。

2、有数据后:小样本演进,将专家经验“编码”

当积累少量人工审核数据后,可提供典型正/负样本(Few-Shot)。OpenJudge 能够从中提炼业务特有的评价偏好,实现从“人工抽检”到“全量自动化评测”的跃迁,大幅降低人力成本与标准不一的风险。

3、高要求场景:训练专属评测模型,构筑技术护城河

对于追求极致准确率或处于强监管行业的场景,OpenJudge 支持基于海量行业数据训练专属评测模型。这不仅能让评测识别更细微的错误,其生成的信号还可直接转化为Agent微调的 Reward(奖励)信号,实现业务目标与模型进化的像素级对齐。

OpenJudge 深度融入了 AI 开发的全生命周期,能够无缝对接开发者已有的工具链:

1、主流观测平台即插即用OpenJudge 已完成对 Langfuse 和 LangSmith 的深度适配。开发者可以直接在这些平台上调用 OpenJudge 的高质量评分器,实现从生产环境监控到自动化评估的无缝衔接。

2、驱动模型训练进化OpenJudge 已经完成和 verl、trinity-rft 的适配,评测器生成的评估信号将直接转化为模型微调的奖励信号,确保 Agent 的进化方向与业务指标实现像素级对齐。

3、低成本嵌入现有流水线通过标准化的模块设计,OpenJudge 能够轻松对接企业现有的 CI/CD 流水线或数据处理链路,大幅降低评测体系的建设与维护成本。

为进一步降低开发门槛,我们计划集成 AgentScope 等主流 Agent 开发框架。这将支持开发者在 Agent 的构建阶段即引入评测,实现“边开发、边评测、边优化”的高效循环。

下面我们以电商智能客服 Agent 的订单查询业务为例,演示如何通过评测驱动的方式持续优化 Agent 能力。


场景背景

OpenJudge

某电商公司开发了一个智能客服 Agent,专门处理用户的订单查询需求:

  • 查询物流状态

  • 预计到达时间

  • 处理用户因物流问题产生的焦虑情绪

Agent 可调用的工具⬇️

TOOL_DEFINITIONS = [    {"name""query_order""description""查询订单状态和物流信息""parameters": {"order_id""str"}},    {"name""query_logistics""description""查询详细物流轨迹""parameters": {"order_id""str"}},    {"name""estimate_delivery""description""预估送达时间""parameters": {"order_id""str"}},]

我们的进化路径⬇️

1、标准化筑基:利用 OpenJudge 丰富的预置评测器,快速补齐基础能力短板,让应用达到 80 分。

2、业务化进阶:通过构造场景专属评测器,注入专家经验,打造满分级的垂直领域应用 。

此阶段的目标是快速定位 Prompt 缺陷与工具调用逻辑的硬伤 

✅ step1: 构建多维评测指标

评测方案包括两部分:

1、评测维度一个合格的订单助手必须在相关性真实性(防幻觉)和工具选择三个维度上表现稳健。

2、维度权重每个评测维度的重要程度。

以下表格是一个示例:

✅ step2: 收集测试样本(基于当前版本 Agent 回复)

制定评测方案后,可以收集当前版本 Agent 的回复,构建测试集,来量化评估当前  Agent 效果怎么样。你可以设置一个 Agent 合格的阈值,来帮助你设置 milestone。

以下是测试样本的示例 ⬇️

##response中当前版本Agent的回答dataset = [    {"query""我的订单 ORD123456 到哪了?""response""您好!您的订单 ORD123456 已到达北京分拨中心,预计明天送达。""context""订单 ORD123456:已到达北京分拨中心,预计明天到达。""tool_definitions": TOOL_DEFINITIONS, "tool_calls": [{"name""query_order""arguments": {"order_id""ORD123456"}}]},    {"query""订单 ORD789 什么时候能到?我等了好几天了!""response""您的订单预计明天到达。""context""订单 ORD789:运输中,预计后天到达。""tool_definitions": TOOL_DEFINITIONS, "tool_calls": [{"name""estimate_delivery""arguments": {"order_id""ORD789"}}]},  # 编造信息    {"query""帮我看看 ORD456 的物流轨迹""response""好的,您的订单物流轨迹如下:1月10日发货 → 1月11日到达中转站 → 1月12日派送中。""context""订单 ORD456 预计明天到达。""tool_definitions": TOOL_DEFINITIONS, "tool_calls": [{"name""estimate_delivery""arguments": {"order_id""ORD456"}}]},]

✅ step3: 执行评测

利用OpenJudge 的GradingRunner 开启并发评测。你可以配置 WeightedSumAggregator 来计算综合得分 ,以下是代码 Demo。

import asynciofrom openjudge.models import OpenAIChatModelfrom openjudge.graders.common.relevance import RelevanceGraderfrom openjudge.graders.common.hallucination import HallucinationGraderfrom openjudge.graders.agent.tool.tool_selection import ToolSelectionGraderfrom openjudge.models.schema.prompt_template import LanguageEnumfrom openjudge.runner import GradingRunnerfrom openjudge.runner.aggregator import WeightedSumAggregatorfrom openjudge.analyzer.statistical import DistributionAnalyzerTOOL_DEFINITIONS = [{"name""query_order""description""查询订单状态和物流信息""parameters": {"order_id""str"}}, {"name""query_logistics""description""查询详细物流轨迹""parameters": {"order_id""str"}}, {"name""estimate_delivery""description""预估送达时间""parameters": {"order_id""str"}}]##response中当前版本Agent的回答dataset = [    {"query""我的订单 ORD123456 到哪了?""response""您好!您的订单 ORD123456 已到达北京分拨中心,预计明天送达。""context""订单 ORD123456:已到达北京分拨中心,预计明天到达。""tool_definitions": TOOL_DEFINITIONS, "tool_calls": [{"name""query_order""arguments": {"order_id""ORD123456"}}]},    {"query""订单 ORD789 什么时候能到?我等了好几天了!""response""您的订单预计明天到达。""context""订单 ORD789:运输中,预计后天到达。""tool_definitions": TOOL_DEFINITIONS, "tool_calls": [{"name""estimate_delivery""arguments": {"order_id""ORD789"}}]},  # 编造信息    {"query""帮我看看 ORD456 的物流轨迹""response""好的,您的订单物流轨迹如下:1月10日发货 → 1月11日到达中转站 → 1月12日派送中。""context""订单 ORD456 预计明天到达。""tool_definitions": TOOL_DEFINITIONS, "tool_calls": [{"name""estimate_delivery""arguments": {"order_id""ORD456"}}]},]
async def main():    ## step1: 初始化裁判员模型,size越大的模型一般评测能力也越强    model = OpenAIChatModel(model="qwen3-max")    ## step2: 声明使用哪些评测器    grader_configs = {"relevance": {"grader": RelevanceGrader(model=model, language=LanguageEnum.ZH), "mapper": {"query""query""response""response"}}, "hallucination": {"grader": HallucinationGrader(model=model, language=LanguageEnum.ZH), "mapper": {"query""query""response""response""context""context"}}, "tool_selection": {"grader": ToolSelectionGrader(model=model, language=LanguageEnum.ZH), "mapper": {"query""query""tool_definitions""tool_definitions""tool_calls""tool_calls"}}}    ## step3: 设置评测器的权重    aggregator = WeightedSumAggregator(name="overall_score", weights={"relevance"0.3"hallucination"0.4"tool_selection"0.3})    ## step4: 初始化GradingRunner,并且执行评测    runner = GradingRunner(grader_configs=grader_configs, aggregators=[aggregator], max_concurrency=5)## 并发度    results = await runner.arun(dataset)    ## step5: 利用Analyzer产出评测报告    analyzer = DistributionAnalyzer()    relevance_stats = analyzer.analyze(dataset, results["relevance"]); hallucination_stats = analyzer.analyze(dataset, results["hallucination"])    tool_selection_stats = analyzer.analyze(dataset, results["tool_selection"]); overall_stats = analyzer.analyze(dataset, results["overall_score"])    stats_list = [("综合评分", overall_stats), ("相关性", relevance_stats), ("幻觉检测", hallucination_stats), ("工具选择", tool_selection_stats)]    print("\n" + "=" * 70 + "\n评测报告\n" + "=" * 70 + f"\n{'各个维度得分':<15} | {'平均分':>10}\n" + "-" * 30)    for name, stats in stats_list: print(f"{name:<15} | {stats.mean:10.2f}")
asyncio.run(main())

评测报告示例 ⬇️

======================================================================评测报告======================================================================各个维度得分          |        平均分------------------------------综合评分            |       3.90相关性             |       5.00幻觉检测            |       3.00工具选择            |       4.00------------------------------
各个测试用例得分
【测试用例 1】我的订单 ORD123456 到哪了?  ├─ 相关性: 5.0/5  ├─ 幻觉检测: 5.0/5  ├─ 工具选择: 5.0/5  └─ 综合评分: 5.00/5
【测试用例 2】订单 ORD789 什么时候能到?我等了好几天了!  ├─ 相关性: 5.0/5  ├─ 幻觉检测: 2.0/5  ├─ 工具选择: 5.0/5  └─ 综合评分: 3.80/5
【测试用例 3】帮我看看 ORD456 的物流轨迹  ├─ 相关性: 5.0/5  ├─ 幻觉检测: 2.0/5  ├─ 工具选择: 2.0/5  └─ 综合评分: 2.90/5

✅ step4: 基于评测结果优化 Agent

基于各个维度评测,结果我们可以发现目前版本的不足:幻觉严重(平均分3分)和工具选择(平均分3.67)。

相关性是基本达标的,所以下一步优化的重点:

如果想进一步分析具体 case,可以继续分析每个测试用例的具体得分。

优化后重新评测,直到综合评分稳定在 4 分以上,再进入下一阶段。(4分只是作为演示用,可以设置合适的阈值。)


当基础能力达标后,通用的指标已无法捕捉垂直业务的“隐性缺陷”,例如同理心预期管理


为什么需要场景专属评测


预置评测器是面向通用场景构建的,能够发现基础能力的缺失(相关性、幻觉、工具调用),如果预置评测器没有覆盖场景特有的需求,就需要构建场景专属的评测器。

例如,在订单查询场景中,用户常因物流延迟产生焦虑情绪:

  • Agent 是否识别了用户情绪?

  • Agent 是否表达了同理心?

  • Agent 是否给出了明确预期来缓解焦虑?

所以需要构建处理用户情绪的评测器,来评估Agent安抚用户情绪的能力。


方案1:零样本生成业务准则 

场景:既无标准也无数据,需要快速建立第一道自动化防线。


即使在既无标准也无数据的冷启动阶段,你只需输入业务描述,OpenJudge 即可自动提炼出量化的评测准则。

✅ step1:描述你想要评测的场景

本例中处理情绪问题,给出一个示例:"电商智能客服主要处理订单查询业务(物流状态、预计到达时间),聚焦在处理用户的情绪问题."

✅ step2: 基于场景描述生成评测准则,构造评测器

import asynciofrom openjudge.generator.simple_rubric import SimpleRubricsGenerator, SimpleRubricsGeneratorConfigfrom openjudge.models import OpenAIChatModelfrom openjudge.graders.schema import GraderModefrom openjudge.models.schema.prompt_template import LanguageEnum
async def main():    # 第一步:配置 Simple Rubric Generator    config = SimpleRubricsGeneratorConfig(        grader_name="order_query_emotion_grader", model=OpenAIChatModel(model="qwen3-max"),         grader_mode=GraderMode.POINTWISE, language=LanguageEnum.ZH,         task_description="电商智能客服主要处理订单查询业务(物流状态、预计到达时间),聚焦在处理用户的情绪问题."        min_score=1, max_score=3)    # 第二步:生成 Grader    generator = SimpleRubricsGenerator(config)    grader = await generator.generate(dataset=[], sample_queries=[])    # 第三步:查看生成的 Rubrics    print("=" * 70 + "\n阶段二:生成的情绪处理 Rubrics\n" + "=" * 70)    print(grader.kwargs.get("rubrics"))    # 第四步:评估测试    test_cases = [{"query""我的订单等了一周还没到,怎么回事?!""response""非常理解您焦急的心情,让您等这么久真的很抱歉!我立即帮您查询:您的订单目前已到达本市配送站,预计今天下午3点前送达。如有任何问题,我会第一时间跟进处理。"}, {"query""我的订单等了一周还没到,怎么回事?!""response""您的订单在配送中。"}]  # 优秀回复:识别情绪 + 同理心 + 明确信息 | 较差回复:忽略情绪,机械回复    print("\n" + "=" * 70 + "\n情绪处理 Grader 评估结果\n" + "=" * 70)    for i, case in enumerate(test_cases):        result = await grader.aevaluate(query=case["query"], response=case["response"])        print(f"\n【测试 {i+1}】\n  用户: {case['query']}\n  客服: {case['response'][:60]}...\n  评分: {result.score}/3\n  原因: {result.reason[:150]}...")
asyncio.run(main())

生成的评测准则示例 ⬇️

1. 情绪安抚有效性:回答是否恰当识别并缓解用户的情绪(如焦虑、不满),使用共情语言或安抚策略
2. 信息准确性:回答中关于物流状态或预计到达时间的信息是否准确、基于事实且与订单实际情况一致
3. 问题解决完整性:回答是否全面回应了用户关于订单查询的核心需求(包括物流状态和预计到达时间)
4. 响应及时性与效率:回答是否简洁明了,在不过度冗长的前提下迅速提供关键信息
5. 语言专业性与礼貌度:回答是否使用礼貌、专业的客服语言,避免引发用户进一步负面情绪

✅ step3: 测试生成的评测器

可以构造几条测试数据,验证刚刚生成的评测器是否有效。

import asynciofrom openjudge.generator.simple_rubric import SimpleRubricsGenerator, SimpleRubricsGeneratorConfigfrom openjudge.models import OpenAIChatModelfrom openjudge.graders.schema import GraderModefrom openjudge.models.schema.prompt_template import LanguageEnum
async def main():    # 第四步:评估测试    test_cases = [{"query""我的订单等了一周还没到,怎么回事?!""response""非常理解您焦急的心情,让您等这么久真的很抱歉!我立即帮您查询:您的订单目前已到达本市配送站,预计今天下午3点前送达。如有任何问题,我会第一时间跟进处理。"}, {"query""我的订单等了一周还没到,怎么回事?!""response""您的订单在配送中。"}]  # 优秀回复:识别情绪 + 同理心 + 明确信息 | 较差回复:忽略情绪,机械回复    print("\n" + "=" * 70 + "\n情绪处理 Grader 评估结果\n" + "=" * 70)    for i, case in enumerate(test_cases):        result = await grader.aevaluate(query=case["query"], response=case["response"])        print(f"\n【测试 {i+1}】\n  用户: {case['query']}\n  客服: {case['response'][:60]}...\n  评分: {result.score}/3\n  原因: {result.reason[:150]}...")
asyncio.run(main())

预期结果 ⬇️

【测试 1】  用户: 我的订单等了一周还没到,怎么回事?!  客服: 非常理解您焦急的心情,让您等这么久真的很抱歉!我立即帮您查询:您的订单目前已到达本市配送站,预计今天下午3点前送达。如有...  评分: 3.0/3  原因: 该回答在情绪安抚方面表现出色,使用了‘非常理解您焦急的心情’‘真的很抱歉’等共情语言,有效缓解用户焦虑;信息准确性高,明确说明订单已到达本市配送站并给出具体送达时间(今天下午3点前);问题解决完整,同时回应了物流状态和预计到达时间两个核心需求;回答简洁高效,未包含冗余信息;语言专业且礼貌,整体语气诚...【测试 2】  用户: 我的订单等了一周还没到,怎么回事?!  客服: 您的订单在配送中。...  评分: 1.0/3  原因: 该回答在多个评估维度上表现不足:1)情绪安抚有效性差,未识别用户因等待一周未收货而产生的焦虑或不满,缺乏共情语言;2)信息准确性低,仅称“在配送中”但未提供具体物流状态、承运商、运单号或预计到达时间,无法验证是否与实际情况一致;3)问题解决不完整,未回应用户关于‘怎么回事’和‘预计何时到’的核心诉求...

评测器验证有效,可以用在Agent迭代过程中了。


方案2:小样本专家经验转化为业务准则

场景:业务运行一段时间后,积累了少量人工审核数据(10+条),发现通用准则无法覆盖垂直业务的“隐性规则”

实现方式:提供少量典型正确/错误示例,OpenJudge 能够识别业务特有的评价偏好,实现从“人工抽检”到“全量自动化评测”的跃迁。

价值:大幅降低人力成本,消除人工标准不一带来的误差。

✅ step1: 构造人工标注数据集

labeled_dataset = [    # 高分样本:情绪处理到位    {        "query""订单等了10天还没到,我要投诉!",        "response""非常抱歉让您等了这么久,完全理解您的不满!我立即查询:您的订单因天气原因在中转站滞留,目前已恢复运输,预计明天送达。我已帮您标记优先配送,如明天未收到请随时联系我,我会亲自跟进处理。",        "label_score"5,  # 满分:识别情绪+道歉+解释原因+明确预期+后续方案    },    {        "query""快递到哪了?急用!",        "response""理解您着急的心情!您的快递目前在派送中,预计今天下午2点前送达,派送员电话138xxxx。如有特殊需求可直接联系派送员。",        "label_score"5,  # 满分:识别情绪+共情+具体信息+解决方案    },    # 中等样本:信息正确但缺乏情绪处理    {        "query""我的订单怎么还没到?等了好几天了!",        "response""您的订单预计后天到达。",        "label_score"2,  # 低分:完全忽略用户情绪    },    {        "query""物流三天没更新,是不是丢了?",        "response""您好,快递没有丢,正在运输中,请耐心等待。",        "label_score"3,  # 中等:回应了担忧但语气生硬    },    # 低分样本:错误或敷衍    {        "query""订单ORD999到哪了?等一周了!",        "response""在配送中。",        "label_score"1,  # 低分:敷衍,忽略情绪    },    # ... 更多标注数据(建议10+条数据)]

✅ step2: 基于标注数据生成评测准则,构造评测器

import asynciofrom openjudge.generator.iterative_rubric.generator import IterativeRubricsGenerator, IterativePointwiseRubricsGeneratorConfigfrom openjudge.generator.iterative_rubric.query_rubric_generator import POINTWISE_EVALUATION_TEMPLATEfrom openjudge.models import OpenAIChatModelfrom openjudge.models.schema.prompt_template import LanguageEnum
# 标注数据集(简化示例,实际建议50-100条)labeled_dataset = [    {"query""订单等了10天还没到,我要投诉!""response""非常抱歉让您等了这么久,完全理解您的不满!您的订单因天气原因滞留,目前已恢复运输,预计明天送达。我已帮您标记优先配送。""label_score"5},    {"query""我的订单怎么还没到?等了好几天了!""response""您的订单预计后天到达。""label_score"2},    {"query""订单ORD999到哪了?等一周了!""response""在配送中。""label_score"1},    {"query""为什么物流一直显示在揽收?""response""抱歉给您带来困扰!经查询,您的包裹因仓库爆仓暂时滞留,预计今天发出,明天更新物流。我会持续关注,有进展第一时间通知您。""label_score"5},]
async def main():    # 第一步:配置 Iterative Rubric Generator    config = IterativePointwiseRubricsGeneratorConfig(        grader_name="order_query_emotion_grader_v2", model=OpenAIChatModel(model="qwen3-max"),        custom_evaluation_prompt=POINTWISE_EVALUATION_TEMPLATE, min_score=1, max_score=5,        query_specific_generate_number=1, enable_categorization=True, categories_number=5, language=LanguageEnum.ZH)    # 第二步:从标注数据生成 Grader    generator = IterativeRubricsGenerator(config)    grader = await generator.generate(labeled_dataset)    # 第三步:查看学习到的 Rubrics    print("=" * 70"阶段三:从标注数据学习到的 Rubrics""=" * 70, grader.kwargs.get("rubrics"), sep="\n")    # 第四步:评估新样本    test_cases = [{"query""订单5天没动静了,能帮我查查吗?有点担心""response""理解您的担心!我立即帮您查询:您的包裹目前在XX中转站,因近期单量较大稍有延迟,预计后天送达。如有任何异常我会主动联系您。"}]    print("\n" + "=" * 70"Iterative Rubric Grader 评估结果""=" * 70, sep="\n")    for i, case in enumerate(test_cases):        result = await grader.aevaluate(query=case["query"], response=case["response"])        print(f"\n【测试 {i+1}】"f"  用户: {case['query']}"f"  客服: {case['response']}"f"  评分: {result.score}/5"f"  原因: {result.reason[:200]}...", sep="\n")
asyncio.run(main())

生成的评测准则示例:

======================================================================从标注数据学习到的 Rubrics======================================================================Rubric 1:Theme: 共情与情绪回应- Tip1: 主动识别并回应用户的情绪(如焦急、不满),表达真诚的理解或歉意- Tip2: 避免形式化、敷衍或冷漠的语气,确保语言体现尊重与关怀- Tip3: 在解释问题或提供信息前,优先安抚用户情绪以建立信任
Rubric 2:Theme: 问题解释的清晰度与具体性- Tip1: 明确说明导致延迟或异常的具体原因(如天气、仓库爆仓、系统故障等),避免模糊表述(如“系统延迟”“正在处理”)- Tip2: 确保解释真实、合理且与用户问题直接相关,不推诿责任或提供错误信息- Tip3: 在无法确定原因时,应坦诚说明并承诺后续跟进,而非猜测或误导
Rubric 3:Theme: 物流信息的准确性与完整性- Tip1: 提供当前订单/包裹的准确状态(如“已出库”“正在派送中”)、实时位置(如所在城市)和承运商信息- Tip2: 给出明确、可信的预计送达时间(尽可能精确到小时或日期),避免笼统表述(如“很快”“今天”)- Tip3: 包含关键辅助信息,如派送员联系方式、物流单号或查询链接,便于用户自主追踪
Rubric 4:Theme: 解决方案的主动性与可行性- Tip1: 主动提出具体、可操作的补救措施(如加急处理、补偿选项、客服直连等),而非仅泛泛承诺“尽快处理”- Tip2: 说明已采取的实际行动(如“已标记优先配送”“已联系快递”),增强用户信心- Tip3: 提供进一步协助的渠道(如客服联系方式、自助查询方式),支持用户持续跟进
Rubric 5:Theme: 服务承诺与后续跟进保障- Tip1: 明确承诺后续进展通知机制(如“有更新将第一时间告知”),体现持续负责态度- Tip2: 设定清晰的时间预期(如“今天发出,明天更新”),并确保其与所采取的行动一致- Tip3: 在无法立即解决时,仍提供阶段性反馈计划,避免让用户处于信息真空

可以看出基于场景标注数据生成的评测准则,更加适配到具体业务场景。上面代码的评测结果 ⬇️

【测试 1】  用户: 这个快递怎么这么慢?我还等着用呢!  客服: 查询中,稍等。  评分: 1.0/5  原因: 该回答严重不符合所有评估标准。在Rubric 1方面,未识别用户焦急情绪(“我还等着用呢!”),未表达共情、理解或歉意,语气敷衍冷漠。在Rubric 2方面,未提供任何关于延迟原因的解释,仅以‘查询中,稍等’搪塞,属于模糊且无实质信息的回应。在Rubric 3方面,未提供任何物流状态、位置、承运商或预计送达时间等关键信息。在Rubric 4方面,未提出任何主动解决方案或补救措施,也未说明已采取的行...

生成的评测器能够正确评估样本,并且会给出原因解释(每个rubric是否满足),帮助Agent迭代。


方案3:训练专属 Judge 模型

场景:追求极致的评测准确率、更低的推理成本,或处于强监管行业需要私有化部署评测模型。

实现方式:支持 SFT(监督微调) 和 RL(强化学习) 模式,在海量行业数据上训练专属评测基座。

价值:构建企业技术护城河。专属 Judge 模型能识别竞争对手难以察觉的细微错误,且评测信号可直接转化为 Agent 进化的 Reward(奖励)信号。

import jsonimport pandas as pd## 以训练BT模型为例# 1️⃣ 准备训练数据chosen = json.dumps([{"role""user""content""What are the benefits of exercise?"}, {"role""assistant""content""Regular exercise improves cardiovascular health..."}])rejected = json.dumps([{"role""user""content""What are the benefits of exercise?"}, {"role""assistant""content""Exercise is good for you."}])df = pd.DataFrame({"chosen": [chosen], "rejected": [rejected]})df.to_parquet("train.parquet")#2️⃣ 执行训练流程# cd cookbooks/training_judge_model/bradley-terry# bash run_bt_rm.sh#3️⃣ 训练后续流程请参考文档:https://modelscope.github.io/OpenJudge/building_graders/training_judge_models/

通过 OpenJudge,你可以将“凭感觉调优”转变为“用数据驱动迭代”。它不仅是评测工具,更是一套让 AI 应用从“Demo可行”走向“企业级可靠”的工程化范式。

Agent 的下半场,属于能持续进化的系统。 现在就去 GitHub 体验 OpenJudge,开启你的量化迭代之旅吧~

推荐阅读


当AI面对“说不清”的需求:如何实现更优解?


多模态搜索新标杆,Qwen3-VL-Embedding&Reranker开源!

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询