llmbackend/doc/systemDesign.md
2024-12-04 11:24:47 +08:00

239 lines
No EOL
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# LLM API 转发平台系统设计书
---
## 1. 系统概览
### 1.1 系统目标
- **基于令牌的 LLM API 转发平台**:建立一个平台,允许客户用户通过认证和访问令牌,向绑定的 LLM 提供商发送提示词并获取响应。
- **多层级管理员功能**
- **超级管理员**:管理所有管理员、客户用户和 LLM 提供商。
- **管理员**:管理分配给他们的客户用户和对应的 LLM 提供商。
- **LLM 提供商管理功能**:支持管理员通过后台管理不同的 LLM 提供商及其对应的服务处理逻辑。
- **高性能与安全性**:利用 Redis 提升短期令牌的验证性能,支持动态注销,确保系统安全。
### 1.2 技术选型
- **后端框架Laravel**
- 支持服务容器绑定和多种中间件扩展,便于实现动态服务逻辑。
- **数据库MySQL**
- 用于存储管理员、客户用户、令牌、LLM 提供商等数据。
- **缓存系统Redis**
- 存储短期访问令牌,实现高效验证和动态注销。
- **安全措施**
- 强制使用 HTTPS 加密通信。
- 敏感数据如令牌和 LLM 提供商配置加密存储。
---
## 2. 系统架构
### 2.1 核心组件
#### 1. **Frontend API**
- **功能**
- 面向客户用户的 API 服务。
- 根据客户用户的 LLM 配置,路由请求至对应的 LLM 提供商。
- 动态调用不同的响应处理逻辑,适配各 LLM 提供商。
#### 2. **Admin Backend**
- **功能**
- 面向管理员的后台管理模块。
- 支持管理员对客户用户、令牌和 LLM 提供商的管理。
- 提供 LLM 提供商管理功能,允许新增、修改和删除 LLM 提供商。
#### 3. **数据库层MySQL**
- **功能**
- 持久化存储管理员、客户用户、令牌、LLM 提供商等信息。
- 支持复杂的关系管理和查询。
#### 4. **缓存层Redis**
- **功能**
- 存储短期访问令牌,实现高效验证和动态注销。
- 支持令牌的自动过期和主动注销。
---
### 2.2 模块划分
#### 1. **身份验证模块**
- **功能**
- 管理认证令牌和访问令牌的生成、验证与注销。
- 使用 Redis 提升验证性能,支持动态注销。
#### 2. **客户用户管理模块**
- **功能**
- 管理员可以添加、修改、删除客户用户。
- 客户用户绑定特定的 LLM 提供商。
#### 3. **LLM 提供商管理模块**
- **功能**
- 管理员可以管理 LLM 提供商列表。
- 每个提供商需配置名称、服务名称对应的服务逻辑、URL 和 Token。
#### 4. **日志与监控模块**
- **功能**
- 记录系统操作日志,便于审计和故障排查。
- 提供系统性能监控接口,支持集成第三方监控工具。
#### 5. **安全模块**
- **功能**
- 实现 HTTPS 加密通信。
- 防御常见的安全攻击,如 SQL 注入、XSS、CSRF 等。
- 管理令牌的安全性,支持即时注销和过期机制。
---
## 3. 数据流程
### 3.1 客户用户使用流程
1. **认证令牌分发**
- 管理员通过后台为客户用户生成认证令牌,并分发给客户用户。
2. **生成访问令牌**
- 客户用户使用认证令牌,通过 API 获取短期访问令牌。
3. **提示词请求**
- 客户用户使用访问令牌,向 Frontend API 发送提示词请求。
- 系统根据客户用户绑定的 LLM 提供商,调用对应的服务逻辑,发送请求并获取响应。
- 返回处理后的 LLM 响应给客户用户。
---
### 3.2 管理员操作流程
1. **管理员登录**
- 超级管理员和管理员使用用户名和密码登录管理后台。
2. **客户用户管理**
- 超级管理员可以管理所有客户用户。
- 管理员只能管理分配给他们的客户用户。
3. **LLM 提供商管理**
- 管理员可以新增、修改、删除 LLM 提供商。
- 配置提供商的名称、服务名称、URL、Token 等信息。
4. **令牌管理**
- 管理员为客户用户生成和管理认证令牌。
- 可以查看、修改或注销令牌。
---
## 4. 关键技术实现
### 4.1 令牌机制
- **认证令牌**
- 长期有效,由管理员生成,客户用户使用其获取访问令牌。
- **访问令牌**
- 短期有效(如 1 小时),存储在 Redis 中,支持自动过期和动态注销。
### 4.2 权限控制
- **超级管理员**
- 具有全局权限,管理所有资源,包括管理员、客户用户和 LLM 提供商。
- **管理员**
- 管理分配给他们的客户用户和 LLM 提供商。
- 无法访问其他管理员的资源。
### 4.3 LLM 提供商管理
#### 功能描述
- **提供商管理**
- 管理员可通过后台管理 LLM 提供商列表。
- 每个提供商需配置:
- 提供商名称(如 OpenAI、Anthropic 等)。
- 服务名称(对应 Laravel 中的服务类,用于处理逻辑)。
- API URL 和访问 Token。
- **客户用户绑定**
- 客户用户在创建或修改时,需要绑定一个 LLM 提供商。
#### 业务规则
- **权限限制**
- 管理员只能管理自己添加的 LLM 提供商。
- 超级管理员可以管理所有 LLM 提供商。
- **动态调用**
- 系统根据客户用户绑定的 LLM 提供商,动态调用对应的服务逻辑,适配不同的请求和响应格式。
---
## 5. 安全设计
### 5.1 加密通信
- **HTTPS 强制加密**:所有通信均通过 HTTPS确保数据传输安全。
### 5.2 权限隔离
- **数据隔离**
- 管理员和客户用户的资源严格隔离,防止未授权访问。
- **令牌安全**
- 令牌在存储和传输过程中均加密,防止泄露。
### 5.3 令牌注销
- **即时注销**
- 支持管理员主动注销令牌,令牌立即失效。
- **动态验证**
- 使用 Redis 存储令牌状态,支持高效的验证和注销。
---
## 6. 部署架构
### 6.1 服务分层
1. **应用层**
- 部署 Laravel 应用,分别处理 Frontend API 和 Admin Backend。
2. **缓存层**
- 部署 Redis用于存储和管理短期访问令牌。
3. **数据库层**
- 部署 MySQL存储持久化数据。
4. **日志与监控层**
- 部署 ELK 或 Prometheus用于日志收集和系统监控。
### 6.2 部署方式
- **容器化部署**
- 使用 Docker 对各服务进行容器化,便于部署和扩展。
- **负载均衡**
- 使用 Nginx 或其他负载均衡器,实现流量分发和高可用性。
- **高可用性**
- 数据库和 Redis 配置主从或集群模式,支持高并发和容错。
---
## 7. 总结
- **灵活性**
- 系统支持管理员动态管理 LLM 提供商,便于扩展和维护。
- **安全性**
- 采用多重安全措施,确保系统和数据的安全。
- **可扩展性**
- 系统架构设计支持高并发和横向扩展,满足业务增长需求。
如有任何进一步的需求或需要调整的地方,请随时告知!