news 2026/10/15 3:53:58

【学习笔记】大模型应用到底由哪些组件组成?一张架构图看懂 LLM 应用-01

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【学习笔记】大模型应用到底由哪些组件组成?一张架构图看懂 LLM 应用-01

很多人第一次接触大模型开发时,会先问一个问题:

“我调用一个大模型 API,不就能做一个 AI 应用了吗?”

做 Demo 的时候,答案可能是“差不多”;但只要应用开始接触真实用户、真实文件和真实业务,单独调用模型 API 很快就会遇到问题:模型不知道企业内部资料,回答无法追溯;用户数据没有权限隔离;文件解析耗时太长,接口容易超时;调用成本和错误率也没人统计。

这时你会发现,大模型只是系统中的一个核心部件,而不是全部。

本文不从某一个框架出发,而是沿着“一次用户提问如何流经系统”的路径,拆解一个典型 LLM 应用需要哪些组件,以及每类组件究竟解决什么问题。

一、先看全貌:大模型应用不是一个模型,而是一条链路

一个具备基本工程能力的问答应用,通常可以抽象成下面这条链路:

用户 ↓ 前端界面 ↓ 后端 API / 鉴权 / 限流 ↓ 工作流编排与会话管理 ├── 直接调用大模型 ├── 检索知识库 ├── 调用外部工具 └── 查询业务数据库 ↓ 大模型生成答案 ↓ 流式返回、日志记录、质量评估

如果是企业知识库,还会增加另一条“离线建库链路”:

上传文件 ↓ 对象存储 ↓ 文档解析 / OCR ↓ 文本清洗与切分 ↓ Embedding 向量化 ↓ Milvus / pgvector ↓ PostgreSQL 保存文档与权限元数据

前一条链路负责“回答问题”,后一条链路负责“准备答案所需的知识”。两者缺一不可。

二、六类核心组件,分别负责什么?

可以把大模型应用拆成六个层次:

层次

典型组件

主要职责

交互层

Vue、React、Next.js

接收问题、展示回答、上传文件

应用层

FastAPI、Django、Node.js

鉴权、业务逻辑、接口和任务管理

编排层

LangGraph、LlamaIndex、Dify、n8n

组织模型、检索和工具调用流程

智能层

大语言模型、Embedding、Reranker

生成、向量化、排序和推理

数据层

PostgreSQL、Milvus、Redis、MinIO

业务数据、向量、缓存和文件存储

工程层

RabbitMQ、Kafka、Docker、监控系统

异步处理、部署、观测和安全

这六层不是严格的产品分类,而是一种帮助我们理解系统的方式。不同项目可能合并其中几层,也可能用一个产品同时承担多个职责。

三、模型层:大语言模型究竟负责什么?

大语言模型主要负责三件事:理解上下文、进行推理、生成文本或结构化结果。

例如,用户问:

“公司差旅报销中,机票改签费用怎么处理?”

模型可以理解问题并组织语言,但它并不知道你所在公司的最新制度。它能回答“语言上合理”的内容,却不一定能回答“业务上正确”的内容。

因此,模型层通常还会包含另外两类模型:

1. Embedding 模型

Embedding 模型把文本、图片或其他数据转换成向量。向量可以理解为一组表示语义特征的数字,语义相近的内容通常在向量空间中更接近。

在 RAG 系统里,文档片段和用户问题都要经过 Embedding,然后才能进行相似度检索。

2. Reranker 模型

向量检索适合快速找出一批候选内容,但候选结果的精确排序可能不够理想。Reranker 会进一步比较“问题”和“候选文本”的相关性,重新排序后再交给大模型。

因此,一条更完整的检索链路是:

用户问题 ↓ Embedding ↓ 向量检索 Top K ↓ Reranker 重排序 ↓ 选出少量高相关片段 ↓ 交给大模型生成答案

这里需要注意:Embedding、Reranker 和大语言模型可以来自不同厂商,也不要求必须使用同一系列模型。

四、数据层:为什么 PostgreSQL 和 Milvus 经常一起出现?

在一个知识库项目中,至少有三类数据:

  1. 原始文件,例如 PDF、Word、图片和 Excel;

  2. 业务元数据,例如文件名、上传者、所属部门和权限;

  3. 文本片段及其向量,用于语义检索。

这三类数据的访问方式不同,通常不会全部塞进同一个存储系统。

4.1 PostgreSQL:保存业务事实

PostgreSQL 适合保存结构化业务数据,例如:

  • 用户、组织和角色;

  • 文档、版本和处理状态;

  • 知识库与部门的关联关系;

  • 文档片段的来源、页码和更新时间;

  • 对话记录、反馈和审计日志。

它还支持 JSONB、事务和全文检索等能力,适合承担 AI 应用中的“业务数据库”角色。PostgreSQL 官方文档也提供了tsvector、to_tsvector等全文检索能力,这意味着它并不只是简单保存表格数据。

4.2 Milvus:保存和检索向量

Milvus 是面向向量相似度检索的数据库,适合管理大规模 Embedding,并通过近似最近邻搜索快速找到语义相近的数据。Milvus 官方文档将其定位为用于向量相似度搜索的开源向量数据库,并提供 Milvus Lite、Standalone 和 Distributed 等部署形态。

在 RAG 里,Milvus 通常保存:

  • 文本片段的向量;

  • 片段 ID;

  • 文档 ID;

  • 租户或知识库 ID;

  • 用于过滤的元数据。

但 Milvus 不应该替代 PostgreSQL 的全部业务职责。检索到片段后,应用往往还要回 PostgreSQL 查询权限、来源、版本和完整业务信息。

4.3 Redis:保存短期状态

Redis 常用来保存:

  • 登录会话和短期 Token;

  • 对话上下文缓存;

  • 热门问题和检索结果;

  • 接口限流计数器;

  • 异步任务状态。

它的特点是读写速度快,但不适合直接作为所有业务数据的永久唯一存储。

4.4 MinIO 或 S3:保存原始文件

PDF、图片、视频等二进制文件通常放在对象存储中,数据库只记录文件地址、大小、哈希和处理状态。这样可以避免把大文件直接塞进 PostgreSQL,也方便后续备份和扩展。

五、应用层:FastAPI 不是“调用模型的脚本”

很多 Demo 会把所有逻辑写在一个 Python 文件里:接收问题、调用模型、打印答案。生产系统则需要一个应用层,把这些能力组织成稳定的接口。

典型后端 API 可能包括:

POST /api/chat 发起对话 POST /api/chat/stream 流式返回回答 POST /api/documents 上传文档 GET /api/documents/{id} 查询文档状态 POST /api/knowledge/search 调试知识库检索 GET /api/conversations 查询会话记录

应用层通常还负责:

  • 校验用户身份和权限;

  • 判断用户能访问哪些知识库;

  • 组装 Prompt 和检索上下文;

  • 处理模型超时、重试和降级;

  • 记录请求 ID、耗时和 Token 消耗;

  • 通过 SSE 或 WebSocket 向前端推送生成过程。

因此,FastAPI、Django 或 Node.js 并不是“大模型本身”,而是把模型能力包装成可被用户和其他系统调用的业务服务。

六、编排层:什么时候需要 LangGraph、Dify 或 n8n?

当流程只有一步时,直接调用模型即可:

问题 → 模型 → 答案

当流程变成多步,就需要编排:

问题 ↓ 判断意图 ├── 普通知识问答 → 检索知识库 ├── 查询订单 → 调用业务 API ├── 需要最新信息 → 调用搜索工具 └── 无法判断 → 转人工

编排工具的职责,是定义节点、分支、状态和异常处理。例如:

  • LangGraph 更适合用代码构建有状态、可循环、可控制的 Agent 图;

  • LlamaIndex 更偏向数据接入、索引和检索应用;

  • Dify 适合通过可视化界面搭建知识库、工作流和应用;

  • n8n 适合把 AI 能力连接到邮件、表格、Webhook 和第三方 SaaS。

它们不是同一层面的完全替代品,应该根据团队的开发能力、可控性要求和部署方式选择。

七、工具层:让模型从“会说”变成“能做”

大模型本身通常不能直接访问你的数据库、订单系统或文件系统。Tool Calling 的作用,是让模型以结构化方式提出工具调用请求,再由后端真正执行。

例如,模型决定调用天气工具时,可能输出类似这样的结构:

{ "name": "get_weather", "arguments": { "city": "上海" } }

后端收到请求后,应该完成以下动作:

  1. 校验工具名称是否允许调用;

  2. 校验参数格式和用户权限;

  3. 执行真实 API 或数据库查询;

  4. 对结果进行脱敏和大小限制;

  5. 把工具结果交回模型继续生成。

关键点是:模型只能“请求调用”,不能绕过后端权限直接执行危险操作。

八、工程层:为什么还需要 Redis、消息队列和监控?

8.1. 消息队列处理长任务

上传一个 300 页 PDF,可能要经历下载、解析、OCR、切分、向量化和写入数据库。如果让 HTTP 请求一直等待,接口很容易超时。

更合理的方式是:

上传文件 → 创建任务 → 立即返回任务 ID ↓ 消息队列 ↓ Worker 异步解析和建立索引 ↓ 更新任务状态

RabbitMQ、Kafka 或 Redis Stream 都可以承担异步任务,但它们的定位、吞吐和运维方式不同,不能只因为“都能发消息”就认为完全等价。

8.2. 监控回答质量与系统质量

传统后端主要监控 CPU、内存、错误率和延迟;大模型应用还要关注:

  • Prompt 和模型输出;

  • Token 数量和调用成本;

  • 检索结果是否相关;

  • 答案是否引用了正确上下文;

  • 工具调用是否成功;

  • 用户是否点击“有帮助”。

Langfuse、OpenTelemetry、Prometheus 和 Grafana 等工具可以分别用于链路追踪、指标采集和可视化。没有观测能力,很多“模型变笨了”的问题其实无法定位。

九、一个最小项目和一个生产项目,组件可以完全不同

9.1个人学习项目

Python + 一个大模型 API + Embedding 模型 + PostgreSQL + pgvector + FastAPI

这个组合足够完成一个小型文档问答应用,部署简单,便于学习完整流程。

9.2 中大型企业知识库

React / Vue + FastAPI + LangGraph 或其他工作流编排 + 大语言模型 + Embedding + Reranker + PostgreSQL + Milvus + Redis + MinIO / S3 + RabbitMQ / Kafka + Langfuse + Prometheus + Grafana + Docker / Kubernetes

组件变多以后,能力更强,但部署、升级、备份、权限和故障排查的成本也会同步增加。

十、选型时最容易犯的三个错误

10.1 错误一:一开始就堆满所有组件

如果只有几千份文档,却一开始部署 Milvus、Kafka、Kubernetes 和多套监控,项目可能还没验证需求,就先被基础设施拖慢。

建议先用最小闭环验证:

上传文件 → 解析 → 切分 → 向量检索 → 生成回答

10.2 错误二:把向量数据库当成知识库本身

向量数据库解决的是相似度检索,不会自动解决文档权限、版本、引用、删除和审核问题。知识库是业务系统,向量库只是其中一个检索组件。

10.3 错误三:只关注模型效果,不关注数据和流程

很多回答质量问题来自:文档解析错误、切分不合理、权限过滤遗漏、检索召回不足或 Prompt 组装混乱,而不是模型参数不够大。

十一、码海寻道的组件学习路线

接下来的系列会沿着这条路线展开:

先理解整体架构 ↓ 再理解 RAG、Agent、Workflow 的边界 ↓ 学习 Embedding、向量检索和 Reranker ↓ 掌握 PostgreSQL、pgvector 与 Milvus ↓ 构建文档解析、切分和知识库索引 ↓ 加入 Redis、对象存储和异步任务 ↓ 实现 Agent、Tool Calling 和工作流 ↓ 补齐评估、监控、安全和生产部署

十二、结语:先画清数据流,再决定使用什么组件

大模型应用的核心问题,从来不是“现在最流行的组件是什么”,而是:

用户的问题、业务数据、外部工具和模型输出,应该怎样安全、稳定、可追踪地流动起来?

当你能画清楚这条数据流,PostgreSQL、Milvus、Redis、MinIO、消息队列和工作流框架就不再是一堆孤立名词,而会变成架构图中各司其职的部件。

下一篇,我们继续讨论一个最容易混淆的问题:RAG、Agent 和 Workflow 到底有什么区别?


参考资料

  1. Milvus Documentation:What is Milvus

  2. Milvus Documentation:Basic Vector Search

  3. PostgreSQL Documentation:Text Search Functions and Operators

1.大模型应用到底由哪些组件组成?一张架构图看懂 LLM 应用

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/15 3:53:50

嵌入式驱动开发:量产级工程化实战 第 18 篇:采集任务与传感器驱动

采集任务为什么容易出问题 采集任务看起来很简单:定时读取传感器,处理数据,发送出去。但在实际项目里,采集任务是最容易出问题的任务之一。 原因有几个: 第一,采集任务涉及的外设最多。 加速度计(SPI/I2C)、温度传感器(I2C/单总线)、ADC(如果测电池电压),每一个…

作者头像 李华
网站建设 2026/10/15 3:53:48

嵌入式驱动开发:量产级工程化实战 第 15 篇:通信错误排查工具链——从“抓不到“到“看得见“

一次"抓不到"的通信丢包 某款工业设备通过 RS485 与上位机通信,协议是 Modbus RTU,波特率 19200。客户反馈:偶尔丢包,概率大概每天几次。设备重启后恢复,但过几天又会出现。 排查的第一步是抓包。工程师拿了一个 USB 转 RS485 的适配器,接到总线上,用串口助…

作者头像 李华
网站建设 2026/10/15 3:52:48

PoB离线Build规划:天赋树与伤害计算一次算清

PoB离线Build规划:天赋树与伤害计算一次算清 【免费下载链接】PathOfBuilding Offline build planner for Path of Exile. 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding 凌晨两点,你又一次在天赋树上手动数格子:…

作者头像 李华