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)

相关推荐
科技圈观察12 分钟前
2026年好伴AI医疗专用大模型应用梳理与梯队参考
人工智能
jkyy201440 分钟前
深耕AI健康医疗数据智库,赋能企业构建主动健康管理新生态
大数据·人工智能·健康医疗
cd_949217211 小时前
3D角色自动绑骨怎么做?用V2Fun完成建模、绑定、动作和导出
人工智能·3d
瑞禧生物tech1 小时前
SH-PEG-Biotin巯基-聚乙二醇-生物素 HS-PEG-Bio 深度解析
人工智能
冬奇Lab2 小时前
MCP 系列(06):MCP vs Function Calling——用数据说话的选型指南
人工智能
冬奇Lab2 小时前
每日一个开源项目(第159篇):Vibe-Trading - 用自然语言做量化研究,AI 驱动的个人交易 Agent
人工智能·开源·资讯
AI大模型-小雄2 小时前
2026 年 7 月国内怎么开通 ChatGPT Pro?5x / 20x 区别、适合人群与避坑指南
人工智能·gpt·chatgpt·ai编程·开发工具·codex·chatgpt pro
快乐非自愿2 小时前
AI低代码破局:数字化降本增效的核心逻辑与商业落地
人工智能·低代码
ctrl_v助手2 小时前
Halcon学习笔记2
人工智能·笔记·学习
彭军辉2 小时前
生命体AI和数字生命有什么区别
人工智能