9 如何评估 AI 产品的效果
9 如何评估 AI 产品的效果
引子
到目前为止,我们已经学了大模型的概念、Prompt、RAG(Embedding + 向量数据库),甚至可以用它回答公司内部的问题。
但是,AI 产品到底“好不好用”? 我们需要一个标准。
这就引出了 评估(Evaluation) —— 给 AI 产品做成绩单。
一、核心概念
1. 为什么要评估?
- 通俗解释:就像学生考试要有分数,AI 产品也需要成绩单。
- 专业定义:评估是用一组标准化指标衡量 AI 模型或产品在特定任务上的表现。
2. 三类常见指标
-
质量指标
- 准确率:答案对不对
- 覆盖率:是否包含用户关心的要点
- 用户满意度(主观评分)
-
性能指标
- 响应时间(Latency)
- 吞吐量(同时服务多少用户)
-
成本指标
- Token 消耗(调用费用)
- 算力消耗(GPU/CPU)
👉 质量 + 性能 + 成本 = AI 产品的三角平衡。
3. 为什么 PM 必须懂评估?
- 用数据取代“我觉得” → 决策更有说服力
- 售前要拿数据打动客户
- 迭代时知道改进方向
二、实践环节:构建一个迷你评测器(bge + DeepSeek R1)
我们来写一个小程序,流程如下:
- bge 模型:把企业文档转 Embedding,存入向量库。
- 用户问题:用 bge 编码 → 检索相关文档。
- DeepSeek R1:把问题 + 检索结果喂给 LLM → 生成答案。
- 评测脚本:对比答案里是否包含“关键点”。
1. 准备依赖
pip install sentence-transformers faiss-cpu openai
2. 准备测试数据(保存为 eval.jsonl
)
{"q": "公司的年假是多少天?", "must": ["年假", "10"]}
{"q": "报销流程是怎样的?", "must": ["申请", "报销"]}
q
= 问题(用户的提问)must
= 答案必须包含的关键点(关键词列表)
3. 示例代码(保存为 eval_rag.py
)
import json, re, time
import faiss
import numpy as np
from sentence_transformers import SentenceTransformer
from openai import OpenAI# 1. 初始化模型
embed_model = SentenceTransformer("BAAI/bge-base-zh")
llm = OpenAI(base_url="http://127.0.0.1:11434/v1", api_key="ollama") # DeepSeek R1 本地部署# 2. 企业文档库
docs = ["公司年假制度:每年10天年假。","公司病假制度:每年7天病假。","公司差旅报销流程:先申请,再报销。"
]# 3. 向量化并建立索引
embeddings = embed_model.encode(docs, convert_to_numpy=True, normalize_embeddings=True)
dim = embeddings.shape[1]
index = faiss.IndexFlatIP(dim)
index.add(embeddings)# 4. 定义 RAG 检索 + 生成函数
def rag_answer(query):# 向量化 queryq_emb = embed_model.encode([query], convert_to_numpy=True, normalize_embeddings=True)# 检索前2条D, I = index.search(q_emb, k=2)context = "\n".join([docs[idx] for idx in I[0]])# 调用 DeepSeek R1prompt = f"""你是一名企业助手,请仅根据以下资料回答问题:
[资料]
{context}[问题]
{query}
"""resp = llm.chat.completions.create(model="deepseek-r1",messages=[{"role":"user","content":prompt}],temperature=0.2)return resp.choices[0].message.content# 5. 评测:读取 eval.jsonl
results = []
for line in open("eval.jsonl","r",encoding="utf-8"):item = json.loads(line)q, must = item["q"], item["must"]t0 = time.time()ans = rag_answer(q)cost = time.time()-t0# 计算得分:命中的关键点数pts = sum(1 for k in must if re.search(k, ans))tot = len(must)results.append((q, pts, tot, cost, ans))# 6. 打印结果
print("Q | Score | Time | Answer")
print("-"*50)
for q, pts, tot, sec, ans in results:print(f"{q} | {pts}/{tot} | {sec:.2f}s | {ans}")
4. 运行结果(示例)
Q | Score | Time | Answer
--------------------------------------------------
公司的年假是多少天? | 2/2 | 1.24s | 公司规定年假为每年10天。
报销流程是怎样的? | 2/2 | 1.31s | 报销流程是先提交申请,然后再进行报销。
三、理解 pts
和 tot
在代码里,我们用了两个变量来表示“模型答题得了多少分”:
-
tot
= 需要检查的关键点总数- 例:问题“公司的年假是多少天?” →
must = ["年假","10"]
→tot = 2
- 例:问题“公司的年假是多少天?” →
-
pts
= 模型回答里实际命中的关键点数- 例:模型回答是“公司规定年假为每年10天。” → 命中“年假”和“10” →
pts = 2
- 例:模型回答是“公司规定年假为每年10天。” → 命中“年假”和“10” →
👉 pts/tot
就是一个简单的“正确率指标”。
四、产品经理思考
1. 为什么要做评估?
- 对内:用数据代替“感觉”,统一目标。
- 对外:展示给客户/领导时更有说服力。
- 对迭代:每次优化后都能对比效果。
2. 在 PRD 里要写什么?
-
功能需求:系统必须支持自动化评估
-
非功能需求:
- 准确率 ≥ 85%
- 平均响应时间 < 3 秒
-
验收标准:上线前通过评测集验证
3. 案例
- 售前场景:演示 AI 知识库 → 提供评测结果表,增强可信度。
- 产品迭代:上线前通过评测集 → 确保质量达标。
五、小结
今天我们学习了:
- 评估 = AI 产品的成绩单(质量/性能/成本)。
- 用 bge + DeepSeek R1 做了一个迷你评测器:自动跑问题 → 生成答案 → 检查关键点。
pts/tot
是最简单的准确率计算方法:命中的关键点 ÷ 总关键点。- PM 角度:评估是产品迭代、客户说服、内部对齐的必备环节。