20.人工智能实战:大模型项目如何从 Demo 走向生产?一套可落地的上线验收清单与工程治理方案

人工智能实战:大模型项目如何从 Demo 走向生产?一套可落地的上线验收清单与工程治理方案


一、问题场景:Demo 很惊艳,上线就翻车

很多大模型项目都有一个相似过程:

text 复制代码
第一周:Demo 效果很好
第二周:老板觉得可以上线
第三周:接入真实用户
第四周:问题集中爆发

常见翻车点包括:

text 复制代码
1. 回答不稳定
2. 接口偶发超时
3. RAG 检索不到资料
4. 模型幻觉严重
5. GPU 显存爆
6. 高峰期服务崩
7. 日志查不到原因
8. 数据更新后仍回答旧内容
9. Agent 工具调用错误
10. 输出 JSON 解析失败

这些问题单独看都不难,但放在一起就说明:

text 复制代码
项目还停留在 Demo 阶段,没有进入生产工程阶段。

这篇文章不是讲某一个技术点,而是总结一套大模型系统上线前必须做的工程验收方案。


二、Demo 和生产系统的区别

Demo 关注:

text 复制代码
能不能跑
效果是否惊艳
能不能展示

生产系统关注:

text 复制代码
能不能稳定
错了能不能查
慢了能不能定位
挂了能不能恢复
数据变了能不能更新
成本能不能控制

一句话:

text 复制代码
Demo 证明可行性,生产验证可靠性。

三、生产级大模型系统架构

一个相对完整的架构应该包含:

text 复制代码
Client
  ↓
API Gateway
  ↓
Auth / RateLimit
  ↓
Model Gateway
  ↓
RAG / Agent / Tool Router
  ↓
Queue / Scheduler
  ↓
LLM Inference Service
  ↓
GPU

旁路能力包括:

text 复制代码
监控
日志
Trace
评测
灰度
回滚
数据更新
权限控制

如果系统缺少这些能力,上线后一定会踩坑。


四、上线验收维度

我建议从八个维度做验收:

text 复制代码
1. 功能正确性
2. 检索准确性
3. 生成稳定性
4. 性能与并发
5. 容错与降级
6. 可观测性
7. 数据更新机制
8. 安全与权限

五、功能正确性验收

首先要建立测试集。

python 复制代码
test_cases = [
    {
        "question": "一线城市住宿费最多报销多少?",
        "expected_keywords": ["500元", "一线城市"],
        "category": "报销制度"
    },
    {
        "question": "生产环境发布前需要做什么?",
        "expected_keywords": ["代码评审", "自动化测试", "灰度发布"],
        "category": "上线规范"
    }
]

简单评测脚本:

python 复制代码
def evaluate_answer(answer: str, expected_keywords: list[str]):
    missing = []

    for keyword in expected_keywords:
        if keyword not in answer:
            missing.append(keyword)

    return {
        "passed": len(missing) == 0,
        "missing": missing
    }

不要只靠人工体验。

必须有固定测试集。


六、RAG 检索验收

RAG 系统必须评估:

text 复制代码
1. Recall@K
2. MRR
3. 引用正确率
4. 无答案拒答率

示例数据:

python 复制代码
rag_eval = [
    {
        "query": "员工入职多久有年假?",
        "positive_doc_id": "leave_policy"
    }
]

评估逻辑:

python 复制代码
def evaluate_retrieval(retrieved_doc_ids, positive_doc_id, k=3):
    top_k = retrieved_doc_ids[:k]

    return {
        "hit": positive_doc_id in top_k,
        "rank": top_k.index(positive_doc_id) + 1 if positive_doc_id in top_k else None
    }

上线要求:

text 复制代码
高频问题 Recall@3 至少达到可接受阈值

具体阈值要按业务定,但不能没有。


七、生成稳定性验收

生成侧要检查:

text 复制代码
1. 是否严格基于资料回答
2. 是否引用资料
3. 是否会编造
4. 是否输出格式稳定
5. 是否允许无法确定

结构化输出场景还要验证:

python 复制代码
def is_valid_json_output(output: dict):
    required_fields = ["name", "skills", "level"]

    for field in required_fields:
        if field not in output:
            return False

    return True

如果 JSON 解析失败率很高,不能上线。


八、性能压测验收

必须压测:

text 复制代码
1. 单用户延迟
2. 并发 QPS
3. P95 / P99
4. 错误率
5. GPU 利用率
6. 队列等待时间

Locust 示例:

python 复制代码
from locust import HttpUser, task, between

class LLMUser(HttpUser):
    wait_time = between(0.5, 2)

    @task
    def chat(self):
        self.client.post("/chat", json={
            "prompt": "解释一下公司报销制度",
            "max_tokens": 128
        })

上线前不要只看平均延迟。

必须看:

text 复制代码
P95 / P99

因为用户投诉通常来自尾延迟。


九、容错验收

必须验证:

text 复制代码
1. 主模型失败是否 fallback
2. 队列满了是否拒绝
3. 工具调用失败是否兜底
4. Redis 挂了是否有错误提示
5. vLLM 超时是否熔断

模拟模型失败:

python 复制代码
def mock_llm_call(prompt: str):
    raise RuntimeError("model unavailable")

系统应该返回:

text 复制代码
服务繁忙,请稍后再试

而不是:

text 复制代码
500 堆栈错误

十、监控验收

上线前必须有这些指标:

text 复制代码
QPS
错误率
P95 / P99
队列长度
GPU利用率
显存占用
模型调用耗时
fallback次数

如果没有监控,系统上线后就是裸奔。

Prometheus 指标示例:

python 复制代码
from prometheus_client import Counter, Histogram

REQUEST_TOTAL = Counter(
    "llm_request_total",
    "LLM request total",
    ["status"]
)

REQUEST_LATENCY = Histogram(
    "llm_request_latency_seconds",
    "LLM latency"
)

十一、日志验收

每次请求必须记录:

text 复制代码
trace_id
user_id
question
retrieved_docs
model_used
latency
status
error

示例:

python 复制代码
log = {
    "trace_id": trace_id,
    "user_id": user_id,
    "model_used": model_name,
    "retrieved_docs": doc_ids,
    "latency_ms": cost_ms,
    "status": "success"
}

没有这些字段,出了问题无法排查。


十二、数据更新验收

知识库系统必须验证:

text 复制代码
1. 文档更新后是否重新切分
2. 向量是否更新
3. 旧版本是否失效
4. 回答是否引用最新版本

测试流程:

text 复制代码
1. 导入 v1 文档
2. 提问,确认回答 v1
3. 更新为 v2
4. 重新提问,确认回答 v2
5. 确认旧版本不再参与检索

十三、安全与权限验收

企业场景必须考虑:

text 复制代码
1. 用户是否只能访问有权限的文档
2. Prompt 是否可能泄露系统提示词
3. 是否过滤敏感信息
4. Agent 工具是否有权限控制
5. 高风险操作是否二次确认

错误示例:

text 复制代码
普通员工问到了财务内部制度

这不是模型问题,是权限系统问题。


十四、上线 Checklist

text 复制代码
功能:
[ ] 高频问题测试通过
[ ] 结构化输出可解析
[ ] 无答案能拒答

RAG:
[ ] Recall@K 达标
[ ] 引用正确
[ ] 文档版本正确
[ ] 数据更新可验证

性能:
[ ] P95 达标
[ ] P99 可接受
[ ] 错误率达标
[ ] 队列无异常积压

稳定性:
[ ] 限流可用
[ ] 熔断可用
[ ] 降级可用
[ ] fallback 可用

监控:
[ ] QPS
[ ] 错误率
[ ] 延迟
[ ] GPU
[ ] 队列

运维:
[ ] 日志可追踪
[ ] 支持灰度
[ ] 支持回滚
[ ] 有告警

十五、踩坑记录

坑 1:没有测试集就上线

Demo 看起来好,不代表真实问题能答好。

必须有评测集。


坑 2:只测正常问题

必须测试:

text 复制代码
无答案问题
模糊问题
超长问题
恶意问题
高并发问题

坑 3:没有回滚

模型升级、Prompt 修改、知识库更新都可能引入问题。

必须能回滚。


坑 4:没有 trace_id

线上排查时会非常痛苦。


坑 5:只关注效果,不关注成本

大模型系统上线后,成本会变成真实问题。

必须统计:

text 复制代码
tokens
调用次数
模型成本
GPU成本

十六、经验总结

大模型项目从 Demo 到生产,最大的变化不是模型,而是工程体系。

生产系统必须具备:

text 复制代码
可评测
可监控
可追踪
可回滚
可降级
可扩展

一句话总结:

text 复制代码
大模型上线不是把接口暴露出去,而是建立一套能长期运行的工程系统。

十七、后续优化建议

后续可以继续做:

text 复制代码
1. 建立自动化评测流水线
2. 每次 Prompt 修改都跑回归测试
3. 每次知识库更新都做抽样验证
4. 引入灰度发布
5. 建立线上 badcase 回收机制
6. 定期复盘错误回答
7. 按业务线统计模型效果
8. 建立成本看板

最后一句经验:

text 复制代码
能演示的 AI 很多,能稳定上线的 AI 很少。差距就在工程治理。
相关推荐
CandyU21 小时前
Unity —— 反射
java·开发语言
初心未改HD1 小时前
Go Modules:依赖管理的完全指南
开发语言·golang
楼田莉子1 小时前
仿照Muduo的高并发服务器:EventLoop模块及与TimeWheel模块联调
java·开发语言
湘-枫叶情缘1 小时前
穿透范畴的迷雾:从“四范式”到AI问题建模的现代认知框架
人工智能
@不误正业2 小时前
OpenHarmony-A2A协议实战-多智能体跨应用协同架构与实现
人工智能·架构·harmonyos·开源鸿蒙
小雅痞2 小时前
[Java][Leetcode middle] 3. 无重复字符的最长子串
java·开发语言·leetcode
SamDeepThinking2 小时前
为什么你做技术方案总是漏掉边界情况
java·后端·程序员
前端.火鸡2 小时前
如何使用本地显卡算力给AI赋能(文生图、图生图等)分币不要、无限次数
人工智能
cyyt2 小时前
深度学习周报(4.27~5.3)
人工智能·深度学习