139 lines
6.5 KiB
Markdown
139 lines
6.5 KiB
Markdown
# 架构说明
|
||
|
||
## 技术架构
|
||
|
||
本项目采用 PHP 8.0 原生 MVC 架构,不使用任何 PHP 框架。
|
||
|
||
```
|
||
┌──────────────────────────────────────────────┐
|
||
│ Nginx │
|
||
│ (Web 服务器 + 反向代理) │
|
||
└──────────┬───────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌──────────────────────────────────────────────┐
|
||
│ public/ │
|
||
│ (Web 根目录, 入口文件) │
|
||
│ api.php, login.php, chat.php, config.php │
|
||
└──────────┬───────────────────────────────────┘
|
||
│
|
||
┌─────┴─────┐
|
||
│ │
|
||
▼ ▼
|
||
┌─────────┐ ┌──────────────────────────────┐
|
||
│ PHP 页面 │ │ API (api.php) │
|
||
│ (视图) │ │ 路由分发 + 中间件处理 │
|
||
└────┬────┘ └──────┬───────────────────────┘
|
||
│ │
|
||
▼ ▼
|
||
┌──────────────────────────────────────────────┐
|
||
│ Controllers │
|
||
│ AuthController, ChatController, │
|
||
│ SessionController, MessageController, │
|
||
│ ConfigController, InstallController, │
|
||
│ UploadController │
|
||
└──────────┬───────────────────────────────────┘
|
||
│
|
||
┌─────┼─────────────┐
|
||
│ │ │
|
||
▼ ▼ ▼
|
||
┌───────┐ ┌───────┐ ┌──────────────────────┐
|
||
│Models │ │Services│ │ Middleware │
|
||
│(数据) │ │(业务) │ │ Auth/Admin │
|
||
└───┬───┘ └───┬───┘ └──────────────────────┘
|
||
│ │
|
||
▼ ▼
|
||
┌────────┐ ┌─────────────────┐
|
||
│ MySQL │ │ AI Providers │
|
||
│(PDO) │ │ OpenAI/Claude/ │
|
||
│ │ │ NewAPI │
|
||
└────────┘ └─────────────────┘
|
||
```
|
||
|
||
## 目录结构
|
||
|
||
```
|
||
ai-chat/
|
||
├── public/ # Web 根目录
|
||
│ ├── api.php # API 统一入口(路由分发)
|
||
│ ├── login.php # 登录页面
|
||
│ ├── chat.php # 聊天主页面
|
||
│ ├── config.php # 配置管理页面
|
||
│ └── install.php # 安装向导页面
|
||
├── app/ # 应用代码(命名空间 App\)
|
||
│ ├── Config/ # 配置类
|
||
│ │ ├── Database.php # 数据库连接(单例 PDO)
|
||
│ │ └── AppConfig.php # 应用配置读写
|
||
│ ├── Controllers/ # 控制器
|
||
│ │ ├── AuthController.php
|
||
│ │ ├── ChatController.php
|
||
│ │ ├── SessionController.php
|
||
│ │ ├── MessageController.php
|
||
│ │ ├── ConfigController.php
|
||
│ │ ├── InstallController.php
|
||
│ │ └── UploadController.php
|
||
│ ├── Middleware/ # 中间件
|
||
│ │ ├── AuthMiddleware.php # JWT 认证
|
||
│ │ └── AdminMiddleware.php # 管理员权限
|
||
│ ├── Models/ # 数据模型
|
||
│ │ ├── User.php
|
||
│ │ ├── Session.php
|
||
│ │ ├── Message.php
|
||
│ │ ├── Config.php
|
||
│ │ └── Personality.php
|
||
│ ├── Services/ # 服务层
|
||
│ │ ├── AIService.php # AI 服务路由
|
||
│ │ ├── Installer.php # 安装迁移服务
|
||
│ │ └── Providers/ # AI 供应商
|
||
│ │ ├── OpenAIProvider.php
|
||
│ │ ├── ClaudeProvider.php
|
||
│ │ └── NewAPIProvider.php
|
||
│ └── Views/ # 视图模板
|
||
│ ├── login.php
|
||
│ ├── chat.php
|
||
│ ├── config.php
|
||
│ └── layout/
|
||
│ ├── header.php
|
||
│ └── footer.php
|
||
├── assets/ # 前端静态资源
|
||
│ ├── css/ # 样式
|
||
│ │ ├── style.css # 全局样式
|
||
│ │ ├── chat.css # 聊天界面样式
|
||
│ │ └── markdown.css # Markdown 渲染样式
|
||
│ ├── js/ # JavaScript
|
||
│ │ ├── api.js # API 调用封装
|
||
│ │ ├── chat.js # 聊天核心功能
|
||
│ │ ├── session.js # 会话管理
|
||
│ │ ├── upload.js # 文件上传
|
||
│ │ ├── markdown.js # Markdown 渲染
|
||
│ │ └── storage.js # 本地存储
|
||
│ └── img/ # 图片
|
||
├── config/ # JSON 配置文件
|
||
├── uploads/ # 用户上传文件
|
||
├── docs/ # 文档
|
||
└── composer.json # Composer 配置
|
||
```
|
||
|
||
## 请求流程
|
||
|
||
### API 请求流程
|
||
1. 客户端发送 HTTP 请求到 `/api/*`
|
||
2. Nginx 将请求转发到 `public/api.php`
|
||
3. api.php 解析路由,执行对应的中间件和控制器
|
||
4. 控制器调用模型/服务层处理业务逻辑
|
||
5. 返回 JSON 响应
|
||
|
||
### SSE 流式响应流程
|
||
1. 客户端发送 POST 请求到 `/api/chat/completions`
|
||
2. ChatController 设置 SSE 响应头
|
||
3. AIService 通过 cURL 连接 AI 供应商 API
|
||
4. 使用 CURLOPT_WRITEFUNCTION 回调逐块接收 AI 响应
|
||
5. 每块数据通过 SSE 格式发送给客户端
|
||
6. AI 响应完成后发送 `[DONE]` 信号
|
||
|
||
### 页面请求流程
|
||
1. 客户端访问 PHP 页面(如 `/chat.php`)
|
||
2. Nginx 通过 PHP-FPM 执行 PHP 文件
|
||
3. PHP 文件引入布局模板和视图
|
||
4. 客户端通过 AJAX 加载数据
|