Skip to content

第 4 章 · 零基础技术底座 ​

预计阅读 18 分钟难度 ★★☆前置 第 1 章、第 3 章

本章你会学到:FDE 的技术底座由哪五层构成,每层「必须懂什么、够用就好什么、可以先跳过什么」,以及怎么用大约 90 小时把这张底座搭起来。

一句话:FDE 的技术能力不是「会多少算法」,而是「能不能独立把一条请求从用户点下去,追到数据库,再追回来」。

一个现场片段 ​

以下是合成场景,用于说明典型情境,不对应任何真实客户。

周三下午四点,客服中心。主管指着屏幕上转圈的页面说:「工单列表打不开了,刚才还好好的。IT 说他们上午调整了安全策略,但跟我们有什么关系?」

你没急着回答,先问了三个问题:什么时候开始的?所有人都这样,还是只有个别人?最近改过什么配置?答案很一致:十分钟前开始,整个客服组都这样,上午 IT 做过一轮账号权限调整。

你打开浏览器开发者工具,切到 Network 面板,刷新页面。GET /api/tickets 返回 500,响应体只有一行 {"error":"internal"}。你把这条请求复制成 curl 命令重放,结果一样,说明问题不在浏览器。接着翻服务日志,堆栈最后一行写着 permission denied for table tickets;再查服务的环境变量,发现它连接数据库用的账号被安全策略收紧了权限。

你给 DBA 发消息,十分钟后权限补齐,页面恢复。主管松了口气,问:「所以到底是什么坏了?」你说:「数据库账号权限被安全策略改掉了,接口本身没问题。」

这个片段里没有一行算法代码,但这就是 FDE 每天做的事:把客户嘴里的「坏了」,翻译成系统里的「哪一段链路、哪个环节、被什么改动影响了」。

技术地图:五层,不是五个专业 ​

很多新人把技术底座理解成一长串书单:操作系统、计算机网络、数据库原理、分布式、机器学习……然后被劝退。方向错了。FDE 需要的不是五个专业,而是一张有优先级的五层地图:每层知道它负责什么、坏了会在哪个症状上表现出来、自己能验证到哪一步。深度按需补,宽度先铺开。

text
┌──────────────────────────────────────────────┐
│ 第 5 层  安全与可观测                          │
│          最小权限 / PII / 提示注入 / 审计 / 告警  │
├──────────────────────────────────────────────┤
│ 第 4 层  AI 与 LLM                            │
│          token / 提示词 / RAG / 工具调用 / 评测   │
├──────────────────────────────────────────────┤
│ 第 3 层  云与部署                              │
│          环境 / 密钥 / 日志 / 容器 / CI-CD       │
├──────────────────────────────────────────────┤
│ 第 2 层  数据                                  │
│          SQL / 表结构 / 管道 / 口径             │
├──────────────────────────────────────────────┤
│ 第 1 层  计算机与网络                           │
│          HTTP / API / JSON / DNS / TLS         │
└──────────────────────────────────────────────┘
         ▲ 下层坏了,上层一定出症状;上层的问题,要从下层找原因
层你至少要懂够用就好现在可以跳过自测动作
1 计算机与网络HTTP 方法、状态码、JSON、命令行、Git、一次请求要经过谁DNS、TLS、反向代理、超时与重试内核调度、TCP 拥塞控制细节用 curl 调通一个公开 API,并解释返回码
2 数据写 SQL、看表结构、问清口径、抽样看数据数仓分层、批/流处理、向量检索Spark 调优、数据治理全体系从两张表关联出一张按天分组的报表
3 云与部署区分环境、管密钥、看日志、跑容器、走一次发布Kubernetes 常用命令、基础设施即代码多云架构、大规模成本优化把一个小服务跑起来,改配置连另一个数据库
4 AI 与 LLMtoken、上下文、提示词、RAG、工具调用、评测、幻觉微调、agent 编排、成本优化训练大模型、分布式推理做一个能引用原文、会承认「不知道」的问答 demo
5 安全与可观测最小权限、PII、提示注入、越权、审计、告警合规流程、等保基本概念安全测评细节、渗透测试找出一个越权风险并修掉,留下记录

学习顺序建议从下往上,但不必学完一层再进下一层。更有效的节奏是:每层都走三遍——先复现,再改,最后从零搭一个最小版本。能造,才算真的会。

第一层:计算机与网络——把「转圈」拆成链路 ​

一个页面打不开,可能坏在十个地方。按链路一段段排除,一次请求要经过:浏览器解析域名(DNS)→ 建立加密连接(TLS)→ 网关或反向代理 → 应用服务 → 数据层 → 外部依赖 → 响应返回。

HTTP、API 与 JSON ​

HTTP 就是「客户端问一句,服务端答一句」。至少要能看懂请求的方法、地址、头、体,以及响应的状态码、头、体。状态码是最省时间的排障线索:

状态码含义通常是谁的问题FDE 的第一动作
200 / 201成功 / 已创建—核对返回结构是否符合预期
400请求格式不对调用方检查 JSON 字段、类型、必填项
401没认证或凭证过期调用方查 token 是否过期、是否带对
403认证了但没权限权限配置查账号角色与数据权限
429被限流调用方节奏退避重试、降频、申请配额
500服务内部异常服务端看日志堆栈,不要只盯着页面
502 / 504上游服务挂了 / 超时网关或上游查依赖服务健康与超时设置

JSON 是接口之间最常见的「合同」。养成三个习惯:先拿一条真实响应看结构,别凭字段名猜;给空值和缺字段留位置;记住分页。

curl 是 FDE 的分水岭:它让你把「页面报错」从浏览器里剥离出来,单独验证服务端。

bash
# 看完整响应头和状态码
curl -i https://api.github.com/repos/vitepress/vitepress

# 带鉴权头调用,只看返回体(地址是示意,换成你要排查的接口)
curl -s -H "Authorization: Bearer $TOKEN" \
     "https://api.example.com/v1/tickets?page=1&size=20"

判断标准很简单:你能不能让同一条请求脱离 UI 独立重放,并读到可解释的错误。

超时、重试与幂等 ​

「失败就重试」听起来很稳,但如果请求是「创建订单」「发送短信」「扣款」,重试就可能变成重复下单、重复发送、重复扣款。

  • 超时:每个外部调用都要设上限,默认值是灾难。
  • 重试:只重试可重试的错误(网络抖动、429、5xx),并指数退避。「重试三次」常常是线上事故的直接原因,不是解决方案。
  • 幂等:同一请求重复执行与执行一次结果相同,常用做法是带一个唯一的 request_id。写重试前先问:重复执行会不会多出一笔钱、一条消息、一条记录?

命令行与 Git ​

命令行(CLI)是远程排障的入口:登服务器、看进程、查端口、翻日志都靠它。Git 是协作与回滚的基础:拉代码、建分支、提交、开 PR、解决冲突、回退版本。两者都讲究每一步可重放、可追溯——至少要能在没有图形界面的机器上完成一次部署。

第二层:数据——先问口径,再写 SQL ​

AI 项目里,模型很少是第一个坏掉的环节,数据才是。Nabeel Qureshi 在 2024 年的一篇公开反思里提到(单一来源,原文细节待核),数据问题里九成五不是模型问题,而是接入、清洗和关联。这句话在真实项目里会反复被验证。

FDE 面对的不是教科书里的「大数据」,而是三类现实:找不到的数据、对不上的数据、没人说得清口径的数据。

必须会写的 SQL ​

不需要成为数据库管理员,但这些必须能独立写出来:

  • select / where / order by / limit:取数、过滤、排序。
  • join,尤其是 left join:把散在两张表里的信息拼起来,并处理「右表没有」。
  • group by + count / sum / avg:做最基础的指标。
  • case when:把原始码值翻译成业务分类;时间过滤:按天、按周聚合。
  • 窗口函数入个门:用 row_number() 取「每个用户最新一条」。
sql
-- 示例:每天各分类的工单量(示意表结构,不是真实客户数据)
select date(created_at) as d,
       category,
       count(*) as ticket_count
from tickets
where created_at >= date '2026-01-01'
group by 1, 2
order by 1 asc, 3 desc;

数据管道与数据质量 ​

一条数据从源系统走到你手里,通常要经过抽取、清洗、标准化、落表、加工指标。这条链上任何一段都会出错,所以你必须能回答四个问题:

  1. 这份数据从哪个系统来?谁是 owner?
  2. 多久更新一次?失败会不会有人知道?
  3. 字段口径是什么?空值代表「没有」还是「不知道」?
  4. 权限够不够、合不合规?有没有不该拿的个人信息?

拿到一张新表,先做「四查」:空值(关键字段空值率、集中在哪)、重复(主键是否唯一)、时间范围(从哪天到哪天、有没有断档)、分布异常(默认值、测试数据、机器人账号)。然后随手抽 20 条亲眼看一遍。这一步花不了十分钟,但能避免你基于错误理解做一周的活。

第三层:云与部署——让它在别人机器上也能跑 ​

「在我电脑上是好的」最伤信任。FDE 的标准是:它在客户的测试环境里、用客户的账号、跑在客户的数据上,也是好的。

环境、配置与密钥 ​

至少分三套环境:开发(dev)、预发/测试(staging)、生产(prod)。它们应该同构,区别只在配置和数据。你要能一眼回答:这个程序现在连的是哪个数据库、用哪个账号、调哪个模型服务。

配置和密钥永远不要写死在代码里。三条底线:不把密钥提交进 Git;不把密钥打印进日志、贴进群聊或演示 PPT;不用个人账号跑生产服务,用独立服务账号按最小权限授权。

日志与可观测 ​

日志不是「出事了才翻的东西」,而是还原现场的唯一证据。规范日志至少包含时间、级别、请求 ID、路由、耗时、结果或错误码;涉及用户时用脱敏标识。日志要能回答:走到哪一步、调了谁、花了多久、在哪失败。字段固定下来,排查时间会从几小时降到几分钟。

容器与 CI/CD(持续集成 / 持续交付) ​

容器解决的是「环境一致」:镜像里装好运行所需的一切,到哪都能跑。你不需要成为 Kubernetes 专家,但要会写一个能跑起来的 Dockerfile、用一条命令构建镜像、用环境变量注入配置、看容器日志。

CI/CD 解决的是「每次改动都能安全地到线上」。一条最小可用的流水线只需要六步:

text
提交代码 → 静态检查/测试 → 构建镜像 → 部署到测试环境
        → 冒烟验证 → 人工批准 → 部署生产 → 保留回滚点

判断一个人是否真的会部署,不看他会多少命令,看他在上线前能不能回答:**这次变更如果坏了,怎么在五分钟内退回去?**数据库结构变更、模型版本升级、配置修改这三类往往最难回滚,要提前设计。

第四层:AI 与 LLM——够用版 ​

这一层的要求很具体:不用训练模型,但要判断需求该不该用模型、用什么形态、怎么证明有效。

token、上下文与成本 ​

模型读写的单位是 token。上下文窗口(context window)是一次能塞进去的 token 上限,包含提示词、检索资料、历史和输出。

三件事要同时算账:质量、延迟、成本。成本约等于(输入 + 输出 token)× 单价;上下文越满,单次成本越高,模型对中段内容也越容易忽略——别把整本手册都塞进去。

提示词、RAG、工具调用与 agent ​

  • 提示词(prompt):把角色、任务、输入、约束、输出格式写清楚。要求结构化输出时,给出 JSON 结构,比说「请详细回答」有效。
  • 检索增强生成(RAG, Retrieval-Augmented Generation):先检索你的资料片段,再让模型基于片段回答并给出引用。它解决「模型不知道你公司的事」和「答案要出处」两个问题。
text
离线:文档 → 清洗 → 切块 → 向量化 → 建索引(附元数据:来源、权限、更新时间)
在线:问题 → 向量化 → 检索 top-k → 重排/过滤 → 拼上下文 → 生成答案 + 引用

RAG 最常见的失败不是模型不行,而是切块碎了语义、检索没捞到正确片段、引用对不上原文、权限没隔离导致越权。

  • 工具调用(tool / function calling):模型输出「调用哪个工具、参数是什么」,你的程序执行后把结果交回。要严格控制工具白名单、参数校验、超时和权限。
  • 智能体(agent):让模型在「观察 → 思考 → 行动」的循环里多步完成任务,适合步骤不固定的任务;流程固定时,确定性流水线更稳、更便宜。

微调、评测与幻觉 ​

**微调(fine-tuning)**不是万能药。它适合格式固定、风格要求高、分类边界专门训练、想用小模型降本的场景;不适合知识常变、需要引用、数据不足的情况。

需求特征优先方案代价不要用它来做
规则明确、字段固定规则/正则/映射表维护成本随规则增长处理模糊语义和长尾表达
需要引用内部资料RAG切块与检索调优、权限隔离让模型凭空记住全部文档
风格/格式/分类边界稳定微调小模型标注数据、训练与版本管理频繁变化的知识
任务复杂、通用能力不足换更强模型或拆任务成本与延迟上升掩盖数据或流程问题

评测是最容易被跳过、也最不该跳过的一环。最少 30 条覆盖真实分布的测试用例,每次改提示词、换模型、调检索都跑一遍。没有评测集,你只是在凭手感调参。

**幻觉(hallucination)**指模型生成流畅但没有依据或错误的内容。它无法彻底消除,只能管理:给出处、限制范围、允许说「资料里没有」、高风险输出做结构化校验和人工复核。

第五层:安全与可观测——默认拒绝 ​

安全不是上线前补的一张表,而是设计时的默认值。FDE 至少要守住五条线:

  1. 最小权限:服务只拿真正需要的权限;能只读就不给写,能按行授权就不给全表。
  2. 个人信息(PII, Personally Identifiable Information):先识别哪些字段是个人信息,再决定能不能进检索库、日志、评测集。
  3. 提示注入(prompt injection):用户输入、检索到的文档、网页、邮件都可能是攻击载荷。防御思路:不把外部内容当指令、工具白名单、高风险动作人工确认、输出校验。
  4. 越权访问:RAG 最容易踩的坑是「检索到了用户不该看的文档」。权限必须在检索前过滤,而不是生成后再删。
  5. 审计:谁在什么时候、用什么输入、得到什么输出,要能追溯;高风险动作必须留痕并尽量可回滚。

可观测性(observability)在 AI 场景还要记录:检索命中、有无引用、是否走「无答案」分支、用户反馈、人工修正、单次成本——这些就是评测素材。

上线前必须能回答的三个问题

  1. 这个功能被滥用时,最坏会发生什么?谁能一键关掉它?
  2. 用户数据会不会出现在日志、评测集或第三方请求里?谁批准过?
  3. 出了错误输出,多久能被发现、多久能修正、谁负责通知用户?

90 小时技术底座计划 ​

90 小时分三段,每段 30 小时:每周 7-8 小时约 12 周,每周 5 小时约 18 周。关键不是时长,而是每段都留下可验证的产出。

阶段小时内容与每周动作交付证明
基础30网络与接口 12h、命令行与 Git 8h、调试与日志 10h。第 1-4 周:用 curl 调通 3 个公开 API、跑通一个开源项目、记录 3 次真实排障接口排障笔记 + 本地运行记录
数据与云30SQL 14h、数据管道 6h、容器与 CI/CD 10h。第 5-8 周:写 10 条查询、清洗一份 CSV、把 demo 打成镜像并配自动构建数据分析报告 + 可一键启动的仓库
AI30模型 API 与提示词 10h、RAG 与工具调用 10h、评测与安全 6h、复盘 4h。第 9-12 周:做一个带引用的问答、写 20 条评测、红队测试自己的 demoRAG demo + 评测与安全记录

FDE 必会 20 个动作 ​

只能「看别人做过」不算。逐条打勾,并在作品集里留下证据。

  • [ ] 1. 用 curl 调用一个需要鉴权的接口,并解释返回的状态码
  • [ ] 2. 在浏览器 Network 面板复现一次请求失败,定位到具体请求
  • [ ] 3. 看懂一段完整报错堆栈,判断是应用、依赖、网络还是权限问题
  • [ ] 4. 画出从用户点击到数据库的请求链路,标出 5 个可能失败的点
  • [ ] 5. 给一个调用加上超时、有限重试和幂等保护
  • [ ] 6. 用 Git 建分支、提交、开 PR,并解决一次合并冲突
  • [ ] 7. 把别人的开源项目在本地跑起来,并说清它的依赖
  • [ ] 8. 把写死在代码里的密钥挪到环境变量或密钥管理服务
  • [ ] 9. 写 3 条有业务含义的 SQL,至少一条含 join 和分组
  • [ ] 10. 检查一张新表的空值、重复、时间范围和异常值
  • [ ] 11. 通过结构化日志还原一次请求的完整路径
  • [ ] 12. 为一个接口写一份最小数据字典(字段、类型、口径、负责人)
  • [ ] 13. 把一个服务打成容器镜像并在本地运行
  • [ ] 14. 配一条 CI 流水线,让代码提交后自动跑测试
  • [ ] 15. 走一次发布流程,并说明这次变更怎么回滚
  • [ ] 16. 搭一个最小 RAG,能引用原文并处理「资料里没有」
  • [ ] 17. 用工具调用让模型完成一次真实操作,并限制权限
  • [ ] 18. 写 20 条评测用例,跑出基线并记录每次改动
  • [ ] 19. 复现一次提示注入,并给出至少一条有效防御
  • [ ] 20. 写一份上线前安全检查清单并逐条验证

常见误区 ​

误区典型表现后果正确做法
从训练模型开始一上来学微调、买 GPU、跑开源权重三个月过去,没有能用的业务功能先用现成模型 + RAG 跑通价值,再谈微调
只会调 API,不会排障接口一报错就等后端,日志看不懂在客户现场失去可信度把「20 个动作」当硬门槛练
把 demo 当生产假数据演示很顺,真实数据一跑全是问题承诺兑现不了,项目在试点阶段崩塌从第一天起就用真实数据、真实用户、真实指标
先学完再上手收藏了几十门课,一个项目没做学习没有反馈,越学越虚每个阶段都以一个可运行的小项目收尾
迷信新框架什么新追什么,半年换三套技术栈时间和维护成本被吃光优先选客户环境能承接、团队能维护的方案

一句话判断标准

学完任何一项技术,问自己:**我能不能在客户现场、没有同事帮忙的情况下,用它定位或解决一个问题?**能,就是够了。

本章小结 ​

  • 技术底座是五层地图:网络与接口、数据、云与部署、AI 与 LLM、安全与可观测。下层坏了,上层一定出症状。
  • FDE 的深度按需补,宽度必须先铺开;判断标准是「能不能独立排障和验证」,不是「学完了多少门课」。
  • 每层的节奏相同:先复现,再修改,最后从零搭最小版本,并留下可验证的产出。
  • 90 小时计划分三段:30 小时基础、30 小时数据与云、30 小时 AI;20 个必会动作是硬门槛。

练习 ​

  1. **用 curl 调公开 API。**分别请求成功、不存在的资源、不带鉴权的私有接口,记录状态码并解释各是谁的问题。判断标准:三行状态码都能说清原因,并能把请求重放给别人看。
  2. **读日志找错误。**找一段真实或公开的报错日志,按「时间—请求 ID—错误码—堆栈—依赖」复原事件,写 200 字排障记录。判断标准:别人照着记录能复现定位过程。
  3. **写 3 条 SQL。**用任意公开数据集,写按天分组、两表 join、取每组最新记录各一条。判断标准:都能跑通,并写明业务含义和口径。
  4. **画一个请求链路。**选一个你常用的系统,画出从点击到数据返回的链路,标注 5 个可能失败的环节和排查方法。判断标准:没有跳步,失败点都有检查动作。

下一章:第 5 章 · 业务、数据与价值:先找痛,再找数,最后证明价值。

相关:实战 Lab 总览 · Lab A · 客服工单分流 · 附录 A · 术语表 · FDE 自评 · 第 8 章 · 生产化、评测与安全

本章资料来源: 本章为方法性内容,技术概念主要参考官方文档与公开规范:MDN Web Docs《HTTP response status codes》、HTTP 语义规范(RFC 9110)、Git 与 Docker 官方文档;这些属于通用工程知识,不涉及具体业务数据。Nabeel Qureshi 关于「数据问题主要是接入、清洗与关联」的反思,来源为其 2024 年 10 月公开文章(单一来源,原文细节待核)。本章不含公司经营数据;90 小时计划与 20 个动作是本书为学习设计的方法,不是行业统计。完整出处与口径说明见附录 C · 案例与资料来源。

用现场换理解,用交付换信任。