从 Demo 到生产:一个 RAG 系统的工程化演进之路

2 阅读1分钟

从 Demo 到生产:一个 RAG 系统的工程化演进之路

做 AI 应用,最贵的教训不是技术选错了,而是以为 Demo 能跑就等于生产可用。


开场:为什么你的 RAG 系统上线就翻车

假设你花了一个周末,用 LangChain + Chroma + GPT-4 搭了一个企业知识库问答系统。

本地测试效果不错:上传 PDF、切 chunk、向量化、检索、回答,一条龙跑通了。你信心满满地部署上线,等着收获用户的赞美。

结果第一周就收到一堆反馈:

  • "有时候答非所问"
  • "同样的问题,上次回答得好好的,这次就不行了"
  • "感觉不太靠谱,不敢当真"

你开始排查,发现:

  • Token 消耗超出预期 3 倍
  • 出了问题不知道哪里错了,只有简单日志
  • 检索质量不稳定,但不知道具体是哪些场景有问题

欢迎来到 AI 工程化的真实世界:Demo 能跑和生产可用之间,隔着整整一套工程体系。


第一阶段:Demo 能跑(但仅此而已)

大多数 AI 项目的起点都差不多:

# 典型的技术栈
框架:LangChain / LlamaIndex
向量库:Chroma / Milvus / Pinecone
模型:GPT-4 / Claude / 开源模型
功能:上传文档 → 切分 → 向量化 → 检索 → 生成答案

这个阶段的核心目标是验证可行性,回答的问题是:"这个方向能不能做?"

但 Demo 的局限性也很明显:

  • 只在本地测试过,数据量小、场景单一
  • 没有考虑并发、延迟、成本
  • 没有监控、没有评估、没有兜底
  • 代码是"脚本式"的,不是"工程化"的

很多团队的问题在于:把 Demo 当成了 MVP,直接推上线。


第二阶段:发现生产问题

上线第一周,问题会集中爆发。根据真实项目经验,最常见的问题有三类:

问题 1:检索质量不稳定

现象: 用户反馈"有时候答非所问"

原因分析:

  • 实验环境用的是精心挑选的测试文档,线上文档质量参差不齐
  • 没有评估机制,不知道哪些场景效果好、哪些差
  • Chunk 策略、Embedding 模型、检索参数都是"拍脑袋"选的

真实案例:

某团队上线后检索召回率从实验环境的 85% 掉到 52%,后来发现是专业术语的向量化效果很差,但实验环境没有覆盖这些术语。


问题 2:Token 消耗失控

现象: 账单金额超出预期 3 倍

原因分析:

  • Agent 多轮调用没有预算控制
  • 没有缓存,相同问题重复消耗 Token
  • Prompt 过于冗长,塞了大量无关上下文

真实案例:

某客服系统上线首月 Token 消耗 12 万,预算只有 4 万。排查发现是 Agent 在单个会话中平均调用 8 次模型,而实际 2-3 次就够了。


问题 3:出了问题不知道哪里错了

现象: 用户反馈问题,但无法复现和定位

原因分析:

  • 没有链路追踪,只有简单日志
  • 不知道是检索问题、Prompt 问题、还是模型问题
  • 没有用户反馈收集机制

真实案例:

用户反馈"回答质量差",但团队花了 3 天才定位到是某个特定文档的 chunk 切分有问题,导致检索召回了错误内容。


第三阶段:工程化改进

发现问题后,需要系统性地解决。以下是经过验证的改进框架:

1. 加可观测性

目标: 每一次请求都能追溯完整链路

实践:

# 记录以下信息
- 用户原始 query
- Query 改写后的版本(如有)
- 召回的文档列表(含相似度分数)
- Prompt 拼装后的完整内容
- 模型输出
- 延迟(P50/P95/P99)
- Token 消耗(输入/输出)

工具选型:

  • 链路追踪:LangSmith、Arize Phoenix、自研日志系统
  • 监控告警:Prometheus + Grafana,或云服务商自带监控

效果: 出问题后能在 5 分钟内定位到具体环节,而不是花几天猜谜。


2. 建评估集

目标: 量化评估效果,而不是凭感觉

实践:

1. 从用户问题里抽取 50-100 个典型场景
2. 为每个问题标注"标准答案""评分标准"
3. 每周回归测试,改 Prompt 后对比效果
4. 建立评估指标:准确率、召回率、用户满意度

评估集示例:

场景 1:产品功能咨询
问题:"你们支持 API 调用吗?"
标准答案:应包含"支持"、API 文档链接、调用示例
评分:0-5 分

场景 2:技术问题排查
问题:"上传文件失败,报错 500"
标准答案:应包含排查步骤、常见原因、联系方式
评分:0-5

效果: 每次改 Prompt 不再是"赌一把",而是有数据支撑的决策。


3. 成本控制

目标: 在效果可控的前提下,降低 Token 消耗

实践:

1. 加缓存层
   - 语义缓存:相似问题直接返回缓存结果
   - 命中率通常可达 30-50%

2. 模型分级
   - 简单问题走小模型(如 qwen-7b、gpt-3.5-turbo)
   - 复杂问题走大模型(如 gpt-4、claude-3)
   - 路由策略:基于问题分类或意图识别

3. Token 预算
   - 每次请求上限 4000 tokens
   - Prompt 精简:只保留最相关的上下文
   - 输出约束:限制最大输出长度

效果: 某项目通过缓存 + 模型分级,Token 消耗降低 62%,效果基本持平。


4. 安全加固

目标: 防止滥用、泄露、注入攻击

实践:

1. 输入过滤
   - 检测 Prompt 注入尝试(如"忽略之前的指令")
   - 敏感词过滤
   - 问题分类:判断是否属于系统支持的范围

2. 输出审查
   - 敏感词过滤
   - 来源引用检查:确保回答有依据
   - 一致性检查:与已知事实不矛盾

3. 权限控制
   - 不同用户访问不同知识库
   - 敏感文档需要额外授权

第四阶段:持续迭代

工程化不是一次性的,而是持续的过程。

关键实践:

1. 用户反馈闭环
   - 点踩的问题自动进入复盘队列
   - 每周回顾 Top 10 问题,找出系统性原因

2. 评估指标趋势
   - 每月回顾准确率、召回率、满意度趋势
   - 找出退化场景,针对性优化

3. Prompt 版本化管理
   - 像代码一样管理 Prompt 的变更
   - 每次变更有记录、有对比、有回滚方案

面试中怎么讲 AI 工程化

如果你被问到"你对 AI 工程化怎么理解",建议按这个框架组织:

1. 先说核心挑战

"AI 系统的输出有不确定性,需要不同于传统软件的质量保障体系。"

2. 再讲关键维度(挑 2-3 个展开)

"我理解 AI 工程化至少包括可观测性、评估体系、成本控制、安全防护、持续迭代这五个维度。"

3. 结合项目经验

"比如我做 RAG 系统时,上线第一周就发现检索质量不稳定。后来我们建了一个 50 题的评估集,每周回归测试,才发现是某些专业术语的召回率特别低。"

4. 最后讲思考

"这件事让我理解到:AI 工程化不是'写更好的代码',而是建立一套可观测、可评估、可迭代的系统。"

这样讲,比罗列技术栈有说服力得多。


一个实用的排查框架

RAG 系统上线后效果不如预期,按这个优先级排查:

1. 检索层问题(约 50%)
   → 检查 embedding 模型、chunk 策略、query 改写

2. Prompt 层问题(约 25%)
   → 优化 system prompt、增加约束、精简上下文

3. 模型层问题(约 15%)
   → 升级模型、领域微调、调整温度参数

4. 数据层问题(约 10%)
   → 清洗数据、补充文档、建立增量更新

结语

AI 工程化不是高深的理论,而是一系列务实的实践

  • 让系统可观测,出问题能快速定位
  • 让效果可评估,改 Prompt 有数据支撑
  • 让成本可控,不会上线就爆预算
  • 让系统安全,防止滥用和泄露
  • 让迭代可持续,越用越好

Demo 能跑只是起点,生产可用才是目标。


📂 本文整理自开源项目 AgentInterview,持续更新 AI Agent 面试知识库,覆盖开发技能、面试题库、项目建议。欢迎 Star ⭐

🔍 关注公众号「开源情报局」获取更多优质开源项目推荐。