FastAPI + LangGraph + Milvus + ES + Redis + MySQL 高性能智能体中台方案

整体定位:多 Agent 中台平台 ,对外通过 FastAPI 提供统一 HTTP/WS 接口;LangGraph 编排 Agent 工作流;多存储分层:Milvus 向量检索、ES 全文检索、Redis 缓存 / 状态 / 消息队列、MySQL 业务元数据。适合 RAG + 多智能体、工具调用、会话管理、知识库管理场景。

一、整体架构分层

复制代码
┌─────────────────────────────────────────────┐
│ 接入层:FastAPI(HTTP/WebSocket接口、鉴权、限流) │
└───────────────────┬─────────────────────────┘
                    ↓
┌─────────────────────────────────────────────┐
│ 编排层:LangGraph 智能体工作流引擎              │
│  - 多Agent节点:检索Agent / 工具Agent / 总结Agent │
│  - 状态管理、分支路由、循环、Human-in-the-loop   │
└───────────────────┬─────────────────────────┘
                    ↓
┌─────────────────────────────────────────────┐
│ 检索&存储层(多引擎各司其职)                   │
│ ├─ Milvus:向量数据库|文本Embedding向量检索      │
│ ├─ https://zhida.zhihu.com/search?content_id=283421294&content_type=Article&match_order=1&q=Elasticsearch&zhida_source=entity:全文检索|关键词/段落检索、过滤  │
│ ├─ Redis:会话缓存、Agent状态、任务队列、分布式锁  │
│ └─ MySQL:业务元数据|用户、知识库、Agent配置、日志 │
└───────────────────┬─────────────────────────┘
                    ↓
┌─────────────────────────────────────────────┐
│ 基础能力:https://zhida.zhihu.com/search?content_id=283421294&content_type=Article&match_order=1&q=LLM%E6%9C%8D%E5%8A%A1&zhida_source=entity、工具插件(API/数据库工具)、https://zhida.zhihu.com/search?content_id=283421294&content_type=Article&match_order=1&q=Embedding%E6%9C%8D%E5%8A%A1&zhida_source=entity │
└─────────────────────────────────────────────┘

各组件职责边界(重点,避免混用)

  1. FastAPI
  • 对外 API 网关:对话接口、知识库上传、Agent 配置、任务查询、流式 SSE/WS 输出
  • 中间件:JWT 鉴权、请求限流、请求日志、异常捕获、参数校验 (Pydantic)
  • 服务拆分:可拆为api-service主服务 + ingest-service文档摄入服务
  • LangGraph
  • Agent 状态流转、节点编排、条件分支、循环重试、人工介入节点
  • 状态存储:优先把大状态放 Redis,轻量元数据落 MySQL;LangGraph Checkpoint 可接入 Redis 实现分布式持久化
  • 支持多 Agent:路由 Agent 判断问题类型 → 调用检索 Agent / 工具 Agent
  • Milvus
  • 存储文档切片 Embedding,做语义相似检索
  • 适合:向量召回、知识库相似度匹配
  • Elasticsearch
  • 原始文本切片存储,关键词检索、过滤、高亮
  • 混合检索策略:ES 关键词召回 + Milvus 向量召回 → 结果重排(Rerank)
  • Redis
  • 短期会话缓存、对话上下文缓存
  • LangGraph checkpoint 存储、分布式锁、任务队列(Celery/RQ)、限流计数器
  • 热点检索结果缓存,减少 Milvus/ES 压力
  • MySQL
  • 业务结构化数据:用户、知识库、文档元信息、Agent 模板、对话记录、权限配置
  • 不存大文本 / 向量,只存 ID、标签、状态、时间等元字段

二、核心业务流程(RAG 智能体为例)

  1. 用户请求进入 FastAPI 接口,鉴权 + 参数校验
  2. 构造 LangGraph 状态,写入初始 query、user_id、knowledge_base_id
  3. 路由 Agent 判断:是否需要检索知识库?
  • 需要:并行调用 Milvus 向量检索 + ES 全文检索 → 合并召回结果,Rerank 重排
  • 不需要:直接调用 LLM 生成回答
  • 拿到参考文档,交给生成 Agent,调用 LLM 输出答案
  • 流式 SSE 返回结果给前端
  • 对话记录元数据写入 MySQL;会话临时状态放 Redis;长对话可持久化 LangGraph Checkpoint

文档摄入链路(异步):文件上传 → FastAPI 接收 → 丢入 Redis 任务队列 → 后台服务解析文档 → 文本切分 → Embedding → 写入 Milvus,原始片段写入 ES,文档元信息写入 MySQL

三、关键技术选型 & 版本建议

  • Python:3.10~3.11
  • FastAPI + Uvicorn + Pydantic v2
  • LangGraph:langgraph、langchain-core,推荐独立部署 LangGraph API(生产不内嵌在 FastAPI 主进程)
  • Milvus:v2.4+,可使用 Standalone 或分布式集群;SDK pymilvus
  • Elasticsearch:8.x;elasticsearch-py
  • Redis:7.x;redis-py
  • MySQL:8.0;sqlalchemy + asyncmy(异步)
  • 额外组件推荐:
    • Embedding:BGE /text-embedding 系列
    • Rerank:BGE-Reranker
    • 异步任务:Celery + Redis /arq(纯 async 更适配 FastAPI)
    • 监控:Prometheus + Grafana,OpenTelemetry 全链路埋点
    • 容器:Docker Compose 开发;K8s 生产部署

四、生产级核心优化点(高性能重点)

1. 检索层:混合检索 + 缓存

  • 多路召回:ES 关键词召回 + Milvus 向量召回,结果做融合、去重、Rerank
  • Redis 缓存高频 Query 的 topK 检索结果,减少向量库压力
  • Milvus 分区:按知识库 ID 做 partition,检索时直接指定分区,提速、减少资源占用

2. LangGraph 分布式优化

  • ❌ 不要把 LangGraph 直接嵌入 FastAPI 同步接口(长会话会阻塞 worker)
  • ✅ 方案:LangGraph 独立 API 服务,FastAPI 作为业务网关调用 LangGraph 服务
  • Checkpoint 存储:LangGraph Redis Checkpointer,支持多实例共享 Agent 状态,支持会话断点恢复
  • 节点异步执行、超时控制、失败重试、熔断保护

3. 数据库分层,防止热点

  • MySQL:只存元数据,大文本片段不入库;对话长文本放 ES,MySQL 只存索引 ID
  • Milvus 只存向量 + doc_id,原始文本存 ES;通过 doc_id 关联
  • Redis 设置 TTL,自动清理过期会话,避免内存膨胀

4. FastAPI 性能

  • 全异步:async def 接口,async 数据库驱动(asyncmy、aioredis)
  • 限流:Redis 滑动窗口限流,按 user_id/ip 限制 QPS
  • SSE 流式输出,边生成边返回,降低首字延迟
  • 接口拆分:问答接口、文档上传接口、管理后台接口隔离

5. 可观测性

  • OpenTelemetry 埋点:接口耗时、LLM 调用耗时、Milvus/ES 检索耗时、LangGraph 各节点耗时
  • 日志结构化,对话 trace_id 贯穿全链路,方便定位 Agent 节点失败问题

五、数据库表设计极简示例(MySQL)

  1. user 用户表:id, name, api_key, status
  2. knowledge_base 知识库:id, name, owner_id, status
  3. document 文档表:id, kb_id, file_name, file_hash, status(未处理 / 处理中 / 完成)
  4. conversation 对话会话:id, user_id, kb_id, create_time
  5. message 消息元数据:id, conv_id, role, msg_type, es_chunk_ref, create_time

六、项目目录结构参考

复制代码
agent-platform/
├── api/                    # FastAPI网关服务
│   ├── main.py
│   ├── routers/            # 对话、知识库、agent配置路由
│   ├── middlewares/        # 鉴权、限流、trace埋点
│   └── schemas/            # Pydantic模型
├── langgraph_service/      # 独立LangGraph Agent编排服务
│   ├── graph/              # 各个Agent图定义(rag_graph, tool_graph)
│   ├── nodes/              # Agent节点实现
│   └── checkpointer.py     # Redis Checkpointer
├── ingest/                 # 文档摄入异步任务
│   ├── parser/
│   ├── chunker.py
│   ├── embedding.py
│   └── storage.py          # 写入Milvus + ES
├── db/
│   ├── mysql/
│   ├── milvus/
│   ├── es/
│   └── redis/
├── core/                   # 公共工具、配置、rerank、llm client
└── docker-compose.yml

七、潜在坑点(避坑清单)

  1. LangGraph 默认内存 checkpointer,多实例部署会话状态不共享 → 必须替换为 RedisCheckpointer
  2. Milvus 不要存储超长文本,向量库只存向量 + 主键,原始文本交给 ES
  3. 大文件解析、切片、Embedding 是 CPU 密集,必须异步任务队列,不能在 API 请求内阻塞
  4. LLM 调用不稳定:增加重试、超时、熔断,单独 LLM 代理层做负载均衡
  5. 向量检索不要盲目开大 topK,召回越多 Rerank 越慢,合理控制召回数量
  6. Redis 内存溢出:会话、缓存必须设置 TTL

八、扩展方向

  • 接入更多工具:SQL 查询工具、API 插件、代码执行器
  • 多租户隔离:Milvus 分区 + MySQL 行级权限 + ES 索引隔离
  • Agent 版本管理:保存不同版本 LangGraph 工作流,灰度发布
  • 评估模块:Ragas 接入,自动评估 RAG 召回与回答质量
相关推荐
Raas1001 小时前
AI网关支持哪些模型?MAI Gateway(魔芋企业级AI网关)功能实测与最佳实践
大数据·人工智能·gateway·mai gateway·企业级产品
豪气的程序猿1 小时前
电商素材工作流怎么搭?Lingko AI 对比宠物喂食器的主图与详情页分工
人工智能·宠物
面包狗AI4S1 小时前
GitHub AI4S 项目观察(2026-09-07—2026-09-13)
人工智能·深度学习·机器学习
AI码农小姐姐1 小时前
AI漫剧推文短视频推理加速:LCM-LoRA与少步采样实践
人工智能·音视频·ai工具·ai漫剧
宸津-代码粉碎机1 小时前
微服务线上踩坑复盘:接口超时、负载倾斜隐形问题根治方案(生产级配置)
java·大数据·人工智能·python·spring
阿里云大数据AI技术1 小时前
阿里云PAI推出InferX:Agent时代重塑企业专属的高保障SLO推理服务
人工智能·agent
Raas1001 小时前
MAI Gateway(魔芋企业级AI网关)能力解析:AI网关支持OpenAI吗?AI网关核心功能详解
人工智能·网关·ai网关·mai gateway·企业级产品·独立团队
多多鼠1 小时前
System Prompt 的“版本漂移”问题:从变更管理到 A/B 测试体系
开发语言·网络·人工智能·python·langchain
LuTshoes1 小时前
spring ai 实战RAG(4)-模块化RAG
java·人工智能·spring