3.2 LLM应用分层架构设计:接入层到监控层完整方案

1 阅读7分钟

3.2 LLM应用分层架构设计:接入层到监控层完整方案

一、分层架构概览

LLM应用通常分为:接入层、逻辑层、模型层、数据层、监控层。分层设计便于解耦、扩展与维护。

《大模型应用开发极简入门》第3章「软件架构设计原则」明确指出:LLM应用架构需分层为接入层、逻辑层、模型层、数据层、监控层,并遵循解耦、可扩展、容错、可观测、成本优化等设计原则。本节在书中框架基础上,细化各层职责、典型组件与实现要点,便于在项目中直接落地。书中未展开各层技术选型,本节补充常见组件与与第 5、6 章的衔接,便于从架构到实现形成闭环。


二、各层职责

层级职责典型组件
接入层请求入口、鉴权、限流API网关、负载均衡
逻辑层业务编排、提示组装、工具调用应用服务、Agent
模型层LLM调用、缓存、降级OpenAI SDK、模型路由
数据层知识库、向量存储、会话存储RAG、Redis、DB
监控层日志、指标、告警Prometheus、日志系统

三、架构图

flowchart TB
    subgraph 接入层
        A[API Gateway]
    end
    subgraph 逻辑层
        B[业务服务]
        C[Agent/工作流]
    end
    subgraph 模型层
        D[LLM调用]
        E[缓存]
    end
    subgraph 数据层
        F[向量库]
        G[会话存储]
    end
    A --> B --> C --> D
    C --> E
    C --> F
    C --> G

四、设计原则(与书中一致)

  • 解耦:各层通过接口通信,逻辑层不直接依赖具体模型实现,便于切换 OpenAI/国产模型。
  • 可扩展:支持多模型、多数据源;新增工具或知识库时只需扩展数据层与逻辑层。
  • 容错:重试、降级、熔断;模型超时或限流时自动降级到备用模型或缓存。
  • 可观测:日志、指标、链路追踪,便于排查问题与成本分析。
  • 成本优化:模型层可做请求缓存、Token 统计与告警,逻辑层可控制 max_tokens 与上下文长度。

五、接入层详解

5.1 职责

统一入口、身份鉴权、限流防刷、协议转换(如 HTTP → 内部 RPC)。用户请求先经 API 网关,再转发到逻辑层。

5.2 典型实现

  • 鉴权:JWT、API Key、OAuth,与业务账号体系打通。
  • 限流:按用户/IP/Key 限制 QPS,避免单用户占满配额或恶意刷量。
  • 负载均衡:多实例部署时,网关将请求分发到不同逻辑层实例。

六、逻辑层详解

6.1 职责

业务编排、提示模板组装、多轮对话管理、RAG 检索编排、Function Calling 等。不直接关心「调用哪个模型、如何发 HTTP」,只关心「要发什么 messages、要调什么工具」。

6.2 与模型层的关系

逻辑层将「最终提示」与「参数」交给模型层;模型层负责调用 OpenAI/其他 API、处理重试与降级。这样模型升级或切换时,只需改模型层配置,逻辑层基本不动。


七、模型层详解

7.1 职责

封装 LLM 调用、统一错误与重试、可选缓存与降级。可内置「模型路由」:按任务类型或配置选择 gpt-3.5-turbo / gpt-4 等。

7.2 缓存与降级

对相同或相似请求可做结果缓存(如 Redis),减少重复调用;当主模型不可用时,自动切换备用模型或返回缓存,保证可用性。


八、数据层详解

8.1 职责

向量存储(RAG 索引)、会话与上下文持久化、业务数据库。RAG 的文档块与 Embedding 向量存在数据层;多轮对话的历史可存 DB 或 Redis,便于跨请求恢复上下文。

8.2 与逻辑层配合

逻辑层在需要时向数据层请求「检索结果」或「历史消息」,组装后再交给模型层,实现 RAG 与长对话能力。


九、监控层详解

9.1 日志

记录请求参数(脱敏)、响应长度、耗时、模型名、Token 用量等,便于排查与审计。

9.2 指标

QPS、延迟 P99、错误率、按模型/用户的 Token 消耗。可接入 Prometheus + Grafana 做大盘与告警。

9.3 告警

当错误率突增、延迟过高、或单日 Token 超预算时告警,避免故障与成本失控。


十一、各层技术选型参考(与书 3.2 衔接)

书中第 3 章「软件架构设计原则」给出分层与设计原则,未具体列举技术栈。本节补充常见选型供参考,便于落地时选用:

  • 接入层:Kong、APISIX、AWS API Gateway、Nginx + Lua 等均可承担网关与限流;负载均衡可用云厂商 LB 或 Nginx。
  • 逻辑层:Python(FastAPI、Flask)、Node.js 等均可;Agent 与工作流可基于 LangChain、自研编排引擎或 Dify 等低代码平台。
  • 模型层:OpenAI SDK、openai 兼容的 HTTP 封装;缓存可用 Redis;模型路由可写配置表或规则引擎。
  • 数据层:向量库可选 Pinecone、Weaviate、Milvus、pgvector 等;会话与业务数据用 Redis、PostgreSQL 等。
  • 监控层:Prometheus + Grafana、Datadog、ELK 等;日志与链路追踪按团队习惯选型。

选型时优先考虑团队熟悉度与运维成本,不必堆砌技术;书中「避免过度设计」在本节体现为按业务规模选择合适的组件即可。


十三、与第 6 章生产级部署的衔接

第 6.2 节会详细展开生产级部署:API 网关、负载均衡、缓存、监控与告警。本节的分层架构是部署的基础:接入层对应网关与负载均衡;模型层对应对 OpenAI(或兼容 API)的调用与缓存;监控层对应 6.2 的监控与告警。因此学完本节后,在规划部署时可直接按「五层 + 技术选型」做方案设计,再在 6.2 节细化网关配置、限流与监控指标。书中第 3 章「软件架构设计原则」与第 6 章「生产级应用部署」的衔接点即在于:本节是架构视图,6.2 是运行视图。


十二、小结

分层架构是构建可维护 LLM 应用的基础。根据业务规模选择合适的组件,避免过度设计。书中强调的解耦、可扩展、容错、可观测、成本优化在本节各层中均有体现。下一节将介绍对话能力集成与上下文持久化。学完本节后,在设计与评审 LLM 应用架构时,可对照「接入—逻辑—模型—数据—监控」五层自查,确保各层职责清晰、接口稳定,便于后续迭代与排障。


十四、与第 3 章其他小节、第 5~6 章的对应

3.1 节密钥:密钥与配置应由接入层或逻辑层从安全存储拉取,不写死在代码中,与 3.1 安全实践一致。3.3 节对话能力:多轮对话的「会话存储」落在数据层;逻辑层负责组装历史消息并调用模型层,与本节「逻辑层—数据层—模型层」的划分一致。3.5 节示例项目:新闻稿、问答、摘要、代码助手均可按五层拆分:接入层接收请求,逻辑层组 prompt 并调模型,模型层调 OpenAI,数据层可选 RAG 或会话库。第 5 章 LangChain/RAG:RAG 的向量库与检索落在数据层;LangChain 链与 Agent 主要在逻辑层;模型层可封装为 LangChain 的 LLM 实例。第 6 章生产部署与综合案例:6.2 节的 API 网关、负载均衡对应接入层;智能客服、数据分析师 Agent 对应逻辑层与数据层的组合。按本节五层设计,即可与全书从入门到生产的内容一一对应。


十五、小型项目与 MVP 的简化架构

若当前仅为 MVP 或单人开发,可适当合并层级:例如「接入层 + 逻辑层」合并为单一 Web 服务(如 FastAPI),模型层直接在该服务内调用 OpenAI,数据层仅用内存或单机 Redis/SQLite。待业务扩大后再拆分为独立网关、多实例与独立向量库。书中「避免过度设计」即指:先满足当前规模,再按需扩展;本节五层是目标架构,可根据阶段做减法。与 6.2 节生产级部署的对应:接入层对应 API 网关与负载均衡;监控层对应 6.2 的监控、告警与降级;逻辑层与模型层的无状态、多实例与 6.2 的扩展与高可用一致。按本节五层设计后,在 6.2 节只需细化网关配置、监控指标与安全策略即可完成从架构到上线的过渡。


下一节预告:3.3 对话能力集成:多轮对话管理与上下文持久化实现