Files
chat/README.md
2026-08-05 15:56:08 +08:00

225 lines
5.7 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.
# 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)。
### 7. 可选:接入 CosyVoice 真人感客服音色
语音对话会优先请求 CosyVoice,服务不可用时自动回落到 OpenAI 或浏览器语音。AI 播报期间会继续监听麦克风,用户插话后立即停止当前音频和剩余播放队列,并转入新一轮识别。启动 GPU 服务后,在管理后台「系统设置 → AI 客服人物」中配置人物名称、欢迎语、性格、说话人、合成模式,并可上传已授权的 WAV 音色样本和在线试听。GPU 服务部署、SFT 与零样本音色克隆说明见 [`deploy/cosyvoice.md`](deploy/cosyvoice.md)。
## 默认账户
| 用途 | 用户名 | 密码 |
|------|--------|------|
| 管理后台 / 会员端 | 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`
## 生产部署
### Docker Compose 一键部署
项目提供 Nginx + PHP-FPM 8.2 + MySQL 8 的容器化部署。首次启动时会自动编译两个 Vue 前端、安装 Composer 生产依赖,并导入数据库结构。
```bash
cp .env.docker.example .env
# 修改 .env 中的 MYSQL_ROOT_PASSWORD 和 JWT_SECRET
docker compose up -d --build
```
默认访问地址:
- 会员端:`http://localhost:8081/`
- 管理后台:`http://localhost:8081/admin/`
- API`http://localhost:8081/api/`
查看状态和日志:
```bash
docker compose ps
docker compose logs -f web app db
```
停止服务(保留数据库与上传文件):
```bash
docker compose down
```
只有明确需要清空全部数据时才执行 `docker compose down -v`。如需改用其他端口,修改 `.env` 中的 `APP_PORT`
### 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.0curl、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