📚 前言
先讲个真实场景。
面试的时候被问到一句话:
「关于 AI 开发,你有没有做过什么基建?」
这句话杀伤力很大。
因为大部分人对 AI 开发的理解,停在这一步:
1 | 拿到 API Key |
这当然没错,但它回答不了「基建」两个字。
面试官真正想问的是:
当 AI 功能要上线、要稳定、要省钱、要持续迭代的时候,你在「调 API」和「能用的产品」之间,补了哪一层?
这一层,就是 AI 工程。
这篇是整个专栏的开篇,目标只有一个:
把「AI 工程到底在解决什么」讲清楚,并且建立起后面所有文章共用的那张「地图」。
一、「调通 API」为什么不等于「做了 AI 工程」
我们先把「调 API」这件事的真相摊开。
写一个 demo,代码大概是这样:
1 | const res = await client.chat.completions.create({ |
这段代码在 demo 里跑得很好。
但当它要变成「线上功能」,下面这些问题会一个接一个砸过来:
- 用户输入很长,超了 token 上限怎么办?
- 模型偶尔胡说八道,怎么发现、怎么兜底?
- prompt 改了一版,效果到底是变好还是变差?凭感觉吗?
- 这个月 token 花了多少钱?哪个功能最烧钱?
- 模型偶尔超时、限流、报错,整个功能就挂了?
- 模型厂商涨价 / 下线模型,要换一家,改动有多大?
你会发现:
demo 解决的是「能不能跑通」,工程解决的是「能不能长期、稳定、可控地跑」。
这个差距,和前端从「写个页面」到「前端工程化」是一模一样的。
只学会调 API,等于只学会写 <script> 标签。
二、AI 工程到底在解决什么问题
把上面那堆问题归一下类,AI 工程的核心其实就是在和 LLM 的几个「天生缺陷」对抗。
LLM 和我们熟悉的普通函数完全不同:
1 | 普通函数:输入确定 → 输出确定,可测试、可调试、可预期 |
围绕这个根本差异,AI 工程要解决五件事。
1. 不确定性(Quality)
模型输出是概率性的,同样的输入可能给出不同结果,还可能一本正经地胡说八道。
工程手段:结构化输出、约束、重试、评测(Eval)、回归测试。
一句话:把「碰运气」变成「有质量基线」。
2. 上下文限制(Context)
模型的 context window 是有限的,而且越长越慢越贵。
工程手段:上下文工程、token 预算、压缩裁剪、检索增强(RAG)。
一句话:在有限的「窗口」里,塞进最该塞的信息。
3. 成本与性能(Cost & Latency)
每一次调用都在花钱,每一个 token 都有延迟。
工程手段:缓存(含 Prompt Cache)、流式输出、模型路由(贵的活给大模型、简单的活给小模型)。
一句话:又快又省,还不牺牲体验。
4. 可靠性(Reliability)
模型会超时、会限流、会报错,厂商还会涨价、下线模型。
工程手段:AI 网关、降级、限流、多模型容灾。
一句话:别让单点的模型,拖垮整个系统。
5. 可观测与可迭代(Observability)
prompt 改了效果是好是坏?线上质量在掉吗?钱花哪了?
工程手段:Tracing、token/成本监控、Prompt 版本管理、Prompt CI/CD。
一句话:让 AI 功能像普通服务一样「看得见、改得动」。
把这五件事连起来看,「AI 基建」的轮廓就出来了:
AI 基建 = 在「业务代码」和「模型 API」之间,专门处理 质量、上下文、成本、可靠性、可观测 的那一整套工程能力。
三、AI 应用的全景:一次请求都经过了什么
为了让后面每篇文章都能挂得上,我们先画一张「地图」。
一个生产级 AI 功能,一次请求大致会穿过这几层:
1 | 用户输入 |
注意最后一行:评测和可观测不是某一层,而是贯穿全链路的。
这张图,基本就对应了本专栏的四大支柱:
- LLM 应用基建 → 上下文层 + 网关层
- Agent 与工具调用 → 编排层
- RAG 与知识库 → 上下文层里的检索
- 评测与可观测 → 贯穿全程的那条线
后面每一篇,都是在放大这张图里的某一块。
四、AI 工程 vs 传统工程:像,但不一样
如果你有前端 / 后端工程化的底子,这里有个好消息:
AI 工程的「方法论」和传统工程高度相通,迁移成本不高。
| 传统工程 | AI 工程对应 |
|---|---|
| 单元测试 / 回归测试 | Eval 评测集 / 回归 |
| 日志 / APM / Tracing | LLM Tracing / token 监控 |
| 配置管理 / 版本管理 | Prompt 版本管理 |
| CI/CD 流水线 | Prompt CI/CD |
| 网关 / 限流 / 熔断 | AI 网关 / 模型路由降级 |
| 缓存 | 语义缓存 / Prompt Cache |
但有三个地方是 AI 工程独有的、最反直觉的:
测试对象是概率性的。
传统断言是expect(x).toBe(y);AI 里你往往只能断言「足够接近」「符合某种标准」,于是诞生了 LLM-as-judge 这种「用模型评模型」的玩法。prompt 是一种新的「代码」。
它没有类型、没有编译器,改一个词都可能让效果天翻地覆 —— 所以才需要把它纳入版本管理和 CI。成本是一等公民。
传统接口你很少按「字数」付费,但 LLM 是按 token 计费的,成本会直接反过来影响你的架构设计(比如要不要上 RAG、要不要换小模型)。
理解了这三点「不一样」,你就抓住了 AI 工程的精髓。
五、回到那个面试题:该怎么答
绕了一圈,我们回到开头那句话。
如果再被问「AI 开发做过什么基建」,与其只说「我调过 XX 模型」,不如顺着这张地图答:
我把 AI 功能拆成几层来做工程化 ——
上下文这块做了 Prompt 模板化和 token 预算控制;
调用这块走了统一网关,做了缓存和失败降级;
质量这块搭了一套 Eval 评测集,prompt 每次改动都跑回归;
线上做了 token 成本和调用链的监控。
哪怕你只真正做过其中一两块,用这套框架去组织你的经历,呈现出来的就是「有体系」而不是「只会调 API」。
这也正是这个专栏接下来要逐块填实的内容。
小结
这一篇我们只做了一件事:建立心智模型。
记住三句话就够了:
1 | 1. 调通 API 只是起点,AI 工程是补上「质量、上下文、成本、可靠性、可观测」这一层 |
下一篇,我们把第三节那张架构图彻底拆开 ——
《LLM 应用全景架构:一次请求从前端到模型再回来的完整链路》
把每一层「具体在做什么、为什么需要」讲透,作为整个专栏的骨架。