链载Ai

标题: AI应用上线就崩?你可能缺个“评测引擎” [打印本页]

作者: 链载Ai    时间: 5 小时前
标题: AI应用上线就崩?你可能缺个“评测引擎”

ingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration: none;background-color: rgb(255, 255, 255);caret-color: rgba(0, 0, 0, 0.9);line-height: 1.6em;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;">你的AI应用是不是“一上线就崩”?调优全靠感觉,修复一个 Bug 却引入两个新问题?

ingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration: none;background-color: rgb(255, 255, 255);caret-color: rgba(0, 0, 0, 0.9);line-height: 1.6em;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;">很多开发者在从 POC(早期原型)走向真实生产环境时都会遇到这样的困境:在 Demo 中惊艳的 Agent,一旦面对海量用户和复杂业务,就开始“盲人摸象”,只能靠猜测反复修补 Prompt,修复一个问题又祈祷不要触发其他 Bug。

ingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration: none;background-color: rgb(255, 255, 255);caret-color: rgba(0, 0, 0, 0.9);line-height: 1.6em;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;">这背后的根本问题是:从“Demo 惊艳”到“企业级可靠”之间存在一道必须跨越的鸿沟。

ingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration: none;background-color: rgb(255, 255, 255);caret-color: rgba(0, 0, 0, 0.9);line-height: 1.6em;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;">行业领先者早已意识到:评测驱动迭代是 AI 应用从原型走向生产的关键路径。无论是 Anthropic 构建 Claude Code,还是 Shopify 保障电商交易链路,都验证了同一原则:从依赖主观反馈转向量化评估、从人工抽检转向自动化评测,才能支撑 AI 从 Demo 走向规模化。

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


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

ingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration: none;background-color: rgb(255, 255, 255);caret-color: rgba(0, 0, 0, 0.9);line-height: 1.6em;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;">OpenJudge 正是为此而生的开源自动化评测框架,由通义实验室和阿里云-计算平台事业部共同推出,在企业级场景下进行过打磨和验证,赋能阿里云百炼、人工智能平台PAI、蚂蚁集团等多个业务。

ingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration: none;background-color: rgb(255, 255, 255);caret-color: rgba(0, 0, 0, 0.9);line-height: 1.6em;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;">它提供了50+即拿即用且高质量的评测器,多种评测器自定义方法,能够快速对业务目标,以及无缝集成到现有工作流,帮助开发者实现从“凭感觉调优”到“评测驱动迭代”的范式转变。

ingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration: none;background-color: rgb(255, 255, 255);caret-color: rgba(0, 0, 0, 0.9);line-height: 1.6em;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;">

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

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

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

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

ingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration: none;background-color: rgb(255, 255, 255);caret-color: rgba(0, 0, 0, 0.9);line-height: 1.6em;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;">

ingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration: none;background-color: rgb(255, 255, 255);caret-color: rgba(0, 0, 0, 0.9);line-height: 1.6em;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;">面对企业级评测的深水区,OpenJudge 深入解决了几个根本性难题:

ingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration: none;background-color: rgb(255, 255, 255);caret-color: rgba(0, 0, 0, 0.9);line-height: 1.6em;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;">对于开发者而言,最令人头疼是“模型看起来在工作,但你不知道它什么时候会出错”。这源于 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。

importasynciofromopenjudge.modelsimportOpenAIChatModelfromopenjudge.graders.common.relevanceimportRelevanceGraderfromopenjudge.graders.common.hallucinationimportHallucinationGraderfromopenjudge.graders.agent.tool.tool_selectionimportToolSelectionGraderfromopenjudge.models.schema.prompt_templateimportLanguageEnumfromopenjudge.runnerimportGradingRunnerfromopenjudge.runner.aggregatorimportWeightedSumAggregatorfromopenjudge.analyzer.statisticalimportDistributionAnalyzerTOOL_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"}}]},]
asyncdefmain(): ## 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 =awaitrunner.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) forname, statsinstats_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: 基于场景描述生成评测准则,构造评测器

importasynciofromopenjudge.generator.simple_rubricimportSimpleRubricsGenerator, SimpleRubricsGeneratorConfigfromopenjudge.modelsimportOpenAIChatModelfromopenjudge.graders.schemaimportGraderModefromopenjudge.models.schema.prompt_templateimportLanguageEnum
asyncdefmain(): # 第一步:配置 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 =awaitgenerator.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) fori,caseinenumerate(test_cases): result =awaitgrader.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: 测试生成的评测器

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

importasynciofromopenjudge.generator.simple_rubricimportSimpleRubricsGenerator, SimpleRubricsGeneratorConfigfromopenjudge.modelsimportOpenAIChatModelfromopenjudge.graders.schemaimportGraderModefromopenjudge.models.schema.prompt_templateimportLanguageEnum
asyncdefmain(): # 第四步:评估测试 test_cases = [{"query":"我的订单等了一周还没到,怎么回事?!","response":"非常理解您焦急的心情,让您等这么久真的很抱歉!我立即帮您查询:您的订单目前已到达本市配送站,预计今天下午3点前送达。如有任何问题,我会第一时间跟进处理。"}, {"query":"我的订单等了一周还没到,怎么回事?!","response":"您的订单在配送中。"}] # 优秀回复:识别情绪 + 同理心 + 明确信息 | 较差回复:忽略情绪,机械回复 print("\n"+"="*70+"\n情绪处理 Grader 评估结果\n"+"="*70) fori,caseinenumerate(test_cases): result =awaitgrader.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: 基于标注数据生成评测准则,构造评测器

importasynciofromopenjudge.generator.iterative_rubric.generatorimportIterativeRubricsGenerator, IterativePointwiseRubricsGeneratorConfigfromopenjudge.generator.iterative_rubric.query_rubric_generatorimportPOINTWISE_EVALUATION_TEMPLATEfromopenjudge.modelsimportOpenAIChatModelfromopenjudge.models.schema.prompt_templateimportLanguageEnum
# 标注数据集(简化示例,实际建议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},]
asyncdefmain(): # 第一步:配置 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 =awaitgenerator.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") fori,caseinenumerate(test_cases): result =awaitgrader.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原因:该回答严重不符合所有评估标准。在Rubric1方面,未识别用户焦急情绪(“我还等着用呢!”),未表达共情、理解或歉意,语气敷衍冷漠。在Rubric2方面,未提供任何关于延迟原因的解释,仅以‘查询中,稍等’搪塞,属于模糊且无实质信息的回应。在Rubric3方面,未提供任何物流状态、位置、承运商或预计送达时间等关键信息。在Rubric4方面,未提出任何主动解决方案或补救措施,也未说明已采取的行...

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


方案3:训练专属 Judge 模型

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

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

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

importjsonimportpandasaspd##以训练BT模型为例#1️⃣准备训练数据chosen=json.dumps([{"role":"user","content":"Whatarethebenefitsofexercise?"},{"role":"assistant","content":"Regularexerciseimprovescardiovascularhealth..."}])rejected=json.dumps([{"role":"user","content":"Whatarethebenefitsofexercise?"},{"role":"assistant","content":"Exerciseisgoodforyou."}])df=pd.DataFrame({"chosen":[chosen],"rejected":[rejected]})df.to_parquet("train.parquet")#2️⃣执行训练流程#cdcookbooks/training_judge_model/bradley-terry#bashrun_bt_rm.sh#3️⃣训练后续流程请参考文档:https://modelscope.github.io/OpenJudge/building_graders/training_judge_models/

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

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






欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5