工程化总览
这篇文章用一条主线把大模型工程化知识串起来。
它关注的不是“模型原理是什么”,而是“怎么把模型稳定地接入真实系统”。
用一句话来说,LLM 工程化就是:
LLM 工程化 = 把模型、数据、工具、服务、监控和发布流程连成可靠系统。
一个典型请求链路大致是:
用户请求
-> API 网关 / 鉴权 / 限流
-> messages / tools / RAG 上下文组装
-> chat template 渲染
-> tokenizer
-> 推理服务调度
-> 模型生成 / 工具调用 / 流式输出
-> 日志、监控、评估、反馈
1. 先理解模型资产
工程里说“一个模型”,通常不是一个文件,而是一组资产:
- 权重文件。
config.json。- tokenizer。
- special tokens。
- chat template。
- generation config。
- processor。
- adapter / LoRA 权重。
- 量化配置。
如果只迁移权重,不迁移 tokenizer 或 chat template,模型输出很可能异常。
对应阅读:
2. Tokenizer 决定模型真正看到什么
用户输入是文本,但模型看到的是 token ids。
文本
-> tokenizer.encode
-> token ids
Tokenizer 会影响:
- token 数统计。
- 上下文裁剪。
- 计费。
- 压测。
- 特殊 token。
- 多模态占位符。
- chat template 渲染后的 prompt。
很多“模型输出不对”的问题,本质是 tokenizer 或 special tokens 不匹配。
对应阅读:
3. Chat Template 是对话协议
OpenAI 风格 API 里传的是:
{
"messages": [
{"role": "user", "content": "你好"}
]
}
但模型真正看到的是渲染后的 prompt。
Chat Template 负责把结构化消息变成模型训练时熟悉的文本格式。
它影响:
- system prompt 是否生效。
- user / assistant 边界是否正确。
- thinking mode。
- tool calling。
- 多模态占位符。
- 最终 prompt 长度。
对应阅读:
4. 推理参数控制生成行为
模型输出不是固定字符串,而是从概率分布中解码出来的。
常见推理参数:
temperaturetop_ptop_kmax_tokensstopseedrepetition_penalty
这些参数会影响:
- 随机性。
- 稳定性。
- 输出长度。
- 格式遵循。
- 复现能力。
评估、压测和线上服务必须记录推理参数,否则结果不可复现。
对应阅读:
5. 上下文管理决定模型能用多少信息
模型每次请求能看到的内容有限。
上下文里可能包含:
- system prompt。
- 历史对话。
- RAG 检索内容。
- 工具定义。
- 用户输入。
- 模型输出。
上下文管理要解决:
- 哪些内容放进 prompt。
- 超长时删哪些。
- RAG 内容如何拼接。
- 历史对话如何摘要。
- 工具定义如何压缩。
对应阅读:
6. KV Cache 影响显存、并发和延迟
自回归生成时,模型会缓存历史 token 的 Key 和 Value。
KV Cache 让推理更快,但也消耗显存。
它和这些因素强相关:
- 上下文长度。
- 并发数。
- 模型层数。
- attention heads / KV heads。
- 精度。
- 推理框架内存管理。
长上下文和高并发服务,往往不是权重显存先爆,而是 KV Cache 先成为瓶颈。
对应阅读:
7. 流式输出改善用户体验
LLM 完整生成可能很慢。流式输出让用户尽早看到第一个 token。
工程上要关注:
- SSE / WebSocket。
- TTFT。
- chunk / delta。
- 取消生成。
- 错误处理。
- 前端渲染。
- 日志和审计。
流式输出不一定减少总耗时,但能显著改善体感延迟。
对应阅读:
8. 并发和批处理决定服务吞吐
LLM 服务不是简单的 HTTP QPS 系统。它同时受 input tokens、output tokens、prefill、decode、KV Cache 和调度影响。
要区分:
- 请求并发。
- token 并发。
- batch size。
- continuous batching。
- prefill batch。
- decode batch。
吞吐、TTFT、ITL、p99 延迟之间经常需要取舍。
对应阅读:
9. 推理服务架构把模型变成 API
生产服务通常包括:
- API Gateway。
- 鉴权。
- 限流。
- 路由。
- prompt 渲染。
- tokenizer。
- scheduler。
- model worker。
- GPU executor。
- streaming response。
- 日志和指标。
模型只是其中一部分。真正上线的是一套推理服务系统。
对应阅读:
10. 模型部署流程保证可控上线
模型上线不能只做“能启动”验证。
完整部署流程通常包括:
模型选择
-> 文件校验
-> tokenizer / chat template 检查
-> 量化 / 格式转换
-> 离线评估
-> 性能压测
-> 安全测试
-> 灰度发布
-> 监控和回滚
对应阅读:
11. 工具调用让模型接入外部能力
工具调用把模型从“只会生成文本”扩展成“能调用系统能力”。
例如:
- 查数据库。
- 调业务 API。
- 执行代码。
- 搜索文档。
- 创建工单。
工程上要关注:
- tool schema。
- 参数校验。
- tool call parser。
- 权限控制。
- 超时和重试。
- 幂等性。
- 审计。
对应阅读:
12. RAG 把外部知识接进模型
RAG 用检索结果补充上下文,让模型回答私有知识、最新知识和可溯源内容。
典型链路:
文档解析
-> chunk
-> embedding
-> 检索
-> rerank
-> prompt 拼接
-> 生成答案
-> 引用溯源
RAG 工程化要同时优化检索和生成。回答不好不一定是模型差,可能是文档解析、切块、召回或排序出了问题。
对应阅读:
13. 可观测性让问题可定位
线上问题不能只靠用户反馈。
需要观测:
- 请求日志。
- token usage。
- TTFT / ITL / E2E latency。
- 错误率。
- GPU 利用率。
- 显存。
- RAG 召回内容。
- 工具调用轨迹。
- 安全拦截。
没有可观测性,模型服务一旦出问题,很难判断是模型、prompt、RAG、工具、硬件还是流量变化。
对应阅读:
14. 容量与成本规划决定能不能规模化
LLM 服务成本通常和 token 强相关。
容量规划要看:
- QPS。
- 并发。
- input token 分布。
- output token 分布。
- TTFT / ITL 目标。
- 显存。
- KV Cache。
- GPU 单价。
- 冗余和峰值流量。
不能只按请求数估算。两个请求的 token 长度可能差 100 倍。
对应阅读:
15. 灰度发布与回滚降低上线风险
模型版本、prompt 版本、RAG 策略、工具 schema、推理参数变化,都可能影响线上行为。
上线时需要:
- shadow traffic。
- canary release。
- A/B test。
- 指标门禁。
- 自动回滚。
- 人工质检。
- 版本记录。
模型系统的回滚不只是换权重,还可能要回滚 prompt、检索配置、工具 schema 和推理参数。
对应阅读:
16. 推荐学习路径
建议按这个顺序学习工程化部分:
- Tokenizer:理解模型真实输入。
- Chat Template:理解对话协议。
- 模型文件与格式:理解模型资产。
- 推理参数:理解生成行为控制。
- 上下文管理:理解 prompt 预算。
- KV Cache:理解推理显存和并发。
- 流式输出:理解交互体验。
- 并发与批处理:理解吞吐和延迟。
- 推理服务架构:理解系统组件。
- 模型部署流程:理解上线流程。
- 工具调用:理解外部能力接入。
- RAG 工程化:理解知识接入。
- 可观测性:理解线上排障。
- 容量与成本规划:理解规模化成本。
- 灰度发布与回滚:理解安全上线。
17. 总结
工程化知识可以串成一条链:
模型资产
-> prompt / tokenizer / template
-> 推理参数和上下文
-> KV Cache 和调度
-> API 服务
-> 工具 / RAG
-> 监控 / 成本 / 发布
大模型工程化的关键不是“把模型跑起来”,而是让模型在真实流量、真实数据、真实失败和真实成本下稳定工作。