18.AI Eval系统:让AI能力提升“可量化,而不是凭感觉”

到目前为止,我们已经完成了一个完整 AI 客服系统:

  • Prompt工程
  • RAG系统
  • Memory系统
  • Tools系统
  • AI编排层

项目地址:你也可以去 GitHub 上获取相配套的项目代码。

但有一个关键问题:

❌ 你怎么证明它真的变强了?

一、AI系统最大的误区

很多人做 AI 系统时会说:

  • "加了 RAG 效果好多了"
  • "Prompt优化后更准了"
  • "Memory让体验更好了"

👉 但问题是:

❗ 这些都是"感觉",不是"证据"


二、为什么必须要 Eval 系统?

一句话:

👉 没有评估,所有优化都是玄学

AI Eval 要解决的是:

  • ❌ 不再靠"感觉变好了"
  • ✅ 用数据证明变好了

三、AI能力演进的五个阶段

text 复制代码
BASE      → 基础模型
PROMPT    → Prompt优化
RAG       → 知识增强
MEMORY    → 上下文增强
FULL      → 完整系统

四、评估核心问题设计

统一问题:

"我的订单123为什么还没有发货?"


期望关键词:

  • 订单
  • 发货
  • 物流
  • 状态

五、评估系统架构

text 复制代码
EvaluationRunner
        ↓
AiEvaluator
        ↓
AiService(不同模式)
        ↓
EvaluationReport

六、核心代码设计

🧠 1. AiVersion

java 复制代码
public enum AiVersion {
    BASE,
    PROMPT,
    RAG,
    MEMORY,
    FULL
}

🧪 2. EvaluationCase

java 复制代码
/**
 * 单次评估用例。
 */
public record EvaluationCase(
        String question,
        List<String> expectedKeywords,
        String category
) {
}

📊 3. AiEvaluator(评分器)

java 复制代码
/**
 * 基于期望关键词的简单命中率评分(0--100)。
 */
public final class AiEvaluator {

    private AiEvaluator() {
    }

    public static int score(String answer, EvaluationCase caze) {
        if (answer == null || answer.isBlank()) {
            return 0;
        }
        List<String> keys = caze.expectedKeywords();
        if (keys == null || keys.isEmpty()) {
            return 100;
        }
        int hit = 0;
        for (String k : keys) {
            if (k != null && !k.isBlank() && answer.contains(k.trim())) {
                hit++;
            }
        }
        return (int) Math.round(100.0 * hit / keys.size());
    }

    public static String explain(String answer, EvaluationCase caze) {
        List<String> keys = caze.expectedKeywords();
        if (keys == null || keys.isEmpty()) {
            return "未配置关键词,默认满分逻辑由调用方处理。";
        }
        List<String> hit = new ArrayList<>();
        List<String> miss = new ArrayList<>();
        String a = answer == null ? "" : answer;
        for (String k : keys) {
            if (k == null || k.isBlank()) {
                continue;
            }
            String t = k.trim();
            if (a.contains(t)) {
                hit.add(t);
            } else {
                miss.add(t);
            }
        }
        return "命中 " + hit.size() + "/" + keys.size() + ":" + hit
                + (miss.isEmpty() ? "" : ";未命中:" + miss);
    }
}

🚀 4. EvaluationRunner(核心执行器)

java 复制代码
/**
 * 对 {@link EvaluationCase} 在全部 {@link AiVersion} 上跑通并汇总评分。
 */
public final class EvaluationRunner {

    public EvaluationReport run(EvaluationCase evaluationCase) {
        Map<AiVersion, VersionEvaluation> map = new LinkedHashMap<>();
        for (AiVersion v : AiVersion.values()) {
            RecordingLlmClient llm = new RecordingLlmClient();
            AiChatService svc = CapabilityChatFactory.build(v, llm);
            String answer = svc.chat("eval-session-" + v.name(), evaluationCase.question());
            int score = AiEvaluator.score(answer, evaluationCase);
            String explanation = AiEvaluator.explain(answer, evaluationCase);
            map.put(v, new VersionEvaluation(v, answer, score, explanation));
        }
        return new EvaluationReport(evaluationCase, map);
    }
}

七、关键设计:AI能力对比

BASE

  • ❌ 胡答
  • ❌ 无业务知识

PROMPT

  • ⚠️ 更规范
  • ⚠️ 但不准确

RAG

  • ✅ 出现业务信息
  • ⚠️ 不稳定

MEMORY

  • ✅ 有上下文
  • ⚠️ 仍可能缺知识

FULL SYSTEM

  • 🚀 正确 + 稳定 + 可解释

八、这个系统的真正价值

🧠 1. 从"感觉优化" → "数据优化"

📊 2. 每个模块增益可视化

🧪 3. 支持回归测试(非常重要)


九、AI系统的完整闭环

text 复制代码
开发
  ↓
优化 Prompt / RAG / Memory / Tools
  ↓
Eval验证
  ↓
继续优化

十、这一层的意义(非常关键)

如果说:

  • ai-service = 大脑
  • ai-rag = 知识
  • ai-tools = 手

那么:

👉 ai-eval = 体检系统(让AI变得可衡量)


十一、总结

这一篇你完成了整个 AI 系统的最后一块拼图:

👉 从"能用的系统"升级为"可验证的工程体系"


🚀 下一步建议(非常关键)

你现在其实已经可以进入更高级阶段:

👉 Agent系统(Auto-Router + Tool Chain + Multi-step reasoning)

相关推荐
深海鱼在掘金2 小时前
从Claude Code泄露源码看工程架构:第一章——导读
人工智能
深度学习lover2 小时前
<数据集>yolo 葡萄叶片病害识别<目标检测>
人工智能·python·yolo·目标检测·计算机视觉·葡萄叶片病害识别
普通网友2 小时前
【程序人生】全球首位AI程序员诞生,将会对程序员的影响有多大
人工智能·程序人生·职场和发展
Cosolar2 小时前
大模型推理部署框架深度解析:核心技术原理与实践指南
人工智能·架构·开源
深海鱼在掘金2 小时前
从Claude Code泄露源码看工程架构:第二章——项目架构总览与分层设计哲学
人工智能·架构·命令行
2501_933329552 小时前
企业媒体发布技术化转型:Infoseek舆情系统架构分析与应用实践
大数据·人工智能·自然语言处理·数据库开发
ZPC82102 小时前
MoveGroup 规划轨迹 → 直接交给 MoveIt2 Servo 执行
人工智能·算法·计算机视觉·机器人
志栋智能2 小时前
超自动化安全:释放安全专家创造力的钥匙
运维·服务器·网络·人工智能·自动化
zero.cyx2 小时前
Fay数字人后端在本地部署总结
人工智能