大模型基础认知
第 1 篇 · 从零开始理解大模型,为 AI 测试打好认知基础
🎒 这篇怎么学
这是整个课程的第一篇,面向完全零基础的同学。我们会用大量的类比、图表和真实例子,帮你建立对大模型的直觉认知。你不需要懂数学、不需要会写代码,只需要跟着读下去。学完这篇,你就能理解:大模型是什么、怎么工作、为什么会出错、以及它和你做的测试有什么关系。
第1章:什么是大模型(LLM)
1.1 一个类比:超级厨师
想象一个餐厅里有一位超级厨师。这位厨师从小到大读过全世界所有的菜谱——中餐、西餐、日料、法餐、甜品、分子料理,统统都读过。当你走进餐厅说"我想吃一道辣一点的川菜",厨师就会根据他读过的所有菜谱,结合你的要求,现场"创作"一道菜出来。 大模型(LLM,Large Language Model)就是这样一位"超级厨师":
- 读过的菜谱 = 互联网上数万亿字的文本数据(书籍、网页、论文、代码、对话……)
- 你的点单 = 你给它的指令(Prompt)
- 做出的菜 = 它生成的内容(回答、文章、代码、翻译……)
📖 关键理解
大模型并不是"搜索引擎"——它不是去数据库里找现成答案。它是根据学到的模式和概率,**一个字一个字地"生成"**回答。这就像厨师不是从冰箱里端出一盘现成的菜,而是现场创作的。这个区别非常重要,因为它直接解释了后面我们会讲到的"幻觉"问题。
1.2 大模型能做什么
大模型的能力远比"聊天"广泛得多。下面是几个核心能力领域:
| 能力 | 例子 | 测试中的应用 |
|---|---|---|
| 对话问答 | 回答用户问题、客服机器人 | 测试回答准确性、一致性 |
| 文本写作 | 写邮件、写报告、写营销文案 | 测试内容质量、格式合规 |
| 代码生成 | 写代码、Debug、代码解释 | 测试代码正确性、安全性 |
| 数据分析 | 分析表格、总结文档、提取信息 | 测试提取准确度、遗漏率 |
| 翻译 | 多语言翻译、本地化 | 测试翻译准确性、语境理解 |
| 多模态 | 理解图片、生成图片、语音转文字 | 测试跨模态理解、生成质量 |
1.3 主流大模型介绍
截至 2026 年 8 月,全球已经有上百个大模型在被广泛使用。下面是最主流的几个(以 2026 年最新主力版本为主,括号内为常见前代版本作历史参考),你在工作中大概率会碰到其中的一个或多个:
| 模型 | 厂商 | 核心特点 | 开源/闭源 |
|---|---|---|---|
| GPT-5.6 Sol / Terra / Luna (前代 GPT-5.5 → GPT-5.4) | OpenAI(美国) | 2026 综合能力第一梯队,原生多模态,GPT-5.6 起按 Sol/Terra/Luna 三档切能力档,编码用 GPT-5-Codex | 闭源 |
| Claude Opus 4.6 / Sonnet 4.6 (前代 Claude 3.5 Sonnet) | Anthropic(美国) | 2026-03 发布,长文本 1M,Extended Thinking 1.0 推理强、安全性领先;Opus 4.7 灰度中 | 闭源 |
| Gemini 3 Pro / 3 Flash (前代 Gemini 1.5 Pro) | Google(美国) | 2026-01 发布,原生多模态 + Deep Think 推理模式,上下文最高 2M;Gemini 3.x 灰度中 | 闭源 |
| 豆包 2.0 / 2.5 Pro (前代 Doubao 1.6 Pro) | 字节跳动(中国) | 国内用户量最大的 AI 对话产品之一,深度接入抖音、飞书生态 | 闭源 |
| DeepSeek-V4 / R2 (前代 DeepSeek-V3.5/V3/R1) | 深度求索(中国) | 推理能力突出,性价比极高,R2 是国产开源推理标杆 | 开源 |
| Llama 4 系列 (前代 Llama 3.1) | Meta(美国) | 全球最流行的开源模型系列,社区生态丰富,支持原生多模态 | 开源 |
| Qwen3.6 / Qwen3-Coder (前代 Qwen3-Max → Qwen2.5) | 阿里巴巴(中国) | 中文 + 代码能力突出,上下文 1M,开源版本活跃 | 开源 |
| GLM-4.6 / GLM-Reasoner | 智谱(中国) | 性价比突出,国内政企落地常见,长上下文 200K | 开源 |
| Kimi K3 / K2-Reasoning (前代 Moonshot v1) | 月之暗面(中国) | 超长上下文(2M)能力领先,K2-Reasoning 推理能力第一梯队 | 闭源 |
开源 vs 闭源对测试的影响
- **闭源模型:**你只能通过 API 调用,无法看到模型内部结构。测试更偏"黑盒"——关注输入输出、行为一致性。
- **开源模型:**你可以下载模型、自己部署、甚至修改。测试范围更广——还需要关注部署配置、推理性能、量化精度损失等。
第2章:Token——大模型的"文字单位"
2.1 Token 不是字,也不是词
在你和大模型交流时,大模型并不是按"字"或"词"来理解你的话的。它有自己的"文字切割方式",切出来的每一小块叫做一个 Token。你可以把 Token 理解成大模型眼中的"最小阅读单位"。 Token 的切法因模型而异,但有一个通用规律:
- 英文里,一个常见单词通常是 1 个 Token(如
hello= 1 Token) - 较长或不常见的英文单词会被拆成多个 Token(如
unbelievable= 3 Token) - 中文里,一个汉字通常是 1~2 个 Token(如
我= 1 Token,蝴蝶可能 = 2~3 Token)
示例
Token 切分示例
| 原文 | Token 数量(约) | 说明 |
|---|---|---|
| Hello world | 2 Tokens | 两个常见英文单词,各占 1 Token |
| 我爱中国 | 4~5 Tokens | 每个汉字约 1~1.5 Token |
| 人工智能测试工程师 | 6~8 Tokens | 中文比英文消耗更多 Token |
| AI Testing Engineer | 3 Tokens | 同样含义,英文更"省" |
2.2 为什么中文比英文消耗更多 Token
这不是歧视中文,而是因为大模型的"词表"(Vocabulary)主要用英文语料训练出来的。英文的常见单词被完整收录在词表里,一个单词 = 一个 Token。但中文汉字数量庞大(常用字就有几千个),很多汉字需要用多个字节表示,所以同样的意思,中文版本消耗的 Token 数通常是英文的 1.5~2 倍。
⚠️ 这意味着什么
同样调用一次 API,中文提问消耗的 Token 更多 → 费用更高、能装进"上下文窗口"的内容更少。做中文场景的 AI 测试时,Token 消耗是一个必须关注的指标。
2.3 Token 和费用的关系
大模型 API 几乎都按 Token 数量收费。通常分为"输入 Token"(你发给模型的内容)和"输出 Token"(模型生成的内容),两者价格不同:
| 模型 | 输入价格(USD/1M Token) | 输出价格(USD/1M Token) | 上下文窗口 | 备注 |
|---|---|---|---|---|
| GPT-5 | $5 | $15 | 400K | 2025-08 GA / 2026 主力 |
| GPT-5-Codex | $3 | $12 | 400K | 编码专用 |
| GPT-5.1 | $7 | $21 | 1M | 2026-02 |
| o3-pro | $20 | $80 | 200K | 推理 |
| o4 | $15 | $60 | 200K | 推理新一代 |
| Claude Opus 4.6 | $15 | $75 | 500K | 2026-03 |
| Claude Sonnet 4.6 | $3 | $15 | 500K | — |
| Claude Haiku 4 | $0.5 | $2.5 | 200K | — |
| Gemini 3 Pro | $2 | $8 | 2M | 2026-01 |
| Gemini 3 Flash | $0.15 | $0.6 | 1M | — |
| DeepSeek-V3.5 | $0.27 | $1.10 | 128K | — |
| DeepSeek-R2 | $0.55 | $2.19 | 128K | 推理 |
| Qwen3-Max | $2.4 | $9.6 | 1M | — |
| Qwen3-Coder | $2 | $8 | 256K | — |
| GLM-4.6 | $0.6 | $2.2 | 200K | — |
| Doubao 1.6 Pro | $0.4 | $1.2 | 256K | — |
| Kimi K2 | $0.6 | $2.5 | 2M | 超长上下文 |
| — 历史参考(已退役主线):GPT-4o $2.5/$10、Claude 3.5 Sonnet $3/$15、Gemini 1.5 Pro $1.25/$5、DeepSeek-V2 ¥1/¥2 — |
📖 算一笔账
假设你用 GPT-5 测试一个客服场景,每轮对话平均消耗 500 输入 Token + 800 输出 Token。如果你跑 1000 条测试用例,总消耗 = 50 万输入 + 80 万输出,费用约 $2.5 + $12 = $14.5。听起来不多,但如果你需要跑 5 轮回归、10 个场景,费用就乘以 50,变成 $725+。如果换成性价比组合(Gemini 3 Flash 跑常规、GPT-5 只跑关键 case),费用可压到 1/10 以内。这就是为什么 Token 管理和模型选型在 AI 测试中非常重要。
2.4 Token 和上下文窗口
大模型有一个"记忆容量"上限,叫做 上下文窗口(Context Window)。你可以把它想象成一间会议室的座位:
🪑 会议室座位类比
- 上下文窗口 = 会议室总共有 128,000 个座位
- 你的提问(输入 Token)占掉一部分座位
- 模型的回答(输出 Token)再占掉一部分座位
- 之前的对话历史也会占座位
- 当座位坐满时,最早的对话内容会被"挤出"会议室——模型就"忘记"了那些内容
这就解释了一个常见现象:你和 ChatGPT 聊了很久之后,它突然"忘记"了你之前说过的话。不是它故意的,而是你们的对话 Token 总量超过了上下文窗口,早期的内容被丢弃了。
第3章:Prompt——和大模型对话的"指令"
3.1 三种角色
和大模型对话时,消息被分为三种"角色"。理解这三种角色,是写好 Prompt 的前提:
| 角色 | 英文名 | 作用 | 类比 |
|---|---|---|---|
| 系统提示 | System Prompt | 定义模型的身份、行为规则、限制条件 | 给厨师的"员工手册"——规定他是川菜厨师、不能用花生、必须标注过敏原 |
| 用户消息 | User Prompt | 用户的具体提问或指令 | 顾客的点单——"来一份宫保鸡丁,微辣" |
| 助手回复 | Assistant | 模型的回答 | 厨师做出来的菜 |
示例
一个完整的 API 调用消息结构:
[
{"role": "system", "content": "你是一个专业的法律顾问,只回答中国法律相关问题,拒绝回答其他领域"},
{"role": "user", "content": "员工连续加班超过36小时,公司要承担什么法律责任?"},
{"role": "assistant", "content": "根据《劳动法》第41条...(模型生成的回答)"}
]3.2 好 Prompt vs 坏 Prompt
Prompt 的质量直接决定了大模型输出的质量。同一个任务,Prompt 写法不同,结果可能天差地别。这不是理论,而是你在测试中每天都会遇到的现实:
❌ 坏 Prompt
- 输入:"帮我写个总结"
- **结果:**模型不知道要总结什么,输出了一段模糊的通用文本,没有任何有用信息。
✅ 好 Prompt
- 输入:"请用 3 个要点总结以下会议纪要的核心决策,每个要点不超过 30 字:[会议纪要内容]"
- **结果:**模型输出了 3 条清晰、精炼的决策要点,直接可用。
❌ 坏 Prompt
- 输入:"这个数据对不对?"
- **结果:**模型开始瞎猜,给出了一堆模棱两可的分析,没有结论。
✅ 好 Prompt
- 输入:"以下是用户订单数据,请检查金额列是否存在负数或零值,存在则列出行号和具体值:[数据表]"
- **结果:**模型精准列出了问题行,格式清晰。
3.3 Few-shot:给模型"看样学样"
有时候光用文字描述任务还不够,最有效的方式是直接给模型看几个例子——这叫 Few-shot Prompting。就像你培训新员工时,与其说一堆规则,不如直接给他看三个范例。
示例
Few-shot 示例:情感分类任务
请判断以下评论的情感倾向(正面/负面/中性)。
示例1:
评论:"这个产品太好用了,强烈推荐!"
情感:正面
示例2:
评论:"物流太慢了,等了一周才到。"
情感:负面
示例3:
评论:"包装还行,产品一般般。"
情感:中性
现在请判断:
评论:"价格虽然贵了点,但质量确实没话说。"
情感:通过提供 3 个示例,模型能精确理解你要的输出格式和判断标准。如果不给示例(Zero-shot),模型可能输出一大段分析而不是简洁的分类结果。
3.4 为什么 Prompt 改一个词结果就完全不同
大模型生成内容的方式是"预测下一个最可能的 Token"。Prompt 里每一个词都会影响模型对后续内容的概率判断。一个词的变化,可能导致模型走上完全不同的"概率路径"。
示例
真实案例:
| Prompt | 模型输出倾向 |
|---|---|
| "请 简要 描述量子计算" | 输出 2~3 句话的概述 |
| "请 详细 描述量子计算" | 输出一篇 500+ 字的长文 |
| "请 用小学生能懂的方式 描述量子计算" | 输出充满类比和简单词汇的解释 |
| "请用 学术论文 的风格描述量子计算" | 输出充满专业术语和引用格式的文本 |
| 仅仅改了几个修饰词,输出的长度、风格、深度完全不同。这就是为什么 AI 测试中 Prompt 的稳定性和鲁棒性是一个重要的测试维度。 |
对测试的启示
在测试 AI 产品时,你需要验证:用户换一种说法问同样的问题,系统还能正确回答吗?用户加了一个无关的词,系统会不会跑偏?这就是 Prompt 鲁棒性测试——后面的课程会详细展开。
第4章:幻觉——大模型最大的"bug"
4.1 什么是幻觉
如果大模型有一个最让人头疼的问题,那一定是幻觉(Hallucination)。简单说就是:模型一本正经地胡说八道。 用学生考试来类比最好理解:一个学生遇到不会的题,不写"不知道",而是编了一个看起来很像正确答案的答案交上去。关键是他自己不知道自己在编——他觉得自己写的就是对的。大模型的幻觉也是如此:它不是故意骗你,而是它的"生成机制"决定了它必须输出点什么,即使它其实不知道答案。
为什么幻觉比普通 bug 更危险
普通软件的 bug 通常会报错或崩溃——用户知道出问题了。但大模型的幻觉看起来完全正常:语法通顺、逻辑自洽、格式漂亮——唯一的问题是内容是错的。这对测试工作的挑战是巨大的。
4.2 三种幻觉类型
| 类型 | 定义 | 类比 | 危险等级 |
|---|---|---|---|
| 事实性幻觉 | 编造不存在的事实、数据、引用 | 学生在论文里编了一个不存在的参考文献 | 极高 |
| 忠实性幻觉 | 偏离用户给出的上下文或文档内容 | 让你总结文章A的内容,结果混入了文章B的观点 | 高 |
| 推理性幻觉 | 推理过程出错,得出错误结论 | 数学题每一步都写了,但第三步算错了 | 中 |
4.3 每种类型的真实例子
示例
事实性幻觉: 问:"《红楼梦》的作者生于哪一年?" 模型回答:"曹雪芹生于 1724 年 6 月 15 日,这在《清史稿》中有明确记载。" 事实:曹雪芹的确切生年至今学界仍有争议(约 1715~1724 年),而且《清史稿》中并无此记载。模型编造了一个精确日期和来源,让人以为这是确定的事实。
示例
忠实性幻觉: 你给模型一份产品说明书,让它回答:"这个产品支持哪些操作系统?"说明书里只写了"支持 Windows 和 macOS"。 模型回答:"该产品支持 Windows、macOS 和 Linux 系统。" 模型凭自己的"常识"添加了 Linux,但这不是文档里的内容。在企业级应用中,这种"善意的补充"可能造成严重误导。
示例
推理性幻觉: 问:"一个水池有两个进水管,A管每小时灌3吨,B管每小时灌5吨。同时打开两个管,4小时后水池里有多少水?" 模型回答:"A管4小时灌水 3×4=12 吨,B管4小时灌水 5×4=25 吨,总共 12+25=37 吨。" 推理过程的第二步 5×4 算成了 25(应该是 20),导致最终答案错误。模型的推理格式很规范,但计算出错了。
4.4 为什么幻觉无法完全消除
很多人会问:既然幻觉这么严重,为什么不修好它?答案是:幻觉是大模型工作原理的"副产品",不是一个可以打补丁修复的 bug。
- **生成机制决定了它必须输出:**大模型是"预测下一个 Token"的机器,它没有"说不知道"的天然能力——必须经过专门训练才能学会拒绝。
- **训练数据里本身就有错误:**互联网上的信息不全是对的,模型学到了错误的"知识"。
- **模型不具备真正的"理解":**它学到的是文本模式和概率关系,不是概念和因果。它知道"北京是中国的首都",但它不"理解"什么是首都。
⚠️ 对测试的直接影响
既然幻觉无法完全消除,那么 AI 测试的核心任务之一就不是"确保零幻觉",而是:衡量幻觉的频率、类型和严重程度,并确保产品在幻觉发生时有合理的兜底机制(如标注信息来源、提示"此回答仅供参考"等)。
第5章:Transformer——大模型的"大脑结构"(简明版)
5.1 不需要懂数学,用邮局来理解
如果让你理解大模型的核心架构 Transformer,最好的方式不是看公式,而是想象一个"超级智能邮局":
📮 邮局分拣类比
想象你经营一个邮局,每天收到大量信件。每封信上都写着收件人地址、寄件人信息和正文内容。你的工作是理解每封信的内容,然后决定该怎么回复。
- **拆信(Token化):**把收到的信拆成一个个小片段
- **贴标签(编码):**给每个片段贴上"含义标签"——这个词是名词还是动词?是正面还是负面?和前面哪个词关系最近?
- **注意力分拣(Attention):**这是最关键的一步——邮局的"超级分拣员"会同时看所有的片段,判断哪些片段之间有重要关联。比如"小明昨天去了北京,他觉得很开心"——分拣员知道"他"指的是"小明",而不是"北京"。
- **写回信(生成):**基于对信件的理解,一个字一个字地写出回复
5.2 核心流程
大模型处理你的每一次提问,本质上经历以下流程:
输入文本 → Token 化 切成小片段 → 编码器理解含义 注意力机制找关联 → 解码器逐个生成 预测下一个 Token → 输出文本
5.3 为什么是"自回归"的
你有没有注意到,ChatGPT 回答问题时是一个字一个字"蹦"出来的,而不是一下子给你完整答案?这不是为了做动画效果,而是因为大模型的生成方式就是 自回归(Autoregressive):
- 模型看到你的输入,预测第 1 个输出 Token
- 然后把第 1 个 Token 加入输入,预测第 2 个 Token
- 然后把第 1、2 个 Token 都加入输入,预测第 3 个 Token
- 如此循环,直到输出结束标记或达到长度上限
输入:"中国的首都是" → 预测:"北" → 预测:"京" → 预测:"。" → 预测:[结束]
这意味着每一个 Token 的生成都依赖前面所有 Token。如果第一个词生成错了,后面可能越跑越偏——就像多米诺骨牌一样。
5.4 为什么会"编"——概率预测,不是查数据库
很多人以为大模型"知道"答案,像搜索引擎一样从数据库里查出来。但实际上,大模型是一个概率预测机器:它根据前面的所有文本,计算"下一个 Token 最可能是什么",然后挑一个概率高的输出。
搜索引擎:有一个索引数据库,用户搜什么就去库里找匹配结果。找不到就说"没有结果"。 **特点:**不会编造,但可能找不到。 大模型:没有数据库,只有从训练数据中学到的"概率模式"。给定前文,预测最可能的后续文本。 **特点:**永远会给出回答,但可能编造。
这就是幻觉的根本原因
因为模型的工作方式是"预测最可能的下一个词",而不是"查数据库确认事实"。所以当模型不确定答案时,它不会留空,而是会生成一个概率上最合理但事实上可能是错的内容。
第6章:训练→微调→对齐——模型是怎么"学会"的
6.1 三个阶段概览
一个大模型从"什么都不会"到"能和人正常对话",通常要经历三个阶段。每个阶段解决不同的问题,也会引入不同类型的风险:
阶段一:预训练 读互联网所有文本 → 阶段二:微调(SFT) 学会做特定任务 → 阶段三:对齐(RLHF) 学会安全和有用
6.2 阶段一:预训练——"读遍天下书"
预训练就是让模型读海量文本。多大的量呢?GPT-5 / Gemini 3 Pro 这一代模型的训练数据估计在 30~50 万亿 Token 量级(GPT-4 当年约为 13 万亿)——相当于把整个公开互联网的文本读了好几遍,再加上大量合成数据和代码语料。 预训练阶段的核心任务很简单:给定前面的文本,预测下一个 Token 是什么。通过反复做这个任务数万亿次,模型学会了语言的语法、常识、逻辑模式、甚至部分推理能力。 但预训练完的模型还不好用——它只会"续写文本",不会"回答问题"。你问它"北京的天气怎么样",它可能会续写成一篇天气预报格式的文章,而不是简洁回答。
6.3 阶段二:微调(SFT)——"学会做事"
微调(Supervised Fine-Tuning)就是用人工标注的"问题-回答"数据,教模型学会正确地完成特定任务。这就像一个读了无数书的学者,需要经过岗前培训才能成为一个合格的客服。
示例
微调数据的样子:
{
"instruction": "请将以下英文翻译成中文",
"input": "The weather is beautiful today.",
"output": "今天天气很好。"
}成千上万条这样的标注数据,让模型学会按照指令格式来做事。
6.4 阶段三:对齐(RLHF)——"学会做人"
对齐(Alignment)是最后一步,目的是让模型的行为符合人类的期望和价值观。最常用的方法叫 RLHF(Reinforcement Learning from Human Feedback),即基于人类反馈的强化学习。 简单说就是:让人类评判员给模型的多个回答打分,模型从中学习"什么样的回答更受欢迎"。通过这个阶段,模型学会了:
- 拒绝回答有害内容(如教人做炸弹)
- 承认自己不确定的事情
- 更礼貌、更有帮助地回答
- 避免输出歧视性、偏见性内容
6.5 测试为什么要关心这三个阶段
| 阶段 | 可能引入的问题 | 测试关注点 |
|---|---|---|
| 预训练 | 训练数据里的错误知识、过时信息、偏见 | 事实性幻觉、知识时效性、文化偏见 |
| 微调 | 标注数据质量不高、任务理解偏差 | 指令遵循度、格式一致性、边缘 case 处理 |
| 对齐 | 过度安全(拒绝回答合理问题)、对齐不足(仍可绕过安全限制) | 安全边界测试、越狱攻击测试、过度拒绝测试 |
每个阶段都有不同类型的 bug
预训练阶段的 bug 通常是"知识错误";微调阶段的 bug 通常是"行为错误";对齐阶段的 bug 通常是"安全漏洞"或"过度保守"。理解这三个阶段,你才能在测试时有针对性地设计测试场景。
6.6 Temperature 和 Top-p:控制"创造力"的旋钮
大模型在生成每一个 Token 时,实际上是从一组候选词中按概率选一个。Temperature 和 Top-p 就是控制"怎么选"的两个参数。你可以把它理解成抛骰子的方式:
🎲 抛骰子类比
- **Temperature = 0:**骰子被固定了,永远落在概率最高的那一面。输出最确定、最保守。
- **Temperature = 0.7:**骰子正常抛,高概率的面更容易朝上,但偶尔也会出现低概率的面。输出比较自然、有变化。
- **Temperature = 1.5:**骰子被施了魔法,低概率的面也经常朝上。输出非常"有创意",但也更容易出错。
| 参数 | 值 | 效果 | 适用场景 |
|---|---|---|---|
| Temperature | 0 | 完全确定性输出,每次相同输入得到相同输出 | 数据提取、分类、事实问答 |
| 0.7 | 平衡创造力和准确性 | 一般对话、内容生成 | |
| 1.0~1.5 | 高创造力,输出多样但可能不靠谱 | 创意写作、头脑风暴 | |
| Top-p | 0.1 | 只从概率最高的 10% 候选词中选 | 严格场景,减少随机性 |
| 0.9 | 从概率最高的 90% 候选词中选 | 一般使用 | |
| 1.0 | 从所有候选词中选(不裁剪) | 最大多样性 |
⚠️ 对测试的影响
当 Temperature > 0 时,同样的输入每次可能得到不同的输出。这意味着 AI 测试不能像传统测试那样只跑一次就下结论。你可能需要同一个用例跑 10 次甚至 100 次,统计通过率和输出分布。这是 AI 测试和传统测试的根本区别之一。
第7章:大模型测试和传统软件测试的区别
7.1 八项核心差异
如果你之前做的是传统软件测试(Web 测试、App 测试、接口测试),那你需要在心态上做一个重大转变。因为大模型测试的"游戏规则"和传统测试有很多根本性的不同:
| # | 对比维度 | 传统软件测试 | 大模型测试 |
|---|---|---|---|
| 1 | 确定性 | 同样的输入 → 同样的输出(确定性) | 同样的输入 → 每次输出可能不同(概率性) |
| 2 | 输入输出 | 输入格式固定(表单、JSON),输出格式固定 | 输入是自然语言(无限可能),输出是自由文本 |
| 3 | 对错判定 | 对就是对,错就是错(二元判定) | 好/差/还行/基本可以(程度判定) |
| 4 | 回归稳定性 | 代码不改,测试结果稳定 | 模型不改,测试结果也可能变化 |
| 5 | 测试用例 | 可以枚举所有分支 | 输入空间无穷大,只能抽样 |
| 6 | Bug 复现 | 步骤清晰,100% 可复现 | 有时复现不了(概率性 bug) |
| 7 | 评判标准 | 和需求文档对比 | 需要人类评估或另一个 AI 评估 |
| 8 | 测试成本 | 主要是人力和时间 | 还需要考虑 API 调用费用(Token 费) |
7.2 为什么不能用传统的 assert True/False
在传统测试里,你会写这样的断言:
assert response.status_code == 200
assert response.json()["order_id"] is not None
assert response.json()["amount"] == 199.00这些断言是"精确的"——要么完全匹配,要么不匹配。但大模型的输出是自然语言,你没法用精确匹配来判断。
示例
假设你让模型总结一段文字,以下三个输出都是"正确的":
- "该文章主要讨论了全球气候变化对农业的影响。"
- "文章分析了气候变暖如何影响全球粮食产量。"
- "本文聚焦于气候变化与农业生产之间的关系。" 这三个答案表述完全不同,但含义都是对的。你无法用
assert output == "标准答案"来判断。
7.3 从"对错思维"到"评分思维"
AI 测试的核心范式转变是:从二元判定(对/错)转向连续评分(0~5 分或百分制)。
| 传统思维 | AI 测试思维 |
|---|---|
| 通过 / 不通过 | 5 分 / 4 分 / 3 分 / 2 分 / 1 分 |
| 和标准答案完全匹配 | 从多个维度打分:准确性、完整性、相关性、安全性…… |
| 一次测试就能定论 | 多次测试取统计结果(平均分、通过率、方差……) |
| 人工肉眼就能判断 | 可能需要 AI 帮忙评判(LLM-as-Judge) |
LLM-as-Judge:用 AI 评判 AI
当测试量级上去后(成千上万条用例),人工逐条评判不现实。一种常见做法是用另一个大模型来充当"评委"——这就是 LLM-as-Judge。当然,"评委模型"自身的可靠性也需要验证,这是后面课程会深入讲解的内容。
7.4 传统测试流程 vs AI 测试流程
传统测试流程:传统测试流程 需求评审 → 编写用例 → 执行测试 → 判定结果(通过/失败) → 提交 Bug AI 测试流程:AI 测试流程 设计评测维度和评分标准 → 构建测试数据集 → 批量调用模型获取输出 → 多维度评分(人工 + AI 评委) → 统计分析(通过率/平均分/方差) → 输出评测报告,驱动优化
📖 小结
传统测试的终点是"Bug 修完了",AI 测试的终点是"评分达标了"。传统测试是一个精确的二元判定过程,AI 测试是一个统计学驱动的质量评估过程。理解这个根本区别,是进入 AI 测试领域的第一步。
第8章:课堂练习与答案
使用方式
建议先独立完成下面 3 组练习,再对照后面的参考答案。答案部分刻意保留了"要点式讲解",方便学员先自己组织语言,再检查有没有漏掉关键点。
课堂练习
练习一:概念理解 请用自己的话回答以下问题(不要复制粘贴课文):
- 大模型和搜索引擎的本质区别是什么?为什么大模型会"编造"答案而搜索引擎不会?
- 请解释 Token 和"字"的区别。为什么同一句话用中文比英文消耗更多 Token?
- Temperature 参数设置为 0 和设置为 1.0 时,模型的行为有什么不同?在做"客服问答"和"创意写作"这两个场景下,你分别推荐用什么值?为什么?
课堂练习
练习二:幻觉识别 以下三段"模型输出"中,分别包含了什么类型的幻觉?请指出问题并说明属于哪种类型(事实性/忠实性/推理性):
- 问:"请根据以下产品描述回答:该手机电池容量多少?"文档写的是 4500mAh。模型回答:"该手机配备 5000mAh 大电池,支持 120W 快充。"
- 问:"李白是哪个朝代的诗人?"模型回答:"李白是唐朝著名诗人,生于公元 701 年 3 月 28 日,卒于公元 762 年 12 月 13 日。"
- 问:"小明有 15 个苹果,给了小红 7 个,又买了 3 个,现在有多少?"模型回答:"15 - 7 = 8,8 + 3 = 12。小明现在有 12 个苹果。"(正确答案是 11)
课堂练习
练习三:思维转变 假设你负责测试一个 AI 客服产品,用户问"你们的退货政策是什么?",模型需要根据知识库中的退货政策文档来回答。请思考:
- 你会设计哪些评测维度?(至少 3 个)
- 为什么不能只跑一次测试就下结论?
- 如果你要跑 500 条测试用例,人工逐条评判太慢了,你会怎么解决?
8.1 参考答案要点
练习一:概念理解
- **大模型 vs 搜索引擎:**搜索引擎的核心是"检索已有信息",本质上是在索引库里找结果;找不到时可以直接返回"没有结果"。大模型的核心是"根据概率生成下一个 Token",本质上是在续写最可能的内容,所以当它知识不足或上下文不够时,也可能生成一个看起来合理、但实际上不正确的答案。
- **Token vs 字:**Token 是模型内部使用的最小处理单位,不等于汉字,也不等于自然语言里的"词"。同一句话中文通常比英文更耗 Token,是因为很多模型的词表对英文更友好,英文常见词更容易整词编码,而中文往往会被切成更细的片段。
- Temperature 的影响:
Temperature=0时,模型更倾向选择概率最高的词,输出更稳定、保守,适合客服问答、信息抽取、分类等场景;Temperature=1.0时,模型更容易采样到低概率词,输出更发散、更有创造性,但也更容易波动和出错,适合创意写作、头脑风暴。客服问答通常建议0~0.3;创意写作可用0.8~1.0,核心原因是前者追求稳定和一致,后者追求多样性和表达空间。
练习二:幻觉识别
- 第 1 题属于忠实性幻觉。题目已经给出了明确文档,文档里只有
4500mAh,模型却回答成5000mAh,还额外补了120W 快充。问题不只是"答错了",更关键是它偏离了用户提供的上下文,把文档里没有的信息当成事实说了出来。 - **第 2 题属于事实性幻觉。**李白是唐代诗人这一点没问题,但模型进一步给出了精确到月日的生卒日期。对于这类历史人物,过于精确又缺乏可靠来源的信息本身就是风险信号。模型把不确定的信息包装成确定事实,这正是事实性幻觉的典型表现。
- **第 3 题属于推理性幻觉。**这道题的正确计算应为
15 - 7 + 3 = 11。模型虽然写出了看似完整的步骤,但最终计算结果错了,属于推理链条中间或结果出现错误,而不是上下文偏离或事实编造。
练习三:思维转变
- **可设计的评测维度:**至少可以包括准确性(退货规则有没有答对)、忠实性(是否严格依据知识库,不乱补充)、完整性(是否漏掉时效、条件、例外项)、相关性(有没有答非所问)、安全性/合规性(是否给出违规承诺)、稳定性(同问多次回答是否波动过大)。如果产品支持引用来源,还可以加"引用是否正确"这个维度。
- **不能只跑一次的原因:**AI 输出具有概率性,同一个问题多次运行可能不一样;如果背后还有 RAG 检索链路,召回结果、上下文拼接和解码过程都可能带来波动。只跑一次只能看到某一次表现,看不到整体通过率、平均质量和失败分布。
- **500 条用例的处理方式:**比较成熟的做法是先建立 Golden Set 和明确评分标准,再批量调用模型跑全量测试;随后用 LLM-as-Judge + 人工抽样复核 的方式提效。也就是说,先让模型评委按统一 rubric 给分,再抽取高风险、低分和边界样本做人工校准,这样既能提速,也能控制评判偏差。