跳到主要内容

工程化总览

这篇文章用一条主线把大模型工程化知识串起来。
它关注的不是“模型原理是什么”,而是“怎么把模型稳定地接入真实系统”。

用一句话来说,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. 推理参数控制生成行为

模型输出不是固定字符串,而是从概率分布中解码出来的。

常见推理参数:

  • temperature
  • top_p
  • top_k
  • max_tokens
  • stop
  • seed
  • repetition_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. 推荐学习路径

建议按这个顺序学习工程化部分:

  1. Tokenizer:理解模型真实输入。
  2. Chat Template:理解对话协议。
  3. 模型文件与格式:理解模型资产。
  4. 推理参数:理解生成行为控制。
  5. 上下文管理:理解 prompt 预算。
  6. KV Cache:理解推理显存和并发。
  7. 流式输出:理解交互体验。
  8. 并发与批处理:理解吞吐和延迟。
  9. 推理服务架构:理解系统组件。
  10. 模型部署流程:理解上线流程。
  11. 工具调用:理解外部能力接入。
  12. RAG 工程化:理解知识接入。
  13. 可观测性:理解线上排障。
  14. 容量与成本规划:理解规模化成本。
  15. 灰度发布与回滚:理解安全上线。

17. 总结

工程化知识可以串成一条链:

模型资产
-> prompt / tokenizer / template
-> 推理参数和上下文
-> KV Cache 和调度
-> API 服务
-> 工具 / RAG
-> 监控 / 成本 / 发布

大模型工程化的关键不是“把模型跑起来”,而是让模型在真实流量、真实数据、真实失败和真实成本下稳定工作。