本页目录
Lesson 12 — 成本/质量权衡:把模型选型变成数据
本课目标:用已有的 ragas 评估管线量化「glm-4 vs glm-4-flash」在四指标上的质量差与成本差,把「选哪个模型」从拍脑袋变成有数据支撑的决策。
学完你能回答面试官那句:「你怎么决定哪个环节用哪个模型?凭什么这么选?」——有对比表、有成本数字、有明确结论。
1. 质量-成本-延迟三角:LLM 工程的永恒权衡
LLM 应用有三个互相牵制的目标,你最多同时满足两个:
质量(答案准不准)
╱╲
╱ ╲
╱ ╲
╱ 不可 ╲
╱ 能 ╲
╱ 全要 ╲
╱──────────╲
成本 ╱ ╲ 延迟
(省钱) (快)
| 选择 | 你得到 | 你失去 |
|---|---|---|
| 要质量 | 准(glm-4) | 贵 + 慢 |
| 要成本 | 省钱(flash 免费) | 质量降 |
| 要延迟 | 快(flash 快) | 质量降 |
🎯 核心认知:没有「又快又好又便宜」的模型。工程的价值在于用数据找到平衡点——不是全程用最贵的,也不是全程用最便宜的,而是不同环节用不同模型。
2. 不同环节用不同模型(kb-qa 的实践)
kb-qa 一次问答有几个 LLM 调用环节,对模型的要求不同:
| 环节 | 调用量 | 质量要求 | kb-qa 现选型 | 理由 |
|---|---|---|---|---|
| 改写追问(condense) | 每次问答 0~1 次 | 中(语法正确即可) | glm-4-flash | 量大、免费、改写不需顶级质量 |
| 生成答案(answer) | 每次问答 1 次 | 高(防幻觉/准确性关键) | glm-4 | 质量核心,不能省 |
| 评估 judge(ragas) | 评估时每题 2~4 次 | 中(能判断好坏即可) | glm-4-flash | judge 量大,flash 够用 |
| 检索/rerank | — | — | embedding-3 + rerank | 不是 chat 模型,单算 |
💡 关键洞察:生成用强模型(glm-4)、改写和 judge 用快模型(flash),是「把钱花在刀刃上」。本课要用数据证明这个选择对——量化「flash 在改写/judge 上够用,但在生成上不行」。
3. 怎么量化?复用 ragas 管线
L08(rag-lessons)已有 eval/run_eval.py:golden set → 跑 RAG → ragas 四指标。本课复用它,只是按不同模型参数跑两遍,对比结果:
同一个 golden set(20 题)
│
┌────┴────┐
▼ ▼
glm-4 glm-4-flash ← 只改 answer_model,其他不变
生成答案 生成答案
│ │
ragas 四指标 ragas 四指标
│ │
└────┬────┘
▼
对比表:质量差 + 成本差 → 选型结论
四指标(L08 讲过): - faithfulness(忠实度):flash 会不会比 glm-4 更爱撒谎? - answer_relevancy(相关性):flash 答得切题吗? - context_precision/recall(检索指标):这俩和模型无关(检索不变),应基本相同 → 是对照组,验证「只有生成模型在变」
🎯 context 指标是天然的对照组:它们取决于检索质量,和生成模型无关。如果两次跑 context 指标差异大,说明实验有问题(不是模型造成的);如果基本相同,说明差异确实来自生成模型。这是实验设计的基本功。
4. 成本怎么算?
复用 L02 tracing 的价目表:
| 模型 | 输入(元/百万token) | 输出(元/百万token) |
|---|---|---|
| glm-4 | 50 | 50 |
| glm-4-flash | 0(免费) | 0(免费) |
一次问答成本 ≈ (input_tokens × 输入价 + output_tokens × 输出价) / 1,000,000。
关键问题:flash 免费,那为什么不全用 flash?因为质量——本课要量化「flash 省了多少钱、质量降了多少」,看这个交换值不值。
假设 20 题,每题 in≈800 out≈200 token:
glm-4: 20 × (800×50 + 200×50)/1e6 = 20 × 0.05 = 1.0 元
glm-4-flash: 20 × 0 = 0 元(免费!)
省了 1 元,但 faithfulness 从 0.85 掉到 0.65?→ 不值(质量崩)
faithfulness 只从 0.85 掉到 0.82?→ judge/改写用 flash 值
5. 怎么画质量/成本曲线做决策?
单点对比不够,要看「不同环节、不同模型的质量-成本坐标」,找帕累托最优:
质量(faithfulness)
1.0 ┤ ● glm-4(生成) ← 质量高但贵
│ ╱
0.8 ┤ ╱
│ ╱
0.6 ┤ ● glm-4-flash(生成) ← 便宜但质量掉
│
0.4 ┤
│ ─────────────────────────→ 成本(元/次)
0 0.02 0.05
决策:生成环节落在 glm-4(质量敏感,值得花钱)
改写/judge 环节落在 flash(质量够用,免费最优)
💡 帕累托最优:没有一个选项在「质量更高且成本更低」上完胜另一个时,就看你的业务更看重哪边。知识库问答质量敏感 → 生成选 glm-4;量大不敏感的辅助环节选 flash。
6. 本课代码会做什么
code.py(教学,零依赖)
- 用 mock 数据演示「同 golden set 两模型对比」的完整流程
- 画质量/成本对比表 + 决策结论,看清「context 指标是对照组」「生成环节该用谁」
落地到 kb-qa:eval/
- 新增
run_cost_eval.py:复用run_eval.py的 build_samples + ragas,按 glm-4 / glm-4-flash 各跑一遍,算成本,产出对比报告 - 新增
cost_report.md:报告模板 + 选型结论
7. 跑起来
教学代码(零依赖)
cd ops-lessons/12_cost_quality
python code.py
预期:打印 glm-4 vs flash 的四指标 + 成本对比表,给出「生成用 glm-4、改写/judge 用 flash」的决策结论。
落地验证(kb-qa,需 API key)
cd portfolio-projects/knowledge-base-qa
python eval/run_cost_eval.py --limit 5 # 快速冒烟(5 题)
# → 产出 eval/cost_report.md 对比表 + 选型建议
🎯 面试话术
「我用评估管线量化了 glm-4 和 flash 的质量/成本差:同一 golden set 各跑一遍 ragas。数据表明生成环节 flash 的 faithfulness 明显低于 glm-4(不值得为省钱牺牲核心质量),但改写和 judge 环节 flash 质量接近且免费。据此我把生成留给 glm-4、改写和 judge 交给 flash——成本降下来质量几乎不变。这是质量-成本-延迟三角的工程权衡,用数据而非直觉做决策。」
落地清单
| 文件 | 内容 | 如何验证 |
|---|---|---|
eval/run_cost_eval.py |
新增:复用 ragas 管线,glm-4 vs flash 对比 + 成本 + 报告 | python eval/run_cost_eval.py --limit 5 |
eval/cost_report.md |
新增:对比报告模板 + 选型结论 | 跑一次后自动填入 |
下一课 Lesson 13 — LLMOps 毕业整合 把 A/B/C/D 四模块收敛成运维就绪的 kb-qa v2。