跳到主要内容

AI 应用测试

问题

AI 应用如何做质量保证?Prompt 测试、集成测试、评估流水线如何设计?

答案

一、AI 测试金字塔

二、Prompt 测试与评估

评估数据集

interface EvalCase {
input: string;
expectedOutput?: string; // 期望输出(精确匹配场景)
criteria: string[]; // 评估标准
tags: string[]; // 用于分类统计
}

const evalCases: EvalCase[] = [
{
input: "什么是 React?",
criteria: ["提到组件化", "提到虚拟 DOM", "准确性"],
tags: ["基础概念"],
},
{
input: "解释闭包",
criteria: ["定义准确", "有代码示例", "提到应用场景"],
tags: ["JavaScript"],
},
];

自动化评估

import { generateText } from "ai";
import { openai } from "@ai-sdk/openai";

async function evaluateResponse(input: string, output: string, criteria: string[]) {
// 用 LLM 做评判(LLM-as-Judge)
const { text } = await generateText({
model: openai("gpt-4o"),
prompt: `评估以下 AI 回答的质量。

问题:${input}
回答:${output}

评估标准:
${criteria.map((c, i) => `${i + 1}. ${c}`).join("\n")}

请对每个标准打分(1-5)并给出整体评分。输出 JSON 格式。`,
});

return JSON.parse(text); // { scores: [4, 5, 3], overall: 4.0 }
}

三、集成测试

import { describe, it, expect, vi } from "vitest";

// Mock LLM 调用
vi.mock("ai", () => ({
streamText: vi.fn().mockReturnValue({
toDataStreamResponse: () => new Response("mocked response"),
text: Promise.resolve("这是一个 Mock 回答"),
}),
}));

describe("Chat API", () => {
it("应该返回流式响应", async () => {
const response = await fetch("/api/chat", {
method: "POST",
body: JSON.stringify({
messages: [{ role: "user", content: "你好" }],
}),
});

expect(response.status).toBe(200);
expect(response.headers.get("content-type")).toContain("text/event-stream");
});

it("未认证应返回 401", async () => {
// 移除认证 Mock
const response = await fetch("/api/chat", {
method: "POST",
body: JSON.stringify({ messages: [] }),
});
expect(response.status).toBe(401);
});
});

四、评估流水线

.github/workflows/eval.yml
name: AI Evaluation
on:
pull_request:
paths: ["src/prompts/**"]

jobs:
evaluate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: pnpm install
- run: pnpm run eval
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
- name: Check scores
run: |
score=$(cat eval-results.json | jq '.overall')
if (( $(echo "$score < 4.0" | bc -l) )); then
echo "Evaluation score $score is below threshold 4.0"
exit 1
fi

五、常用评估指标

指标适用场景说明
准确率分类、问答答案是否正确
FaithfulnessRAG回答是否基于检索内容
RelevancyRAG回答是否与问题相关
Toxicity安全是否有害内容
Latency性能TTFT、TPS
LLM-as-Judge通用用 GPT-4 评判质量

常见面试问题

Q1: AI 应用如何做回归测试?

答案

  1. 构建评估数据集:从真实用户问题中精选 100-500 个 case
  2. 自动化评估:每次修改 prompt 或模型后自动运行评估
  3. LLM-as-Judge:用强模型(GPT-4o)评判弱模型输出的质量
  4. 阈值门控:CI 中设置分数阈值,低于阈值阻止合并
  5. 版本对比:每次改动前后的分数对比

Q2: LLM-as-Judge 准确吗?

答案

  • 与人类评判的一致率在 80-90%,对大多数场景足够
  • 局限:对主观问题、幽默、文化相关内容判断不准
  • 改进:使用多个 Judge 模型取平均、提供评分标准和 few-shot 示例

相关链接