到目前为止,我们已经完成了一个完整 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 系统的最后一块拼图:
👉 从"能用的系统"升级为"可验证的工程体系"
🚀 下一步建议(非常关键)
你现在其实已经可以进入更高级阶段: