AI配置模块功能完善

This commit is contained in:
2025-10-30 15:12:07 +08:00
parent 8b6e3d0815
commit 9ddc6887ff
7 changed files with 6 additions and 784 deletions
-142
View File
@@ -1,142 +0,0 @@
# Coze API 集成说明
## 概述
本项目已经优化了 AiChatServiceImpl 的 Coze API 接口实现,确保能够正确调用 Coze 的 v3 API。
## 配置说明
### application.yml 配置
```yaml
emotion:
coze:
api:
token: pat_GCR4qKzqpf90wMCvKsldMrB18KG3QsLDci65bZthssKsbLxu8X70BKYumleDcabO
base-url: https://api.coze.cn
chat:
path: /v3/chat
talk:
bot-id: 7523042446285439016
workflow-id: 7523047462895796287
summary:
bot-id: 7529062814150295595
workflow-id: 7523047462895796287
timeout: 30000
retry-count: 3
retry-delay: 1000
```
### 配置项说明
- `token`: Coze API 的访问令牌,格式为 `pat_` 开头
- `base-url`: Coze API 的基础URL,通常为 `https://api.coze.cn`
- `chat.path`: 聊天API的路径,固定为 `/v3/chat`
- `chat.talk.bot-id`: 对话聊天使用的机器人ID
- `chat.talk.workflow-id`: 对话聊天使用的工作流ID
- `chat.summary.bot-id`: 聊天记录总结使用的机器人ID
- `chat.summary.workflow-id`: 聊天记录总结使用的工作流ID
- `timeout`: API调用超时时间(毫秒)
- `retry-count`: 重试次数
- `retry-delay`: 重试延迟(毫秒)
## API 调用流程
### 1. 发送聊天消息
```java
String response = aiChatService.sendChatMessage(conversationId, message, userId);
```
### 2. 访客聊天
```java
Map<String, Object> response = aiChatService.guestChat(message, clientIp);
```
### 3. 生成对话总结
```java
String summary = aiChatService.generateConversationSummary(conversationId, userId);
```
## 实现特点
### 1. 正确的 API 调用流程
1. **发送聊天请求**: 调用 `/v3/chat` 接口发送消息
2. **获取 chat_id**: 从响应中提取 `chat_id``conversation_id`
3. **轮询状态**: 使用 `/v3/chat/retrieve` 接口轮询聊天状态
4. **获取消息**: 当状态为 `completed` 时,调用 `/v3/chat/message/list` 获取AI回复
### 2. 请求格式
```json
{
"bot_id": "7523042446285439016",
"workflow_id": "7523047462895796287",
"user_id": "user-123",
"stream": false,
"additional_messages": [
{
"role": "user",
"content": "用户消息内容",
"content_type": "text",
"type": "question"
}
],
"parameters": {}
}
```
### 3. 响应处理
- 解析初始响应获取 `chat_id``conversation_id`
- 轮询聊天状态直到完成(最多30秒,每2秒一次)
- 从消息列表中提取 AI 回复(role=assistant, type=answer
### 4. 错误处理
- 网络异常处理
- API 错误响应处理
- 超时处理
- 重试机制
## 测试
运行以下命令测试 API 集成:
```bash
mvn test -Dtest=CozeApiTest
```
## 注意事项
1. **API Token**: 确保使用有效的 Coze API token
2. **Bot ID**: 确保 bot_id 和 workflow_id 正确配置
3. **网络连接**: 确保服务器能够访问 `https://api.coze.cn`
4. **超时设置**: 根据实际情况调整超时时间
5. **错误处理**: 生产环境中应该有完善的错误处理和日志记录
## 故障排除
### 1. 检查配置
```bash
# 检查配置是否正确加载
curl -X GET http://localhost:19089/api/ai/health
```
### 2. 查看日志
```bash
# 查看详细的API调用日志
tail -f logs/emotion-single.log | grep -i coze
```
### 3. 常见错误
- **401 Unauthorized**: 检查 API token 是否正确
- **404 Not Found**: 检查 bot_id 是否存在
- **Timeout**: 增加超时时间或检查网络连接
- **Rate Limit**: 检查API调用频率限制
-193
View File
@@ -1,193 +0,0 @@
# 管理员登录系统 - 快速开始
## 🚀 快速开始
### 1. 执行数据库脚本
```bash
# 执行建表脚本(包含管理员表和初始数据)
mysql -u root -p emotion_museum < sql/emotion_museum.sql
```
### 2. 启动应用
```bash
cd backend-single
mvn spring-boot:run
```
### 3. 测试登录
```bash
curl -X POST http://localhost:8080/api/admin/auth/login \
-H "Content-Type: application/json" \
-d '{
"account": "admin",
"password": "admin123"
}'
```
## 📋 默认管理员账号
- **账号**: `admin`
- **密码**: `admin123`
- **角色**: `super_admin`
⚠️ **重要**: 生产环境部署后请立即修改默认密码!
## 🔑 API接口
### 管理员认证
| 接口 | 方法 | 路径 | 说明 |
|------|------|------|------|
| 登录 | POST | `/api/admin/auth/login` | 账号密码登录 |
| 获取信息 | GET | `/api/admin/auth/info` | 获取当前管理员信息 |
| 登出 | POST | `/api/admin/auth/logout` | 退出登录 |
| 刷新Token | POST | `/api/admin/auth/refreshToken` | 刷新访问令牌 |
### 管理员管理
| 接口 | 方法 | 路径 | 说明 |
|------|------|------|------|
| 分页查询 | GET | `/api/admin/page` | 分页查询管理员列表 |
| 查询详情 | GET | `/api/admin/detail` | 根据ID查询详情 |
| 创建 | POST | `/api/admin/create` | 创建新管理员 |
| 更新 | PUT | `/api/admin/update` | 更新管理员信息 |
| 删除 | DELETE | `/api/admin/delete` | 删除管理员 |
## 💡 使用示例
### 登录获取Token
```bash
curl -X POST http://localhost:8080/api/admin/auth/login \
-H "Content-Type: application/json" \
-d '{
"account": "admin",
"password": "admin123"
}'
```
**响应**:
```json
{
"code": 200,
"message": "登录成功",
"data": {
"accessToken": "eyJhbGciOiJIUzUxMiJ9...",
"refreshToken": "eyJhbGciOiJIUzUxMiJ9...",
"expiresIn": 86400,
"adminInfo": {
"id": "xxx",
"account": "admin",
"username": "系统管理员",
"role": "super_admin"
}
}
}
```
### 使用Token访问接口
```bash
# 将上面获取的accessToken替换到下面的{TOKEN}
curl -X GET http://localhost:8080/api/admin/page?current=1&size=10 \
-H "Authorization: Bearer {TOKEN}"
```
### 创建新管理员
```bash
curl -X POST http://localhost:8080/api/admin/create \
-H "Authorization: Bearer {TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"account": "admin2",
"password": "123456",
"username": "运营管理员",
"email": "admin2@example.com",
"phone": "13800138001",
"role": "admin",
"department": "运营部",
"position": "运营经理"
}'
```
## 🔐 安全特性
1. ✅ 密码BCrypt加密存储
2. ✅ JWT Token认证
3. ✅ Token类型隔离(admin/user
4. ✅ 独立的拦截器验证
5. ✅ Redis存储Token
6. ✅ 登录信息记录
## 📚 详细文档
- [系统设计文档](docs/ADMIN_AUTH.md)
- [测试指南](docs/ADMIN_AUTH_TEST.md)
- [实现总结](docs/ADMIN_IMPLEMENTATION_SUMMARY.md)
## ⚙️ 配置说明
### JWT配置(application.yml
```yaml
emotion:
jwt:
secret: emotion-museum-secret-key-2025 # JWT密钥
expiration: 86400000 # Token过期时间(24小时)
refresh-expiration: 604800000 # 刷新Token过期时间(7天)
```
### Redis配置
确保Redis服务正常运行,Token会存储在Redis中:
- 管理员Token: `admin_token:{adminId}`
- 管理员刷新Token: `admin_refresh_token:{adminId}`
## 🛠️ 常见问题
### Q: 登录返回401
**A**: 检查账号密码是否正确,确认数据库中有初始管理员数据
### Q: 访问接口返回403
**A**: 确保使用管理员Token访问管理员接口,普通用户Token无法访问
### Q: Token验证失败
**A**: Token可能已过期,重新登录或使用refreshToken刷新
### Q: 如何修改密码
**A**: 当前版本需要直接更新数据库,后续版本会提供密码修改接口
## 🎯 角色说明
系统支持三种管理员角色:
- `super_admin`: 超级管理员,拥有所有权限
- `admin`: 普通管理员
- `operator`: 运营人员
## 📝 开发建议
1. **生产环境**
- 修改默认密码
- 启用HTTPS
- 配置合适的Token过期时间
- 定期备份数据库
2. **安全建议**
- 定期更换JWT密钥
- 监控异常登录
- 实现登录失败次数限制
- 添加操作日志
3. **性能优化**
- 配置Redis连接池
- 优化数据库索引
- 实现Token缓存策略
## 📞 技术支持
如有问题,请查看详细文档或联系开发团队。
@@ -356,15 +356,8 @@ public class AiConfigServiceImpl extends ServiceImpl<AiConfigMapper, AiConfig> i
response.setUpdateTime(aiConfig.getUpdateTime().format(DATE_TIME_FORMATTER));
}
// 脱敏处理API Token
if (StringUtils.hasText(aiConfig.getApiToken())) {
String token = aiConfig.getApiToken();
if (token.length() > 8) {
response.setApiToken(token.substring(0, 4) + "****" + token.substring(token.length() - 4));
} else {
response.setApiToken("****");
}
}
// 管理端不需要脱敏,直接返回完整的API Token
response.setApiToken(aiConfig.getApiToken());
// 转换BigDecimal为Double
if (aiConfig.getTemperature() != null) {