LLM 应用分层架构

1. 提出问题

一家 B2B SaaS 公司准备把 AI 放进客服后台。客服每天处理企业客户的工单:阅读用户描述、识别问题类型、查询订单和发票、检索内部知识库、生成回复草稿,必要时创建退款申请或转给财务。

没有 AI 时,客服依赖后台表单、知识库搜索和固定话术模板。平均每个工单 6 到 8 分钟,最慢的不是打字,而是在多个系统之间定位事实、确认权限、避免说错承诺。团队希望 AI 先帮客服生成草稿,后续再逐步接入查询工具和低风险自动化。

这个需求听起来像“做一个客服助手”,但真实输入和失败样本更复杂:

分析项具体情况
使用者一线客服、客服主管、财务协同人员
输入用户工单、当前客户资料、订单、发票状态、知识库、历史沟通
输出工单分类、处理建议、回复草稿、工具查询结果、待确认动作
频率工作日高峰每小时数千次模型调用
常见失败漏看用户补充信息、引用过期政策、查询错租户数据、把草稿当最终承诺
失败代价客户误导、隐私泄露、重复退款、客服信任下降

如果只写一个后端接口 POST /ai/reply,里面拼 prompt、查数据库、调用模型、解析结果、执行工具,早期看起来最快。问题是,一旦要换模型、加权限、做路由、接入工具、记录审计或复盘事故,这个接口会迅速变成不可维护的黑箱。

2. 分析问题

这个客服助手不是一个“生成”问题,而是多个任务组合:

问题类型适合交给模型的部分应由程序处理的部分必须人工确认的部分
分类判断工单类型、紧急程度、是否需要财务分类结果 schema、低置信度分流高风险投诉、合同争议
抽取提取订单号、发票抬头、用户诉求格式校验、归属校验、缺字段追问用户信息冲突时确认
检索改写查询、总结候选知识权限过滤、检索排序、引用校验政策不确定或缺证据
生成生成客服回复草稿模板变量、禁用承诺、敏感词拦截对外发送前复核
判断根据订单和政策给出建议业务规则、状态机、审批条件退款、补偿、套餐变更
执行触发低风险查询工具鉴权、幂等、审计、回滚资金、权限、合同动作

模型擅长理解自然语言、压缩信息、生成解释和在多个候选动作中给出建议。它不应该负责租户隔离、退款规则、状态持久化、审计留痕和最终权限判断。

分层的收益来自把变化隔离开:

  • 业务规则会频繁改,不能散落在 prompt 文本里。
  • 模型和供应商会替换,不能被业务代码深度绑定。
  • 工具能力会扩展,不能让模型直接接触内部 API。
  • 上下文会越来越多,不能把所有状态都塞进消息历史。
  • 线上事故需要复盘,不能只保存最终回答。

风险也很直接:分层过早、过重,会拖慢验证速度;分层过晚,系统会在第一次上线扩容、第一次模型替换、第一次合规审计时付出更高代价。所以架构判断不是“要不要分层”,而是“当前阶段需要分到什么程度”。

3. 列举方案

LLM 应用分层可以从简单到复杂逐步升级。

第一层是单次 prompt 调用。适合低风险、输入固定、用户会编辑的场景,例如内部客服话术润色。它的成本最低,但没有稳定结构、权限边界和复盘能力。

第二层是 prompt 模板 + schema。适合需要稳定输出的分类、抽取和草稿生成。模板管理变量,schema 约束输出,程序负责校验、重试和错误提示。这时仍然可以不做复杂平台。

第三层是应用服务层。业务流程在这一层表达:工单是否允许 AI 辅助、当前用户能看哪些字段、哪些输出只是草稿、哪些动作需要审批。应用服务层不应该关心某个模型的细节,也不应该把业务权限交给 prompt。

第四层是上下文组装层。它决定当前模型调用能看到哪些消息、业务对象、知识片段、用户状态和工具结果。上下文组装层要做权限过滤、去重、优先级、预算控制和来源标记。

第五层是模型访问层或模型网关。它统一处理模型选择、参数、超时、重试、降级、成本归因、日志脱敏和供应商差异。只有当团队开始多模型、多场景或需要统一观测时,这一层才有明显收益。

第六层是工具运行时。模型可以建议或触发工具,但运行时负责参数校验、鉴权、确认、幂等、超时、重试和审计。工具层把“能做什么”和“是否允许做”分开。

第七层是工作流编排。多步骤、可恢复、可审计的业务流程不应该靠模型从聊天历史里临场推断。工单升级、退款申请、财务审批这类流程需要状态机、人工队列和补偿路径。

第八层是 Eval + Ops。进入生产后,团队需要样本集、回放、模型版本、prompt 版本、工具调用日志、质量指标、成本延迟监控和异常告警。

简单 prompt 足够的条件是:输入短、风险低、输出可编辑、失败不进入下游系统、调用量不大。prompt 不再足够的信号是:输出要入库、需要引用证据、需要访问业务数据、需要执行动作、需要复盘、成本延迟开始影响核心流程。

4. 决策判断

场景条件推荐方案不推荐方案判断理由额外成本
内部草稿、用户会编辑Prompt 模板完整工作流错误可被人工发现,先验证价值模板版本和少量样本
输出要进入业务字段Prompt + Schema + 校验自由文本解析下游需要稳定字段和错误处理schema、重试、错误 UI
答案依赖业务对象应用服务层 + 上下文组装在 prompt 里写数据库规则权限和数据选择必须由程序控制上下文预算、来源标记
需要切换多个模型模型访问层 / 网关每个功能硬编码供应商需要统一超时、降级、成本归因网关配置和观测
需要查询或写入系统工具运行时 + 权限 + 审计让模型直接拼 API 参数涉及真实数据和副作用工具契约、确认、幂等
多步骤流程稳定工作流编排开放 Agent固定流程更可控、可恢复状态机、人工队列
任务路径高度动态受限 Agent + 工具边界 + Eval无边界自主执行需要模型选择步骤,但必须可观测沙箱、权限、回放、评估

分层时有几个关键判断。

第一,业务规则应该留在业务层。prompt 可以解释规则,但不能成为唯一规则来源。比如“退款超过 5000 元必须主管审批”应该由业务系统判断,而不是靠 prompt 记住。

第二,模型访问应该尽量被隔离。业务代码关心任务目标和质量要求,不应该到处散落模型名、temperature、供应商错误码和重试逻辑。

第三,上下文不是数据库。当前调用需要的上下文可以进 prompt,长期状态、审批记录、工具结果和用户记忆应该有结构化存储。

第四,工具不是普通函数暴露。只要参数由模型生成、工具会访问业务数据或产生副作用,就必须有运行时边界。

常见反模式:

  • 把所有逻辑塞进一个 prompt,导致业务规则不可测试、不可审计。
  • 在业务代码里硬编码模型供应商,后续路由和降级困难。
  • 把知识库、用户画像、工具结果和历史聊天全部拼成一段上下文,既昂贵又难复盘。
  • 用 Agent 包装固定流程,让本来可控的工单处理变成不可预测路径。
  • 只记录最终回复,不记录 prompt 版本、上下文摘要、模型、参数和工具调用。

5. 结论收束

LLM 应用分层的目标不是把系统做复杂,而是让责任边界清楚:业务层决定流程和权限,上下文层决定模型看什么,模型层负责生成和判断,工具层负责受控执行,工作流层负责状态流转,运营层负责评估和复盘。

最低可上线版本可以很轻:一个应用服务、少量 prompt 模板、结构化输出校验、受控上下文和完整日志。只有当模型选择、工具执行、多步骤恢复或成本治理成为真实问题时,再升级到网关、工具运行时和工作流平台。

上线前检查项:

  • 场景边界:使用者、业务流程、输入输出和失败代价是否明确。
  • 分层职责:业务规则、上下文、模型调用、工具执行、工作流状态是否分开。
  • Prompt 资产:模板、变量、版本和变更记录是否可管理。
  • 结构化输出:schema、校验、重试、降级和错误提示是否完整。
  • 上下文治理:来源、权限、时间、优先级和 token 预算是否可控。
  • 模型接入:超时、重试、降级、成本归因和供应商错误是否统一处理。
  • 工具边界:参数校验、鉴权、确认、幂等和审计是否覆盖。
  • 人工确认:高风险动作是否展示依据、预览和确认入口。
  • 可观测性:是否记录模型、参数、prompt 版本、上下文摘要、工具调用和最终输出。
  • 评估体系:是否有样本集、回放机制、线上反馈和回归测试。