架构
SciLaxy 各组件如何协同工作的概述,从用户浏览器到 LLM 提供商及返回。
系统概览
SciLaxy 由多个通过 Redis 和 PostgreSQL 进行通信的服务组成:
- Nginx — 反向代理,将流量路由到相应的后端服务
- FastAPI (service) — REST API、SSE 流式传输、认证、文件上传
- Celery (worker) — LLM 编排、智能体执行、后台任务
- Next.js (web) — React 前端,使用 Zustand 状态管理
- Rspress (docs) — MDX 文档站点(即本站)
- PostgreSQL — 所有实体的持久化存储
- Redis — 发布/订阅频道、流式事件持久化、缓存
- Casdoor — OAuth/OIDC 身份提供商(可选)
服务层
后端采用分层架构:
- API 路由 处理 HTTP 相关事务:请求解析、认证、响应格式化
- 核心服务 包含业务逻辑:智能体编排、订阅管理、文件管理
- 仓库 提供数据访问:SQL 查询、缓存、分页
- 模型 通过 SQLAlchemy 定义数据库 Schema
流式传输管道
当用户发送消息时,事件通过管道从 Celery Worker 流向浏览器:
事件类型
流式事件系统使用一组结构化的事件类型:
断线重连
事件通过 MAXLEN ~10000 持久化在 Redis Streams 中。当客户端重新连接时,会发送 Last-Event-ID 请求头。SSE 端点通过 XRANGE 回放遗漏的事件,然后切换到 XREAD 实时追踪。这保证了跨连接的零数据丢失。
智能体编译
智能体以 JSON 配置的形式定义,并编译为可执行的 LangGraph 工作流:
- 规范化 — 将配置归一化为确定性格式,解析组件引用
- 验证 — 检查结构完整性,验证节点连接,验证工具引用
- 编译 — 从规范配置构建 LangGraph 节点和边
- 执行 — 运行编译后的图,使用流式回调
此管道支持内置的 ReAct 类智能体以及用户自定义的图配置。
数据层
PostgreSQL
所有持久化实体存储在 PostgreSQL 中:
- 智能体 — 配置、作用域(系统/用户)、提供商设置
- 会话与话题 — 对话容器、消息历史
- 消息 — 用户和智能体内容,包含引用
- 文件 — 元数据、存储键、知识集关联
- 技能 — 使用 SKILL.md 格式的自定义功能
- 订阅 — 套餐、配额、用量追踪
Redis
Redis 承担多种角色:
- 发布/订阅 — Worker 和 API Pod 之间的实时事件传递
- Streams — SSE 重连的持久化事件存储
- 缓存 — 会话数据、速率限制、临时状态
对象存储
文件存储在 S3 兼容的对象存储中(开发环境使用 MinIO,生产环境使用任意 S3 提供商)。PostgreSQL 存储元数据和引用;实际文件内容存储在对象存储中。