Agent Engineering 课程阅读
首页/课程五 · LLMOps 生产运维/成本/质量权衡:把模型选型变成数据

在 GitHub 查看原文

本页目录

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。