mirror of
https://github.com/lobehub/lobehub
synced 2026-04-21 17:47:27 +00:00
* 🔖 chore(release): release version v2.1.34 [skip ci] * 📝 docs: Polish documents * 📝 docs: Fix typo * 📝 docs: Update start * 📝 docs: Fix style * 📝 docs: Update start * 📝 docs: Update layout * 📝 docs: Fix typo * 📝 docs: Fix typo --------- Co-authored-by: lobehubbot <i@lobehub.com>
146 lines
6.7 KiB
Text
146 lines
6.7 KiB
Text
---
|
||
title: 架构设计
|
||
description: 深入了解 LobeHub 的架构设计,包括前端、后端、运行时和数据存储。
|
||
tags:
|
||
- LobeHub
|
||
- 架构设计
|
||
- Agent 平台
|
||
- Next.js
|
||
---
|
||
|
||
# 架构设计
|
||
|
||
LobeHub 是一个基于 Next.js 构建的开源 AI Agent 平台,使用户能够与 AI 进行自然语言交互、使用工具、管理知识库等。以下是 LobeHub 的架构设计概览。
|
||
|
||
## 应用架构概览
|
||
|
||
LobeHub 的整体架构由以下核心层组成:
|
||
|
||
```plaintext
|
||
+---------------------+--------------------------------------------------+
|
||
| Layer | Description |
|
||
+---------------------+--------------------------------------------------+
|
||
| Frontend | Next.js RSC + React Router DOM 混合路由 SPA |
|
||
| Backend API | RESTful WebAPI + tRPC Routers |
|
||
| Runtime | Model Runtime + Agent Runtime |
|
||
| Auth | Better Auth(邮箱密码 + SSO) |
|
||
| Data Storage | PostgreSQL + Redis + S3 |
|
||
| Marketplace | Agent 市场 + MCP 工具市场 |
|
||
+---------------------+--------------------------------------------------+
|
||
```
|
||
|
||
## 前端架构
|
||
|
||
前端采用 Next.js 框架,使用 **Next.js RSC + React Router DOM 混合路由**方案:Next.js App Router 处理服务端渲染页面(如认证页),React Router DOM 承载主应用 SPA。
|
||
|
||
| 路由方式 | 使用场景 | 位置 |
|
||
| ---------------------- | ---------------- | -------------------------- |
|
||
| **Next.js App Router** | 认证页、SSR、静态路由 | `src/app/(backend)/` |
|
||
| **React Router DOM** | 主聊天 SPA、Agent 界面 | `src/spa/` + `src/routes/` |
|
||
|
||
**为什么使用混合路由?** SSR 为认证页提供安全性、SEO 和静态页性能;SPA 为交互式聊天和 Agent 界面提供即时导航和响应式状态管理 —— 两者各取所长。
|
||
|
||
主要技术栈:
|
||
|
||
- **UI 组件**:`@lobehub/ui`、antd
|
||
- **CSS-in-JS**:antd-style
|
||
- **状态管理**:zustand(slice 模式)
|
||
- **数据请求**:SWR + tRPC
|
||
- **国际化**:react-i18next
|
||
|
||
**组件使用优先级**:项目组件(`src/components/`)→ `@lobehub/ui` → Ant Design(`antd`)。始终优先使用项目级组件以保持一致性。
|
||
|
||
前端代码按职责分层在 `src/` 目录下,详见 [目录架构](/zh/docs/development/basic/folder-structure)。
|
||
|
||
## 后端 API
|
||
|
||
后端提供两种 API 形式:
|
||
|
||
- **RESTful WebAPI**(`src/app/(backend)/webapi/`):处理 chat 流式响应、TTS、文件服务等需要特殊处理的端点
|
||
- **tRPC Routers**(`src/server/routers/`):类型安全的主要业务路由,按运行时分组:
|
||
- `lambda/` — 主业务(agent、session、message、topic、file、knowledge、settings 等)
|
||
- `async/` — 耗时异步操作(文件处理、图像生成、RAG 评估)
|
||
- `tools/` — 工具调用(search、MCP、market)
|
||
- `mobile/` — 移动端专用
|
||
|
||
## Runtime
|
||
|
||
### Model Runtime
|
||
|
||
`@lobechat/model-runtime`(`packages/model-runtime/`)是 LLM API 适配层,抹平了 30+ 不同 AI Provider 之间的 API 差异(OpenAI、Anthropic、Google、Bedrock、Ollama 等),提供统一的调用接口。每个 Provider 有独立的适配器实现。它是无状态的,每次调用独立。
|
||
|
||
### Agent Runtime
|
||
|
||
`@lobechat/agent-runtime`(`packages/agent-runtime/`)是 Agent 编排引擎,位于 Model Runtime 之上,负责驱动多步 AI Agent 行为的完整生命周期:
|
||
|
||
- **Plan-Execute 循环**:核心状态机,循环执行 LLM 调用 → 工具执行 → 结果处理
|
||
- **工具调用与批量执行**:支持单工具和批量工具调用
|
||
- **Human-in-the-Loop**:安全检查、人工审批流程
|
||
- **上下文压缩**:管理上下文窗口
|
||
- **用量与成本追踪**:累计 token 用量和费用
|
||
- **多 Agent 协作**:`GroupOrchestrationRuntime` 支持 Supervisor + Executor 模式的多 Agent 编排
|
||
|
||
简言之:Model Runtime 解决 "如何与 LLM Provider 通信",Agent Runtime 解决 "如何运行一个使用 LLM、工具、人工审批的完整 Agent"。
|
||
|
||
**Agent 执行流程:**
|
||
|
||
1. 解析用户输入
|
||
2. LLM 决策:直接回复还是调用工具
|
||
3. 执行工具(单工具或批量)
|
||
4. Human-in-the-Loop 人工审批(如需要)
|
||
5. 将执行结果反馈给 LLM
|
||
6. 循环直至生成最终回复
|
||
|
||
## 认证鉴权
|
||
|
||
LobeHub 使用 [Better Auth](https://www.better-auth.com/) 作为认证框架,支持:
|
||
|
||
- 邮箱 + 密码注册登录
|
||
- SSO 单点登录(GitHub、Google 等多种 OAuth Provider)
|
||
|
||
认证配置位于 `src/auth.ts`,相关路由在 `src/app/(backend)/api/` 下。
|
||
|
||
## 数据存储
|
||
|
||
```plaintext
|
||
+---------------+----------------------------------------------+
|
||
| Storage | Usage |
|
||
+---------------+----------------------------------------------+
|
||
| PostgreSQL | 主数据库,存储用户、会话、消息、Agent 配置等 |
|
||
| Redis | 缓存、会话状态、速率限制 |
|
||
| S3 | 文件存储(用户上传、图片、知识库文件等) |
|
||
+---------------+----------------------------------------------+
|
||
```
|
||
|
||
数据库使用 Drizzle ORM 操作,schema 定义在 `packages/database/src/schemas/`。
|
||
|
||
## 市场
|
||
|
||
- **Agent 市场**:提供各种场景的 AI Agent,用户可以发现、使用和分享 Agent
|
||
- **MCP 工具市场**:发现和集成 MCP 工具,扩展 Agent 的能力
|
||
|
||
## 性能优化
|
||
|
||
- **代码拆分**:基于路由的按需分块,保持初始包体积小
|
||
- **懒加载**:重型组件和路由按需加载
|
||
- **SWR 缓存**:客户端数据缓存并在后台自动重新验证
|
||
- **边缘缓存**:静态和可缓存响应分发至 CDN 边缘节点
|
||
- **流式响应**:聊天回复通过 SSE 增量流式传输,提升感知速度
|
||
- **虚拟滚动**:长消息列表和 Agent 列表使用虚拟滚动优化渲染
|
||
|
||
## 安全措施
|
||
|
||
- **CSRF 防护**:SameSite Cookie 和 Token 验证
|
||
- **XSS 防护**:Content Security Policy 请求头和输出内容净化
|
||
- **速率限制**:API 请求限流在边缘层执行
|
||
- **SSRF 防护**:插件和 MCP 调用的出站请求白名单
|
||
- **SQL 注入防护**:通过 Drizzle ORM 使用参数化查询
|
||
- **密钥管理**:API Key 和凭据以环境变量方式存储,绝不写入代码或客户端包
|
||
|
||
## 开发和部署
|
||
|
||
- **版本控制**:Git + GitHub,gitmoji commit 规范
|
||
- **代码质量**:ESLint、Stylelint、TypeScript 类型检查、循环依赖检测 (dpdm)、死代码检测 (knip)
|
||
- **测试**:Vitest 单元测试 + Cucumber/Playwright E2E 测试
|
||
- **CI/CD**:GitHub Actions 自动化测试、构建和发布
|
||
- **部署**:支持 Vercel、Docker、各大云平台自托管
|