Administrator
发布于 2024-05-28 / 2465 阅读
28

AI 能力接入现有系统的架构设计

团队想给客服系统加 AI 能力,产品经理一句"接个大模型"听起来轻巧。真要做时,我发现最大的问题不是模型效果,而是:AI 该放在系统哪一层?和现有业务怎么融?出错了怎么办?这层边界不清,迟早把核心交易拖下水。

边界划分:AI 是增强,不是核心

我的第一原则是:AI 能力必须处在非关键路径。下单、扣款、库存这些核心链路,绝不直接调大模型。AI 只在"建议""辅助""摘要"这类增值环节出现。比如客服系统,AI 负责生成"建议回复草稿",最终发送仍由人工或既有规则引擎确认。这样即使 AI 全挂,核心业务照常跑,只是少了智能化那一层。

异步解耦:别让 AI 卡住主流程

大模型调用动辄几百毫秒到几秒,同步嵌在主流程里会把吞吐拖垮。我们的做法是用消息队列把 AI 计算和主流程切开:

// 主流程只发事件,不等待
kafkaTemplate.send("ai-summary-tasks",
    new SummaryTask(orderId, transcript));
// AI 消费者异步处理,结果写回另一张表/缓存
@KafkaListener(topics = "ai-summary-tasks")
void handle(SummaryTask t) {
    String summary = llm.summarize(t.transcript());
    summaryRepo.save(t.orderId(), summary);
}

主流程 P99 因此不受 AI 延迟影响,AI 慢了顶多"摘要晚到几秒",用户体验是"先看到原始内容、后看到摘要",完全可接受。

流量特征的差异

维度核心交易AI 增强
延迟要求< 50ms可接受 1-5s
失败容忍极低,需强一致较高,可降级
资源波动平稳随 prompt 长度剧烈波动
调用方式同步+事务异步+重试

降级方案:AI 不是永远在线

大模型 API 会限流、会超时、会抽风。我们设计了三级降级:

  1. 超时降级:单次调用超 3 秒,返回"暂时无法生成,请稍后再试"或缓存的旧结果;
  2. 限流降级:API 返回 429,本地退化为"基于规则的模板回复",虽然不聪明但能答;
  3. 全量降级:AI 服务整体不可用时,开关一键关掉所有 AI 入口,系统退回纯规则版,功能不丢。

降级开关走配置中心(如 Nacos),秒级生效,不用发版。我们甚至做了"灰度降级"——某个租户出问题只关它一个,不影响全局。

与业务融合:把 AI 当"有状态的组件"

AI 不是外接黑盒,它要读业务上下文才有用。我们建了一层"AI 上下文装配器",在调模型前把订单状态、用户画像、知识库片段拼成结构化上下文,模型输出再经"业务校验器"过滤(比如不允许 AI 承诺超出实际库存的发货时间)。这层装配和校验,是 AI 真正融入业务的关键,也是最容易偷懒省略、最后出事的地方。

成本与 ROI 评估

AI 能力要算账。我们给每个 AI 入口建了成本看板:每次云模型调用的 token 成本、本地模型摊销的 GPU 折旧、人工审核兜底的人力。客服摘要场景,上线前人工写回复人均 3 分钟/单,AI 草稿把时间压到 40 秒;按客服 30 人、日均 200 单算,每月省下约 480 个人工时,折算人力近 8 万,而 AI 调用月费约 1.2 万,ROI 明显为正。但负 ROI 的场景也存在——一个内部小工具接了 AI 润色,使用频次低、云费用却不低,评估后我们关掉了它。AI 不是接了就赚,得用成本看板持续审视"这笔智能值不值"。

还有一类隐性成本常被忽视:模型版本升级。云端模型半年一迭代,效果变好也可能行为偏移,我们的回归测试集每次升级都要重跑,这部分人力也要算进 ROI。把账算全,才不会被"接入即增效"的叙事带偏。

写在后面

现在回头看,《AI 能力接入现有系统的架构设计》本身不算多难,难的是线上真出问题那十分钟里的判断。经验都是这么来的。

参考