6.5 KiB
6.5 KiB
架构说明
技术架构
本项目采用 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 请求流程
- 客户端发送 HTTP 请求到
/api/* - Nginx 将请求转发到
public/api.php - api.php 解析路由,执行对应的中间件和控制器
- 控制器调用模型/服务层处理业务逻辑
- 返回 JSON 响应
SSE 流式响应流程
- 客户端发送 POST 请求到
/api/chat/completions - ChatController 设置 SSE 响应头
- AIService 通过 cURL 连接 AI 供应商 API
- 使用 CURLOPT_WRITEFUNCTION 回调逐块接收 AI 响应
- 每块数据通过 SSE 格式发送给客户端
- AI 响应完成后发送
[DONE]信号
页面请求流程
- 客户端访问 PHP 页面(如
/chat.php) - Nginx 通过 PHP-FPM 执行 PHP 文件
- PHP 文件引入布局模板和视图
- 客户端通过 AJAX 加载数据