Files
AI-Chat/docs/ARCHITECTURE.md
2026-05-08 10:05:31 +08:00

144 lines
7.0 KiB
Markdown
Raw Permalink 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.
# 架构说明
## 技术架构
本项目采用 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 根目录Nginx 指向此目录)
│ ├── index.php # 首页入口(自动路由到登录/安装页)
│ ├── api.php # API 统一入口(路由分发)
│ ├── router.php # PHP 内置开发服务器路由文件
│ ├── login.php # 登录页面
│ ├── chat.php # 聊天主页面
│ ├── config.php # 配置管理页面
│ ├── install.php # 安装向导页面
│ ├── assets/ # 前端静态资源
│ │ ├── css/ # 样式文件
│ │ │ ├── style.css # 全局样式
│ │ │ ├── chat.css # 聊天界面样式
│ │ │ └── markdown.css # Markdown 渲染样式
│ │ ├── js/ # JavaScript
│ │ │ ├── api.js # API 调用封装
│ │ │ ├── chat.js # 聊天核心功能
│ │ │ ├── config.js # 配置页面逻辑
│ │ │ ├── install.js # 安装向导逻辑
│ │ │ ├── login.js # 登录页面逻辑
│ │ │ ├── session.js # 会话管理
│ │ │ ├── upload.js # 文件上传
│ │ │ ├── markdown.js # Markdown 渲染
│ │ │ └── storage.js # 本地存储
│ │ └── img/ # 图片
│ └── uploads/ # 用户上传文件
├── app/ # 应用代码(命名空间 App\PSR-4 自动加载)
│ ├── 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
├── config/ # JSON 配置文件(安装后生成)
├── 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 加载数据