🏠 总目录📚 本教程 17 · 实战与挑战项目
📑 本页目录(点开跳转)

17 · 实战与挑战项目

按项目算,1–4 天 | 🔨 菜单式:做完一个能上线的,比读完十六章有用


🎯 一句话

前面十六章拆开讲了每个零件,这一章把它们装回去 —— 而且是装成一个你敢发给别人用的东西。

⭐ 这个板块和站里其他板块最大的不同:它的验收标准不是「跑通了」,是「别人能用」。 所以每个项目的验收里都有一条:把链接发给一个不认识你代码的人,看他能不能用起来。


🗺️ 怎么挑

你的情况 从这个开始
想尽快有个能给人看的东西 ① 完整聊天应用(2–3 天)
手上有一堆文档想让它能问答 ② 文档问答(3–4 天)
想练「别把钱烧光」这件事 ③ 成本控制台(1–2 天)
已经有个能跑的,想让它扛得住 挑战 A:压力与降级(2–3 天)
想搞懂线上出问题怎么查 挑战 B:故障演练(2–3 天)

⚠️ 别按顺序全做。 这个板块的项目不像算法题能秒验,做一个到真上线比做三个半成品有价值得多。


① 完整聊天应用 ⏱ 2–3 天

🔗 依赖:03 后端骨架 · 04 调用层 · 05 流式输出 · 06 关系数据库 · 08 认证与多租户 · 09 · 10 · 14 部署

目标:把第 1 章那个两小时版本,补成一个真的能用的产品。

第 1 章末尾列的缺失项,这里逐条补上:

第 1 章缺的 这里补上 在哪一章
没有数据库,刷新就没了 对话和消息落库 06
没有登录,谁都能用 认证 + 每人只看自己的对话 08
密钥硬编码在代码里 环境变量 + 不进版本库 13
没有限流,一个人能打爆 三层护栏 12
出错了看不出为什么 结构化日志 + request_id 15

验收标准

💡 加分:加一个「重新生成」按钮 —— 它会逼你想清楚消息该怎么存(版本?覆盖?分支?), 这是真实产品里第一个会让你重构数据模型的需求。


② 文档问答 ⏱ 3–4 天

🔗 依赖:① 的全部 + 07 向量检索落地 · 11 长任务与队列

目标:用户上传自己的文档,然后能对着它提问。

为什么这个项目值得做:它逼你面对三个第一次做都会栽的问题 ——

  1. 上传和处理必须异步:一个 50 页的 PDF 切分 + embedding 要几十秒, HTTP 请求等不了 → 队列(11 章
  2. ⭐⭐ 检索必须带租户过滤:搜的时候只能搜这个用户自己的文档 —— 这正是 07 章说的「过滤 + 向量检索的组合,是专用库和关系库差别最大的地方
  3. ⚠️ 处理失败了怎么办:PDF 是扫描件、文件损坏、超大 —— 状态要能让用户看见

验收标准


③ 成本控制台 ⏱ 1–2 天

🔗 依赖:04 调用层 · 12 限流配额与成本护栏 · 15 可观测性

目标:给你的应用做一个后台页面,看得见钱花在哪

这个项目投入产出比最高 —— 它不新增用户功能,但它是唯一能让你晚上睡着的东西

要做的 1. 每次 LLM 调用落一条记录:用户、功能、模型、输入/输出 token、估算成本、耗时 2. 一个页面:按天 / 按用户 / 按功能 / 按模型四个维度看 3. 三层护栏都接上(12 章):每用户限流、每用户配额、全局熔断

验收标准


🏆 挑战 A:压力与降级 ⏱ 2–3 天

🔗 依赖:①的成品 + 11 · 12 · 14

目标:让你的应用在被压和被打断时,坏得体面一点。

要做的实验(每个都要记录现象)

实验 期望的行为
并发 50 个流式请求 不崩、不互相拖慢到不可用;⚠️ 观察连接池是不是先耗尽(06 章
把 LLM API 换成一个必定超时的地址 请求在超时后干净失败,不是挂到网关超时
请求进行到一半,客户端断开 ⭐ 后端感知到并停止调用05 章)—— 否则你在为没人看的内容付费
数据库连接断开再恢复 应用自动恢复,不用重启
部署新版本时正好有流式请求在跑 ⭐ 优雅关闭:旧请求做完,新请求进新实例14 章

验收标准 - ⭐⭐ 每个实验都先写下你预期会发生什么,再去试 —— 预期和实际不一致的地方才是你真正学到的 - ✅ 至少有一个降级路径能真的走通(比如主模型超时后自动换小模型)


🏆 挑战 B:故障演练 ⏱ 2–3 天

🔗 依赖:①的成品 + 15 可观测性 · 16 上线前检查单

目标:⭐ 让别人给你埋一个 bug,你靠日志和追踪把它找出来。

怎么做 1. 找个人(或者让 AI)在你的代码里改一处,制造一个只在特定条件下出现的问题 —— 比如某个用户的对话变慢、某类请求偶发 500、成本莫名其妙涨了 2. 你只能看日志、追踪和监控面板,不能直接看 diff 3. 记录你的排查路径:先看什么、怎么缩小范围、哪一步卡住了

验收标准 - ⭐⭐ 能在 30 分钟内定位到问题所在的那一层(不用精确到行) - ⚠️ 如果找不到,那才是这个项目最大的收获 —— 说明你的可观测性有洞。 ⭐ 把「这次缺了什么信息」补进日志,然后再演练一次 - ✅ 最终能回答三个问题:影响了谁、从什么时候开始、为什么没有告警

💡 这个项目是《模型上线之后》11 · 从告警到根因的应用层版本 —— 那一章讲模型出问题怎么查,这里练的是服务出问题怎么查


🔗 这一章连到哪里

去哪 为什么
16 · 上线前检查单 每个项目做完都照着过一遍。它的每一条都给了「怎么验证」,正好当验收清单用
01 · 第一天:两小时上线 项目 ① 就是把那一版补完整。⭐ 回头看那一章末尾列的缺失清单,现在你能逐条划掉了
12 · 限流配额与成本护栏 项目 ③ 的全部依据。⚠️ 全局熔断一定要真触发一次,写了没验证等于没写
../模型上线之后/index.html ⭐ 应用能跑之后的下一站:服务健康是本板块,模型准不准是那一套
../智能体工程教程/17-实战项目.html ⭐ 对照着做:那边练的是「Agent 的能力怎么设计」,这边练的是「怎么把它变成产品」

✅ 检查点

⭐ 这一章的检查点不考知识,考你能不能判断自己做到位了没有

  1. 这个板块的项目,验收标准和别的板块最大的不同是什么?
  2. 项目 ① 里,验证租户隔离该怎么试?为什么不能只看界面?
  3. 「首字在 2 秒内出现」和「2 秒内答完」是一回事吗?为什么前者才是标准?
  4. 项目 ② 逼你面对的三个问题分别是什么?
  5. 为什么说项目 ③ 投入产出比最高?
  6. 全局熔断该怎么验证?为什么必须真触发一次?
  7. 挑战 A 里,客户端断开后后端不停会怎样?
  8. 挑战 B 里如果找不到 bug,该做什么?
👀 答案
  1. ⭐ 别的板块验收是「跑通了」(最短路是不是真最短、剪枝后根值变没变),这个板块是「别人能用」。所以每个项目的验收里都有一条:把链接发给一个不认识你代码的人,看他能不能用起来
  2. 主动去试着越权:直接改 URL 里的对话 ID 去访问别人的,必须 403 而不是 200。不能只看界面,因为界面上不显示 ≠ 接口不返回 —— 隔离要做在数据访问层,不是前端过滤(08 章)。
  3. 不是一回事。 LLM 生成一段长回答本来就要十几秒,「2 秒内答完」做不到;而 ⭐ 首字延迟(TTFT)决定用户觉得它是「在动」还是「卡住了」。这就是为什么流式是必需品不是优化项(0515)。
  4. ① ⭐ 上传处理必须异步(几十秒的活 HTTP 等不了 → 队列)② ⭐⭐ 检索必须带租户过滤(这是专用向量库和关系库差别最大的地方)③ ⚠️ 处理失败要有明确状态,不能永远「处理中」。
  5. 因为它不新增任何用户功能,但它是唯一能让你晚上睡着的东西。AI 应用和普通 Web 应用最大的差别就是每个请求真的花钱,没有成本可见性,一个 bug 就能一夜烧掉预算。
  6. ⭐⭐ 把阈值调成 0.01 美元,验证它真的会拦。 必须真触发是因为:很多人写了熔断但从没验证过它会触发,等到真需要(线上死循环调 API)时才发现写错了 —— 而那时候已经在烧钱了。
  7. 你在为没有人会看的内容付费。 用户关掉页面了,后端还在调 LLM 生成剩下的几百个 token,钱照花。所以第 5 章要讲断连感知。
  8. ⚠️ 找不到才是最大的收获 —— 它说明你的可观测性有洞。⭐ 把「这次缺了什么信息」补进日志,然后再演练一次。 最终要能回答三个问题:影响了谁、从什么时候开始、为什么没有告警

🛑 可以停在这里

走神救援

⭐⭐ 这一章把前十六章的零件装回去,而且验收标准和站里别的板块不同 —— 不是「跑通了」,是「别人能用」,所以每个项目都有一条:把链接发给一个不认识你代码的人,看他能不能用起来① 完整聊天应用(2–3 天):把第 1 章那个两小时版补完整,逐条划掉它列的缺失(数据库/登录/密钥/限流/日志)。验收里最该较真的两条:⭐ 租户隔离要主动去试着越权 —— 直接改 URL 里的对话 ID 访问别人的,必须 403 而不是 200(界面不显示 ≠ 接口不返回,隔离要做在数据访问层);⭐⭐ 首字 2 秒内出现(不是 2 秒内答完 —— 长回答本来就要十几秒,TTFT 决定用户觉得它在动还是卡住了)。💡 加分项「重新生成」按钮会逼你想清楚消息怎么存(版本/覆盖/分支),这是真实产品里第一个让你重构数据模型的需求② 文档问答(3–4 天):逼你面对三个第一次都会栽的问题 —— ⭐ 上传处理必须异步(50 页 PDF 切分+embedding 要几十秒,HTTP 等不了)、⭐⭐ 检索必须带租户过滤(专用向量库和关系库差别最大的地方)、⚠️ 失败要有明确状态不能永远「处理中」。验收要写自动化测试反复验 A 用户的文档不会被 B 检索到。③ 成本控制台(1–2 天,性价比最高):不新增任何用户功能,但它是唯一能让你晚上睡着的东西。核心验收是 ⭐⭐ 能回答「昨天这 100 块是谁花的、花在哪个功能」(答不上来说明记账维度不够);以及 ⭐⭐ 把全局熔断阈值调成 0.01 美元验证它真会拦 —— ⚠️ 很多人写了熔断从没验证过,等真需要时才发现写错,而那时已经在烧钱🏆 挑战 A 压力与降级(2–3 天):并发 50 个流式请求看连接池会不会先耗尽、LLM 换成必定超时的地址看是否干净失败、⭐ 客户端断开后端要能感知并停止(否则你在为没人看的内容付费)、部署新版时的优雅关闭。⭐⭐ 方法上最重要的是:每个实验先写下预期再去试,预期和实际不一致的地方才是真正学到的🏆 挑战 B 故障演练(2–3 天):让别人埋一个只在特定条件出现的 bug,你只能看日志、追踪和监控把它找出来。⚠️ 找不到才是最大收获 —— 说明可观测性有洞,⭐ 把「这次缺了什么信息」补进日志再演练一次。最终要能回答:影响了谁、从什么时候开始、为什么没有告警。⚠️ 最后一条建议:别按顺序全做 —— 这个板块的项目不像算法题能秒验,做一个到真上线,比做三个半成品有价值得多

打卡记录保存在你的浏览器里,首页能看到总进度