--- title: "从 AI Demo 到生产:团队必须偿还的五类生产债" source_url: "https://towardsdatascience.com/why-your-ai-demo-will-die-in-production/" source_summary: "/home/lin/.hermes/projects/hermes-gsummary-workflow/runs/outputs/20260519-175733-Why-Your-AI-Demo-Will-Die-in-Production-2738318-245693040-summary.md" created: "2026-05-19" type: "team-sharing-html" ---

从 AI Demo 到生产:团队必须偿还的五类生产债

> 适用对象:正在把 LLM / Agent / AI 自动化从演示推进到真实业务的研发、数据、运维和产品团队。 > 分享目标:把“Demo 能跑”改造成“生产可控”,用五类生产债检查项目是否具备上线条件。 > 来源边界:本文基于 Ari Joury 的文章《Why Your AI Demo Will Die in Production》和本地 Gemini 摘要整理;实践部分是面向团队落地的补充,不代表原文逐字内容。

1. 一句话结论

AI Demo 死在生产环境里,通常不是因为模型不够聪明,而是因为团队没有偿还这些债:

技术债 → 输出不稳定、缺少 schema、prompt 脆弱
运营债 → 没 owner、没排障路径、没 AI 专属监控
评估债 → 只靠肉眼感觉,改一次 prompt 坏十个场景
集成债 → AI 输出没有和下游系统/API/数据格式对齐
治理债 → 审计、隐私、HITL、数据保留事后才补

内部分享时可以用一句话收束:

不要把大模型当魔法;要把它当作一个不可靠但有价值的微服务,用契约、评估、监控、集成和治理包起来。

2. 为什么 Demo 会误导团队

Demo 的评判标准通常是:

生产环境的评判标准完全不同:

因此从 Demo 到 Production 的核心不是“换一个更强模型”,而是补齐工程系统。

3. 五类生产债检查表

3.1 技术债:Prompt 不是接口契约

危险信号:

最低可用做法:

from pydantic import BaseModel, Field, ValidationError

class SqlReviewResult(BaseModel):
    risk_level: str = Field(pattern="^(low|medium|high)$")
    approved: bool
    reasons: list[str]
    required_actions: list[str] = []


def parse_llm_result(raw: str) -> SqlReviewResult:
    """把 LLM 输出变成可验证对象;失败时交给重试或人工确认。"""
    try:
        return SqlReviewResult.model_validate_json(raw)
    except ValidationError as exc:
        raise ValueError(f"LLM output schema invalid: {exc}") from exc

验收标准:

3.2 运营债:AI 服务也需要 owner

危险信号:

建议给每个 AI 工作流建立最小 RACI:

工作流名称:SQL 自动审查 Agent
Responsible:后端/平台负责人,处理日常问题
Accountable:业务系统 owner,决定是否上线和回滚
Consulted:DBA、安全、运维
Informed:使用该能力的业务团队

最小监控指标:

请求量:ai_requests_total
失败率:ai_schema_validation_failed_total / ai_requests_total
平均延迟:ai_request_duration_seconds
Token 成本:ai_tokens_total, ai_cost_estimated
上下文饱和度:prompt_tokens / model_context_limit
人工介入率:human_review_required_total / ai_requests_total

3.3 评估债:Vibe Check 不是测试

危险信号:

建议先做一个小型黄金数据集,不要一开始追求完美。

样例文件:fixtures/ai_review_cases.jsonl

{"id":"case-001","input":"DROP TABLE users;","expected":{"risk_level":"high","approved":false}}
{"id":"case-002","input":"CREATE INDEX idx_orders_user_id ON orders(user_id);","expected":{"risk_level":"low","approved":true}}
{"id":"case-003","input":"UPDATE accounts SET balance=0;","expected":{"risk_level":"high","approved":false}}

最小验证脚本思路:

import json


def load_cases(path: str) -> list[dict]:
    with open(path, encoding="utf-8") as f:
        return [json.loads(line) for line in f if line.strip()]


def score_case(actual: dict, expected: dict) -> bool:
    return (
        actual["risk_level"] == expected["risk_level"]
        and actual["approved"] == expected["approved"]
    )

验收标准:

3.4 集成债:AI 输出必须贴合下游系统

危险信号:

建议项目第一周就做接口 mock。

示例:下游只接受 ISO 日期和固定动作枚举。

{
  "customer_id": "C001",
  "action": "CREATE_TICKET",
  "due_date": "2026-05-20",
  "priority": "P1"
}

AI 工作流必须验证:

字段完整:customer_id/action/due_date/priority 都存在
枚举合法:action 只能是 CREATE_TICKET / UPDATE_TICKET / ESCALATE
日期合法:YYYY-MM-DD
失败处理:不合法时进入人工确认,不自动写入生产系统

3.5 治理债:合规不能最后补

危险信号:

建议从第一版就定义风险分层:

低风险:摘要、分类、只读检索 → 自动执行,保留日志
中风险:生成建议、辅助决策 → 人工确认后执行
高风险:改数据、发消息、删资源、影响客户权益 → 默认禁止或强 HITL

最小审计日志字段:

{
  "request_id": "uuid",
  "workflow": "customer-support-agent",
  "actor": "user-or-system",
  "input_hash": "sha256-of-redacted-input",
  "model": "model-name",
  "decision": "ESCALATE",
  "confidence_or_score": 0.82,
  "human_approved": true,
  "created_at": "2026-05-19T10:00:00Z"
}

注意:日志应保存可审计证据,而不是无脑保存全部原始敏感数据。

4. 三个可直接用于团队讨论的案例

案例 A:SQL 审查 Agent

场景:团队希望用 LLM 自动审查 SQL 变更。

最小流程:

SQL 文件
→ 规则引擎初筛
→ LLM 结构化审查
→ schema 校验
→ 高危拒绝 / 中低危人工确认
→ 执行前备份
→ 审计日志

样例输入:

UPDATE users SET status = 'inactive';

期望输出:

{
  "risk_level": "high",
  "approved": false,
  "reasons": ["缺少 WHERE 条件,可能全表更新"],
  "required_actions": ["补充 WHERE 条件", "提供回滚方案"]
}

失败处理:

案例 B:客服工单 Agent

场景:AI 根据客户消息生成工单分类和建议回复。

最小流程:

客户消息
→ PII 脱敏
→ 意图分类
→ 生成建议回复
→ 人工确认
→ 写入工单系统

样例输入:

客户说:我昨晚付款后订单还显示未支付,手机号是 138****0000。

期望输出:

{
  "category": "payment_issue",
  "priority": "P1",
  "reply_draft": "您好,我们已收到您的支付异常反馈,会优先核查订单状态。",
  "requires_human_review": true
}

失败处理:

案例 C:内部知识库问答 Agent

场景:员工询问内部制度、部署手册、排障步骤。

最小流程:

用户问题
→ 检索文档
→ 引用来源
→ 生成答案
→ 标记不确定性
→ 记录低质量反馈样本

样例输入:

怎么重启 k8s-pod-monitor?

期望输出:

答案必须包含:
1. 来源文档路径或链接
2. 具体命令
3. 风险提示
4. 如果找不到依据,明确说“不确定”

失败处理:

5. 一周落地路线

Day 1:列出 AI 工作流清单

输出:

工作流名称
业务目标
是否读写生产数据
是否影响客户/资金/权限
当前 owner
当前失败处理方式

验收:每个工作流都能归类为低/中/高风险。

Day 2:补 schema 和失败关闭

输出:

验收:故意让模型输出错格式,系统能安全失败。

Day 3:建立 20 个黄金样本

输出:

验收:修改 prompt 前后能比较结果。

Day 4:接入最小监控

输出:

验收:能回答“今天 AI 工作流是否比昨天更差”。

Day 5:补审计和上线门槛

输出:

上线前必须回答:
- 谁负责?
- 失败怎么停?
- 错误怎么查?
- 数据是否脱敏?
- 高风险动作是否 HITL?
- 有没有回归样本?

验收:没有 owner、没有审计、没有失败关闭的 AI 工作流不得进入生产。

6. 分享时可以直接使用的提问清单

把下面这段贴到团队评审文档或 PR 描述里:

请按“生产级 AI 债务”审查这个 AI 工作流:

1. 技术债:模型输出是否有 schema?解析失败是否 fail closed?
2. 运营债:owner 是谁?报警后谁处理?监控哪些 AI 专属指标?
3. 评估债:是否有固定黄金样本?修改 prompt 后如何判断退化?
4. 集成债:下游 API/schema 是否已 mock 和验证?
5. 治理债:是否涉及 PII、客户权益、资金、权限或生产写操作?是否 HITL?

请输出:
- 当前风险等级:低/中/高
- 必须补齐项
- 可延后项
- 不允许上线的阻断项

7. 常见误区

8. 可直接落地的团队共识

建议团队先达成这三条:

1. AI 工作流没有 schema,不进生产。
2. AI 工作流没有黄金样本,不随意改 prompt。
3. AI 工作流涉及真实副作用,默认需要人工确认和审计日志。

这三条不复杂,但能挡住大多数“Demo 很惊艳,上线就崩”的问题。

9. 来源与局限

局限:原文提到“约 95% 的企业 AI 试点无法进入生产”,该数字适合作为数量级提醒,不应作为团队 KPI 或硬性行业基准。本文的案例和一周路线是面向团队内部落地的实践补充,使用时应按项目风险和规模裁剪。