121 lines
5.3 KiB
Markdown
121 lines
5.3 KiB
Markdown
# SAARS 全栈聊天助手平台
|
||
|
||
企业级聊天助手平台,前后端分离,支持实时聊天、用户管理、内容审核。技术规范见项目根目录《全栈聊天助手平台开发技术规范》。
|
||
|
||
## 仓库结构
|
||
|
||
```
|
||
saars/
|
||
├── backend/ # Flask 后端
|
||
│ ├── app/
|
||
│ │ ├── api/ # REST 端点
|
||
│ │ ├── models/ # 数据模型
|
||
│ │ ├── services/ # 业务逻辑
|
||
│ │ ├── admin/ # Flask-Admin 管理
|
||
│ │ └── utils/
|
||
│ ├── tests/
|
||
│ ├── requirements.txt
|
||
│ └── Dockerfile
|
||
├── android-app/ # Android 客户端 (Java, MVVM)
|
||
│ ├── app/
|
||
│ │ ├── data/ # 数据层 (Retrofit, Room)
|
||
│ │ ├── domain/ # 领域层
|
||
│ │ └── presentation/# 表现层 (Activity, ViewModel)
|
||
│ └── build.gradle
|
||
├── docker-compose.yml
|
||
└── README.md
|
||
```
|
||
|
||
## 后端 (Flask)
|
||
|
||
- **框架**: Flask 2.3+, Flask-SocketIO, Flask-JWT-Extended, Flask-Admin
|
||
- **数据库**: 腾讯云 MySQL (liaotian_db),SQLAlchemy ORM + PyMySQL,Flask-Migrate
|
||
- **缓存/队列**: Redis 7+
|
||
- **认证**: JWT + 刷新令牌
|
||
|
||
### 本地运行
|
||
|
||
```bash
|
||
cd backend
|
||
python -m venv venv
|
||
source venv/bin/activate # Windows: venv\Scripts\activate
|
||
pip install -r requirements.txt
|
||
export FLASK_ENV=development
|
||
export DATABASE_URL=mysql+pymysql://root:!Rjb12191@gz-cynosdbmysql-grp-d26pzce5.sql.tencentcdb.com:24936/liaotian_db?charset=utf8mb4
|
||
export REDIS_URL=redis://localhost:6379/0
|
||
# 首次部署:在腾讯云 MySQL 上先建库(见 backend/scripts/init_db.sql),再执行:
|
||
flask db upgrade
|
||
python run.py # 或 gunicorn -k eventlet -w 1 run:app
|
||
```
|
||
|
||
### Docker
|
||
|
||
```bash
|
||
docker-compose up -d
|
||
# 后端监听 8052 端口(腾讯云已放行);首次需在 backend 容器内: flask db init && flask db migrate -m "init" && flask db upgrade
|
||
```
|
||
|
||
### API 概览
|
||
|
||
| 模块 | 路径前缀 | 说明 |
|
||
|----------|-----------------|----------------|
|
||
| 认证 | `/api/v1/auth` | 注册、登录、刷新、/me |
|
||
| 聊天 | `/api/v1/chat` | 会话列表、消息、撤回 |
|
||
| 文件 | `/api/v1/files` | 上传(图片/文档,最大 10MB) |
|
||
| 管理 | `/api/v1/admin` | 用户管理、会话审计、统计(需 admin 角色) |
|
||
| 知你客服 | `/api/v1/agent` | Agent 代理(方式一):`POST /chat` 与知你客服对话 |
|
||
|
||
- 服务端口:**8052**(可在环境变量 `PORT` 或 docker-compose 中修改)
|
||
- 管理界面: `/admin`(需 Bearer Token 且角色为 admin)
|
||
|
||
### 知你客服 Agent 代理(方式一)
|
||
|
||
- 按《知你客服 Agent 智能聊天 App 接入方案》方式一:SAARS 后端用平台账号登录拿 Token,代 App 用户调平台执行 API,再返回回复。
|
||
- **配置**:在环境变量或 `docker-compose.yml` 中设置
|
||
`PLATFORM_BASE_URL`(如 `http://101.43.95.130:8037`)、`PLATFORM_USERNAME`、`PLATFORM_PASSWORD`、`PLATFORM_AGENT_ID`(知你客服的 Agent ID)。在低代码平台为对接创建一个账号,在 Agent 管理中复制「知你客服」的 ID 填入。
|
||
- **接口**:`POST /api/v1/agent/chat`,Body `{ "message": "用户输入", "user_id": "可选" }`,响应 `{ "reply": "客服回复" }`。需登录 SAARS 的 JWT。
|
||
|
||
## Android 客户端 (Java)
|
||
|
||
- **最小 SDK**: API 30 (Android 11)
|
||
- **架构**: MVVM, Architecture Components, Retrofit, Socket.IO Client, Room
|
||
- **UI**: Material Design 3, RecyclerView 消息列表
|
||
|
||
### Room 离线
|
||
|
||
- 会话列表、消息列表首次从本地 Room 加载(秒开),再拉取接口并写回 Room。
|
||
- 发送成功的消息会写入 Room,Socket 收到的新消息也会写入 Room,下次进入直接读本地。
|
||
|
||
### Socket.IO 实时
|
||
|
||
- 登录/注册成功后自动连接 Socket(query 带 token),进入聊天页会 `join_conversation`,退出会 `leave_conversation`。
|
||
- 后端发消息后通过 `broadcast_new_message` 推送到房间,客户端收到 `new_message` 后写入 Room 并刷新列表。
|
||
|
||
### FCM 推送
|
||
|
||
- 已接入 `firebase-messaging` 与 `ChatFirebaseMessagingService`,后台/进程被杀时由 FCM 下发通知。
|
||
- **启用步骤**:在 [Firebase 控制台](https://console.firebase.google.com/) 创建项目并添加 Android 应用,下载 `google-services.json` 放到 `android-app/app/`;在根目录 `build.gradle` 的 `plugins` 中增加 `id 'com.google.gms.google-services' version '4.4.0' apply false`,在 `app/build.gradle` 的 `plugins` 中取消注释 `id 'com.google.gms.google-services'`,同步后即可。可选:后端提供 `POST /api/v1/users/me/fcm_token` 保存 token,便于服务端发定向推送。
|
||
|
||
### 知你客服入口
|
||
|
||
- 会话列表页右下角有两个 FAB:**知你客服**(上方)、**新对话**(下方)。点击「知你客服」进入与知你客服 Agent 的对话页,消息通过 SAARS 后端代理转发到低代码平台执行 API,回复展示在列表中并写入 Room 做历史。
|
||
|
||
### 构建
|
||
|
||
```bash
|
||
cd android-app
|
||
./gradlew assembleDebug
|
||
```
|
||
|
||
将 `build.gradle` 中 `applicationId` 与后端地址配置为实际环境后安装运行。
|
||
|
||
## 质量与部署
|
||
|
||
- **测试**: 后端 `pytest`,目标单元测试覆盖率 ≥85%
|
||
- **部署**: Docker 容器化,可配合 CI/CD 流水线
|
||
- **扩展**: 无状态 API + Redis,支持水平扩展
|
||
|
||
## 许可证
|
||
|
||
内部项目,按公司规定使用。
|