RAG 系统架构与业务流程
本文档基于当前仓库中的 eagent、eagent-web 和 eagent-admin 实现整理。三张图分别回答:
- 系统由哪些应用、服务和存储组成;
- 一次文档入库和一次 RAG 问答分别如何流转;
- 用户从登录、选择会话到获得答案的完整使用链路是什么。
# 1. 系统架构图
# 架构要点
eagent-web是普通用户入口,当前路由集中在/login、/register、/chat和/chat/:conversationId。eagent-admin是管理入口,覆盖概览、知识库、文档与 Chunk、会话、意图、团队、监控和质量中心。- 所有受保护请求先经过 JWT 校验,并解析用户团队、当前团队和可用知识库范围;Redis 仅作为认证上下文缓存,故障时回源 MySQL。
- MySQL 是业务事实存储;OSS 保存原始文件;Milvus 保存向量检索索引。Milvus 的 standalone 部署依赖 etcd 和 MinIO。
- 向量检索和答案生成均通过
LLMService的 provider adapter 选择模型;可选 rerank 服务只改变候选排序,不改变业务权限范围。 - 观测链路使用 Langfuse trace/span,并将 LLM token、耗时、模型、请求 ID 等记录到观测数据表。
# 2. RAG 主要流程图
# RAG 流程中的关键实现
- 普通问题直接进入一次检索;复杂问题先由 LLM 拆分,再对每个子问题执行检索,最后按
finalScore去重并取全局 Top 8。 - 当前检索是“多路召回 + 精排”:Milvus 的 question、summary、content 三路各取 Top 10,MySQL 关键词召回补充候选,默认最终每个子问题取 Top 4。
- rerank 未配置、缺少 API Key、HTTP 失败或响应无
results时,自动回退到加权融合排序。 - repair 请求会从历史中找到最近一个有效用户问题,强制重新检索,并优先限制到上次回答引用过的文档。
- 澄清恢复的业务快照由
agent_run管理;代码已注册 LangGraph checkpointer,但当前流式执行与恢复仍以Agent Run + state snapshot为主。 - 流式答案结束后,后端把答案、结构化
parts、来源和is_complete写回消息表;客户端刷新时会重新加载会话详情和 pending run。
# 3. 用户使用链路图
# 用户端可见的分支
- 正常问答:发送后实时显示 token,结束后展示来源和会话标题。
- 无检索问答:问候、感谢、简单确认或可由历史直接回答的问题绕过知识库。
- 复杂问题:系统可能先请求澄清;用户补充后沿同一个
runId恢复。 - 停止生成:前端调用
AbortController,后端将未完成 assistant message 标记为is_complete=false,并提供重试入口。 - 重新回答:前端复用最后一条用户消息;repair 语义会强制重新检索,并保留上下文。
- 刷新恢复:进入会话时同时加载历史消息和待处理 Agent Run,等待澄清的会话可恢复交互。
# 4. 代码映射
| 能力 | 主要代码 |
|---|---|
| Agent 图与路由 | eagent/src/agent/graph.ts |
| Agent 状态 | eagent/src/agent/state.ts |
| 意图判断与权限路由 | eagent/src/agent/nodes/intentJudge.node.ts |
| 复杂问题拆分与澄清 | eagent/src/agent/nodes/questionSplit.node.ts |
| RAG 循环与来源构建 | eagent/src/agent/nodes/ragLoop.node.ts |
| 召回、融合与 rerank | eagent/src/service/retrieve.service.ts |
| 文档解析、分块、Embedding 入库 | eagent/src/service/document.service.ts、eagent/src/service/chunk.service.ts |
| OSS 文件上传 | eagent/src/service/file.service.ts |
| Milvus 向量集合 | eagent/src/service/milvus.service.ts |
| 聊天 SSE 与 resume API | eagent/src/controller/chat.controller.ts |
| 会话与消息编排 | eagent/src/agent/agent.service.ts |
| 用户聊天交互 | eagent-web/src/pages/Chat/components/MessageInput.tsx |
| 用户端路由 | eagent-web/src/router/index.tsx |
| 管理端路由 | eagent-admin/src/router/index.ts |