本页目录
Lesson 13 — LLMOps 毕业整合:运维就绪的 kb-qa v2
本课目标:把 A/B/C/D 四模块的能力在 kb-qa 上收敛成一个「运维就绪」的版本,写一份运维手册 + 生产上线检查清单,让 kb-qa 从「能跑的 demo」升级为「能讲完整运维故事的生产服务」。
学完你能回答面试官那句终极问题:「你这个项目上线之后,从运维角度看,你都做了什么?」——一张检查清单,每项都指向具体代码/文档证据。
1. 为什么要有毕业整合课?
前 12 课每个都在 kb-qa 上落地了一块能力(日志、追踪、评估、鉴权、防御、MCP、缓存、压测、选型)。但它们是逐课加的、散落的。毕业整合把它们收敛成一个统一的运维视图,回答:
- 这些能力现在全了吗?(检查清单)
- 每项能力指向哪段代码?(证据链)
- 从运维角度,kb-qa 现在是个什么水准?(运维视图)
🎯 核心价值:这课不写新代码,是把散落的能力编织成一个可讲述的运维故事。面试时你不是说「我加了个缓存」,而是说「我的服务在这四个维度都做了运维准备,这是检查清单和证据」——这是 demo 和生产服务的本质差距。
2. 运维视图:kb-qa v2 的四个维度
把 L01–L12 的成果按运维的四个维度重新组织:
① 可观测性(Observability)——「出问题怎么查」
| 能力 | 来自 | 代码证据 | 面试可讲 |
|---|---|---|---|
| 结构化日志(trace_id 贯穿) | L01 | src/kb_qa/observability.py |
按 trace_id grep 还原链路 |
| 全链路追踪(Langfuse/降级) | L02 | src/kb_qa/tracing.py |
面板看每步耗时/成本 |
| 线上评估闭环(抽样+反馈) | L03 | src/kb_qa/online_eval.py + POST /api/feedback |
低分自动进队列 |
运维回答:「线上出问题,我按 trace_id 捞日志还原链路;想看整体,Langfuse 面板有每次问答的检索/生成/成本;质量下降,线上抽样 ragas 自动抓坏答案进 review_queue。」
② 安全(Security)——「怎么防攻击」
| 能力 | 来自 | 代码证据 | 面试可讲 |
|---|---|---|---|
| API 鉴权(key) | L04 | src/kb_qa/auth.py require_api_key |
无 key → 401 |
| 限流(滑动窗口) | L04 | src/kb_qa/auth.py SlidingWindowLimiter |
超速 → 429 |
| Prompt 注入攻击测试集 | L05 | eval/attack_set.json + run_attack.py |
量化失守率 |
| 输入输出守护栏 | L06 | src/kb_qa/guardrails.py |
失守率 90%→显著下降 |
运维回答:「接口有 key 鉴权和按 key 限流防未授权/刷爆;针对 RAG 头号威胁间接注入,我做了输入隔离+输出过滤的纵深防御,攻击测试集失守率从 90% 打下来,核心用例固化进 CI。」
③ 集成(Integration)——「怎么被别的系统用」
| 能力 | 来自 | 代码证据 | 面试可讲 |
|---|---|---|---|
| MCP Server(知识库成标准工具) | L08 | mcp_server.py |
Claude Desktop 配一行 JSON 调用 |
| Agent 作 MCP Client | L09 | research-assistant kb_mcp_client.py |
两项目打通 |
运维回答:「知识库封成了 MCP server,任意 MCP host 配一行就能调用;我的 Agent 项目能作 client 调它,实现了内部知识库+联网双源研究——标准协议下的系统集成。」
④ 性能与成本(Performance & Cost)——「怎么扛并发省钱」
| 能力 | 来自 | 代码证据 | 面试可讲 |
|---|---|---|---|
| 语义缓存 | L10 | src/kb_qa/semantic_cache.py |
同义命中省 LLM 调用 |
| 压测基线 | L11 | loadtest/run_loadtest.py |
QPS 天花板 + 信号量保护 |
| 成本/质量选型 | L12 | eval/run_cost_eval.py |
按环节选模型的数据决策 |
运维回答:「语义缓存让同义问题不重复烧钱;压测定了 QPS 天花板并用信号量保护上游;按环节选模型(生成 glm-4/辅助 flash)用 ragas 数据支撑。」
3. 生产上线检查清单(Production Readiness Checklist)
这是本课的核心产出——每项都指向具体证据,全勾才算运维就绪。详见同目录 production_readiness_checklist.md。
可观测: ✅ 日志(trace_id) ✅ 追踪(Langfuse) ✅ 线上评估闭环
安全: ✅ 鉴权(key) ✅ 限流(429) ✅ 注入防御(纵深+CI)
集成: ✅ MCP Server ✅ Agent Client(两项目打通)
性能成本:✅ 语义缓存 ✅ 压测基线 ✅ 成本选型报告
🎯 这份清单的用法:面试时拿出来——「这是我的生产上线检查清单,每一项我都能指出对应的代码和验证方式」。这比口头说「我做了很多优化」有说服力 100 倍。有清单 = 工程化思维;没清单 = 凭感觉。
4. kb-qa 的演进:从 demo 到运维就绪
起点(rag-lessons 毕业后) 现在(ops-lessons 毕业后)
───────────────────────── ─────────────────────────
能跑 RAG 问答 能跑 + 可观测 + 安全 + 可集成 + 控成本
print 调试 trace_id 贯穿 + Langfuse 面板
接口裸奔 key 鉴权 + 限流
无安全意识 注入测试集 + 守护栏 + CI 防回归
只能 HTTP 调 MCP 标准工具,生态即插即用
每次都调 LLM 语义缓存命中省调用
不知道能扛多少 压测定了 QPS 天花板
拍脑袋选模型 ragas 数据支撑选型
这就是「做过 demo」和「运维过生产 AI 服务」的分界线——也是这套 ops-lessons 课程的核心目标。
5. 毕业后的能力对照(任务书最终验收)
| 面试官会问 | 学完后你能指着代码说 |
|---|---|
| 上线后怎么知道好不好? | Langfuse trace + 线上抽样 ragas + 点踩队列(L01–L03) |
| 有人在文档里藏恶意指令? | 注入测试集 + 输入隔离/输出过滤,失守率 before/after(L04–L06) |
| 接口安全吗? | key 鉴权 + 按 key 限流,401/429 有测试(L04) |
| 了解 MCP 吗? | RAG 封成 MCP server,Agent 作 client,两项目打通(L07–L09) |
| 怎么控成本扛并发? | 语义缓存 + 压测基线 + 模型选型数据报告(L10–L12) |
每一句都不再是空话,而是有代码、有数据、有验证的硬实力。
🎯 面试话术(终极版)
「我的知识库问答服务是运维就绪的生产级系统:可观测性上,结构化日志 trace_id 贯穿全链路、接了 Langfuse 看每次问答的耗时成本、线上抽样 ragas 自动抓坏答案;安全上,接口有 key 鉴权和限流,针对 RAG 头号威胁间接注入做了纵深防御,攻击测试集失守率从 90% 降下来并固化进 CI;集成上,知识库封成 MCP server 被任意 host 调用,Agent 作 client 实现内部+联网双源;性能成本上,语义缓存省重复调用、压测定了 QPS 天花板、按环节选模型有 ragas 数据支撑。我有一份生产上线检查清单,每一项都指向具体代码——这是 demo 和生产服务的本质差距。」
本课产出(无代码,纯整合文档)
| 文件 | 内容 |
|---|---|
README.md(本文件) |
运维视图四维度 + 演进对比 + 能力对照 |
production_readiness_checklist.md |
生产上线检查清单(每项指向证据) |
仓库根 README.md(更新) |
课程总览表 + 作品集区补 ops-lessons |
kb-qa README.md(更新) |
新增「生产运维(LLMOps)」章节,串联 L01–L12 |
🎉 恭喜!完成本课,ops-lessons 全 13 课收官。
你已经从「会做 RAG/Agent demo」升级为「能把 AI 服务推进到运维就绪」——这是求职市场上稀缺的、面试官最想听的能力。