9 如何评估 AI 产品的效果

引子

到目前为止,我们已经学了大模型的概念、Prompt、RAG(Embedding + 向量数据库),甚至可以用它回答公司内部的问题。
但是,AI 产品到底“好不好用”? 我们需要一个标准。

这就引出了 评估(Evaluation) —— 给 AI 产品做成绩单。


一、核心概念

1. 为什么要评估?

  • 通俗解释:就像学生考试要有分数,AI 产品也需要成绩单。
  • 专业定义:评估是用一组标准化指标衡量 AI 模型或产品在特定任务上的表现。

2. 三类常见指标

  1. 质量指标

    • 准确率:答案对不对
    • 覆盖率:是否包含用户关心的要点
    • 用户满意度(主观评分)
  2. 性能指标

    • 响应时间(Latency)
    • 吞吐量(同时服务多少用户)
  3. 成本指标

    • Token 消耗(调用费用)
    • 算力消耗(GPU/CPU)

👉 质量 + 性能 + 成本 = AI 产品的三角平衡

3. 为什么 PM 必须懂评估?

  • 用数据取代“我觉得” → 决策更有说服力
  • 售前要拿数据打动客户
  • 迭代时知道改进方向

二、实践环节:构建一个迷你评测器(bge + DeepSeek R1)

我们来写一个小程序,流程如下:

  1. bge 模型:把企业文档转 Embedding,存入向量库。
  2. 用户问题:用 bge 编码 → 检索相关文档。
  3. DeepSeek R1:把问题 + 检索结果喂给 LLM → 生成答案。
  4. 评测脚本:对比答案里是否包含“关键点”。

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):
    # 向量化 query
    q_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 R1
    prompt = 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 | 报销流程是先提交申请,然后再进行报销。

三、理解 ptstot

在代码里,我们用了两个变量来表示“模型答题得了多少分”:

  • tot = 需要检查的关键点总数

    • 例:问题“公司的年假是多少天?” → must = ["年假","10"]tot = 2
  • pts = 模型回答里实际命中的关键点数

    • 例:模型回答是“公司规定年假为每年10天。” → 命中“年假”和“10” → pts = 2

👉 pts/tot 就是一个简单的“正确率指标”。


四、产品经理思考

1. 为什么要做评估?

  • 对内:用数据代替“感觉”,统一目标。
  • 对外:展示给客户/领导时更有说服力。
  • 对迭代:每次优化后都能对比效果。

2. 在 PRD 里要写什么?

  • 功能需求:系统必须支持自动化评估

  • 非功能需求:

    • 准确率 ≥ 85%
    • 平均响应时间 < 3 秒
  • 验收标准:上线前通过评测集验证

3. 案例

  • 售前场景:演示 AI 知识库 → 提供评测结果表,增强可信度。
  • 产品迭代:上线前通过评测集 → 确保质量达标。

五、小结

今天我们学习了:

  • 评估 = AI 产品的成绩单(质量/性能/成本)。
  • 用 bge + DeepSeek R1 做了一个迷你评测器:自动跑问题 → 生成答案 → 检查关键点。
  • pts/tot 是最简单的准确率计算方法:命中的关键点 ÷ 总关键点
  • PM 角度:评估是产品迭代、客户说服、内部对齐的必备环节。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐