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)

相关推荐
魏祖潇3 分钟前
AI 能记住了,但能自己干活吗?——看懂执行系统,你就知道它怎么完成复杂任务
人工智能·ai编程
Lkstar9 分钟前
Function Calling 原理深度拆解:让 LLM 调用外部工具的机制与工具设计原则
人工智能·llm
IT_陈寒40 分钟前
Vue的响应式真把我坑惨了,原来问题出在这
前端·人工智能·后端
武子康1 小时前
调查研究-190 Continue.dev 被 Cursor 收购:AI 编程工具正从“插件竞争“迈入“平台整合“阶段
人工智能·ai编程·cursor
武子康1 小时前
调查研究-189 Kronos 调研:金融 K 线基础模型,是真突破,还是量化圈的新玩具?
人工智能·深度学习·openai
东坡肘子2 小时前
Swift 还让你 Excited 吗?-- 肘子的 Swift 周报 #141
人工智能·swiftui·swift
nujnewnehc2 小时前
不会 py, 用 ai 写了个游戏辅助的感受
人工智能·游戏
ZhengEnCi10 小时前
09c-斯坦福CS336作业二:系统与分布式训练
人工智能
阿里云大数据AI技术11 小时前
用 SQL 解锁多模态数据分析:Hologres 让图片、语音、视频变成结构化洞察
人工智能
阿里云大数据AI技术11 小时前
EMR Serverless StarRocks 湖仓多模态检索:One SQL on One Data,实现全文 + 标量 + 向量三路混合检索
人工智能