first commit
This commit is contained in:
@@ -0,0 +1,189 @@
|
|||||||
|
# AI Chat - 类 ChatGPT 智能对话系统
|
||||||
|
|
||||||
|
基于 **Vue 3** + **ThinkPHP 8** + **MySQL** 构建的全栈 AI 聊天应用。
|
||||||
|
|
||||||
|
## 架构说明
|
||||||
|
|
||||||
|
| 层级 | 技术 | 目录 | 端口 |
|
||||||
|
|------|------|------|------|
|
||||||
|
| 后端 API | **ThinkPHP 8** | `backend/` | 8080 |
|
||||||
|
| 会员端 | Vue 3 | `frontend/` | 5173 |
|
||||||
|
| 管理后台 | Vue 3 | `frontend-admin/` | 5174 |
|
||||||
|
|
||||||
|
```
|
||||||
|
chat/
|
||||||
|
├── backend/ # ThinkPHP 8 后端
|
||||||
|
│ ├── app/ # 控制器、模型、服务、中间件
|
||||||
|
│ ├── config/ # 配置文件
|
||||||
|
│ ├── database/ # 数据库脚本
|
||||||
|
│ ├── public/ # Web 入口
|
||||||
|
│ ├── route/ # 路由定义
|
||||||
|
│ └── uploads/ # 上传文件
|
||||||
|
├── frontend/ # Vue 会员端
|
||||||
|
├── frontend-admin/ # Vue 管理后台
|
||||||
|
└── README.md
|
||||||
|
```
|
||||||
|
|
||||||
|
## 功能特性
|
||||||
|
|
||||||
|
### 会员端
|
||||||
|
- 响应式聊天界面(PC / 手机自适应)
|
||||||
|
- Markdown、图片、视频、语音、文档、表情
|
||||||
|
- 文件上传、粘贴图片、会话留存
|
||||||
|
- 流式 AI 回复(SSE)
|
||||||
|
- 注册 / 登录
|
||||||
|
|
||||||
|
### 管理后台
|
||||||
|
- 数据概览、用户管理、会话管理
|
||||||
|
- AI 模型配置(OpenAI 格式 API)
|
||||||
|
- 会员等级与权限、功能开关
|
||||||
|
|
||||||
|
### 后端 (ThinkPHP 8)
|
||||||
|
- RESTful API + JWT 认证
|
||||||
|
- 会员权限、会话消息持久化
|
||||||
|
- OpenAI 格式 API 代理(流式输出)
|
||||||
|
- 文件上传管理
|
||||||
|
|
||||||
|
## 快速开始
|
||||||
|
|
||||||
|
### 1. 环境要求
|
||||||
|
|
||||||
|
- PHP >= 8.0(需启用 curl、pdo_mysql、mbstring)
|
||||||
|
- MySQL 5.7+
|
||||||
|
- Node.js 18+
|
||||||
|
|
||||||
|
### 2. 数据库
|
||||||
|
|
||||||
|
默认配置(`backend/.env`):
|
||||||
|
|
||||||
|
```
|
||||||
|
DB_HOST = 127.0.0.1
|
||||||
|
DB_NAME = ai_chat
|
||||||
|
DB_USER = root
|
||||||
|
DB_PASS = root
|
||||||
|
```
|
||||||
|
|
||||||
|
初始化数据库:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd backend
|
||||||
|
php database/install.php
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. 启动后端
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd backend
|
||||||
|
php think run -p 8080
|
||||||
|
```
|
||||||
|
|
||||||
|
生产环境将 Web 服务器指向 `backend/public` 目录。
|
||||||
|
|
||||||
|
### 4. 启动会员端
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd frontend
|
||||||
|
npm install
|
||||||
|
npm run dev
|
||||||
|
```
|
||||||
|
|
||||||
|
访问 http://localhost:5173
|
||||||
|
|
||||||
|
### 5. 启动管理后台
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd frontend-admin
|
||||||
|
npm install
|
||||||
|
npm run dev
|
||||||
|
```
|
||||||
|
|
||||||
|
访问 http://localhost:5174
|
||||||
|
|
||||||
|
### 6. 配置 AI 模型
|
||||||
|
|
||||||
|
登录管理后台,进入「AI 模型」,填入 API Key 和接口地址(支持 OpenAI 兼容 API)。
|
||||||
|
|
||||||
|
## 默认账户
|
||||||
|
|
||||||
|
| 用途 | 用户名 | 密码 |
|
||||||
|
|------|--------|------|
|
||||||
|
| 管理后台 / 会员端 | admin | admin123 |
|
||||||
|
|
||||||
|
## API 路由
|
||||||
|
|
||||||
|
所有接口前缀 `/api`,主要路由:
|
||||||
|
|
||||||
|
| 方法 | 路径 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| POST | /api/auth/register | 注册 |
|
||||||
|
| POST | /api/auth/login | 登录 |
|
||||||
|
| GET | /api/conversations | 会话列表 |
|
||||||
|
| POST | /api/chat/completions | 发送消息(SSE) |
|
||||||
|
| POST | /api/upload | 上传文件 |
|
||||||
|
| GET | /api/admin/stats | 管理统计 |
|
||||||
|
|
||||||
|
完整路由见 `backend/route/app.php`。
|
||||||
|
|
||||||
|
## 生产部署
|
||||||
|
|
||||||
|
### 1. 一键编译并部署静态资源
|
||||||
|
|
||||||
|
在项目根目录执行:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm install
|
||||||
|
npm --prefix frontend install
|
||||||
|
npm --prefix frontend-admin install
|
||||||
|
npm run build
|
||||||
|
```
|
||||||
|
|
||||||
|
编译完成后:
|
||||||
|
- 会员端静态文件 → `backend/public/`
|
||||||
|
- 管理后台静态文件 → `backend/public/admin/`
|
||||||
|
|
||||||
|
访问路径(同域部署):
|
||||||
|
- 会员端:`https://你的域名/`
|
||||||
|
- 管理后台:`https://你的域名/admin/`
|
||||||
|
|
||||||
|
### 2. 后端配置
|
||||||
|
|
||||||
|
编辑 `backend/.env`:
|
||||||
|
|
||||||
|
```
|
||||||
|
APP_DEBUG = false
|
||||||
|
JWT_SECRET = 请改成随机长字符串
|
||||||
|
```
|
||||||
|
|
||||||
|
Web 服务器网站根目录指向 `backend/public`,Nginx 示例见 `deploy/nginx.conf.example`,phpstudy 详见 `deploy/phpstudy.md`。
|
||||||
|
|
||||||
|
**若登录接口返回 nginx 404**:说明 `/api` 未转发到 PHP,需配置伪静态(见 `backend/public/.htaccess` 或 nginx 的 `location ^~ /api`)。
|
||||||
|
|
||||||
|
### 3. 生产环境要求
|
||||||
|
|
||||||
|
- PHP >= 8.0(curl、pdo_mysql、mbstring)
|
||||||
|
- MySQL 5.7+
|
||||||
|
- `backend/uploads/` 目录可写
|
||||||
|
- Nginx/Apache 配置 SPA 路由回退(`try_files`)
|
||||||
|
- `/api` 请求转发到 `backend/public/index.php`
|
||||||
|
|
||||||
|
### 4. 开发 vs 生产
|
||||||
|
|
||||||
|
| 环境 | 会员端 | 管理后台 | API |
|
||||||
|
|------|--------|----------|-----|
|
||||||
|
| 开发 | :5173 | :5174 | :8080 |
|
||||||
|
| 生产 | `/` | `/admin/` | `/api` |
|
||||||
|
|
||||||
|
开发环境仍用 `npm run dev`;生产用 `npm run build` 后由 Nginx 托管静态文件。
|
||||||
|
|
||||||
|
## 生产部署建议(安全)
|
||||||
|
|
||||||
|
1. 修改 `.env` 中 `JWT_SECRET`
|
||||||
|
2. 设置 `APP_DEBUG = false`
|
||||||
|
3. `uploads/` 目录需写权限
|
||||||
|
4. 启用 HTTPS,修改默认管理员密码
|
||||||
|
|
||||||
|
## 技术栈
|
||||||
|
|
||||||
|
- **后端**: ThinkPHP 8, ThinkORM, JWT
|
||||||
|
- **前端**: Vue 3, Vite, Pinia, Vue Router
|
||||||
|
- **数据库**: MySQL
|
||||||
Reference in New Issue
Block a user