AI配置模块功能完善
This commit is contained in:
@@ -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调用频率限制
|
||||
@@ -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) {
|
||||
|
||||
@@ -1,160 +0,0 @@
|
||||
# AI配置管理前端实现
|
||||
|
||||
## 概述
|
||||
基于Vue 3 + TypeScript + Element Plus实现的AI配置管理前端页面,提供完整的AI配置增删改查功能。
|
||||
|
||||
## 实现的文件
|
||||
|
||||
### 1. 类型定义
|
||||
- `src/types/aiconfig.ts` - AI配置相关的TypeScript类型定义
|
||||
- AiConfig接口
|
||||
- 请求/响应类型
|
||||
- 选项常量定义
|
||||
|
||||
### 2. API调用
|
||||
- `src/api/aiconfig.ts` - AI配置相关的API调用函数
|
||||
- 基础CRUD操作
|
||||
- 条件查询
|
||||
- 状态管理
|
||||
- 统计功能
|
||||
|
||||
### 3. 页面组件
|
||||
- `src/views/aiconfig/AiConfigList.vue` - AI配置管理主页面
|
||||
- 分页列表展示
|
||||
- 搜索过滤
|
||||
- 新增/编辑对话框
|
||||
- 状态管理操作
|
||||
- 统计信息展示
|
||||
|
||||
### 4. 通用组件
|
||||
- `src/components/AiConfigQuickActions.vue` - AI配置快速操作组件
|
||||
- 统计信息展示
|
||||
- 快速操作入口
|
||||
|
||||
### 5. 路由配置
|
||||
- 更新了 `src/router/index.ts`,添加AI配置管理路由
|
||||
|
||||
### 6. 仪表板集成
|
||||
- 更新了 `src/views/Dashboard.vue`,集成AI配置统计信息
|
||||
|
||||
## 主要功能
|
||||
|
||||
### 1. 配置列表管理
|
||||
- **分页查询**: 支持分页显示配置列表
|
||||
- **多条件搜索**: 支持关键词、配置类型、服务提供商、使用场景、状态、环境等条件搜索
|
||||
- **排序功能**: 支持按不同字段排序
|
||||
- **统计信息**: 实时显示总数、启用数、禁用数、默认配置数
|
||||
|
||||
### 2. 配置CRUD操作
|
||||
- **新增配置**: 分标签页的详细配置表单
|
||||
- 基础配置:名称、类型、提供商、URL、Token等
|
||||
- 参数配置:超时、重试、Token限制、温度参数等
|
||||
- 费用配置:价格、限制等
|
||||
- 其他配置:状态、自定义参数等
|
||||
- **编辑配置**: 支持修改所有配置项
|
||||
- **查看详情**: 只读模式查看配置详情
|
||||
- **删除配置**: 确认删除操作
|
||||
|
||||
### 3. 状态管理
|
||||
- **启用/禁用**: 一键切换配置状态
|
||||
- **设置默认**: 设置/取消默认配置
|
||||
- **批量操作**: 支持批量状态管理
|
||||
|
||||
### 4. 数据展示优化
|
||||
- **标签化显示**: 配置类型、服务提供商、环境等使用不同颜色标签
|
||||
- **状态指示**: 清晰的状态标识
|
||||
- **脱敏处理**: API Token等敏感信息脱敏显示
|
||||
- **响应式布局**: 适配不同屏幕尺寸
|
||||
|
||||
### 5. 用户体验优化
|
||||
- **加载状态**: 操作过程中的加载提示
|
||||
- **错误处理**: 完善的错误提示和处理
|
||||
- **确认对话框**: 重要操作的二次确认
|
||||
- **表单验证**: 完整的表单验证规则
|
||||
- **快捷操作**: 表格行内快捷操作按钮
|
||||
|
||||
## 技术特点
|
||||
|
||||
### 1. 类型安全
|
||||
- 完整的TypeScript类型定义
|
||||
- 严格的类型检查
|
||||
- 良好的IDE支持
|
||||
|
||||
### 2. 组件化设计
|
||||
- 可复用的组件设计
|
||||
- 清晰的组件职责划分
|
||||
- 良好的组件通信
|
||||
|
||||
### 3. 响应式设计
|
||||
- 适配不同屏幕尺寸
|
||||
- 移动端友好
|
||||
- 灵活的布局系统
|
||||
|
||||
### 4. 性能优化
|
||||
- 按需加载
|
||||
- 合理的数据缓存
|
||||
- 优化的渲染性能
|
||||
|
||||
## 页面路由
|
||||
|
||||
- `/aiconfig/list` - AI配置列表页面
|
||||
- 在仪表板 `/dashboard` 中集成了AI配置统计信息
|
||||
|
||||
## 使用说明
|
||||
|
||||
### 1. 访问页面
|
||||
通过左侧导航菜单 "AI配置管理" -> "AI配置列表" 进入管理页面
|
||||
|
||||
### 2. 搜索配置
|
||||
- 使用顶部搜索表单进行条件筛选
|
||||
- 支持关键词模糊搜索
|
||||
- 支持多个条件组合搜索
|
||||
|
||||
### 3. 新增配置
|
||||
1. 点击 "新增配置" 按钮
|
||||
2. 填写基础配置信息(必填项)
|
||||
3. 根据需要配置参数、费用等信息
|
||||
4. 点击确定保存
|
||||
|
||||
### 4. 编辑配置
|
||||
1. 点击表格中的 "编辑" 按钮
|
||||
2. 修改需要更新的配置项
|
||||
3. 点击确定保存更改
|
||||
|
||||
### 5. 状态管理
|
||||
- 点击 "启用/禁用" 切换配置状态
|
||||
- 点击 "设为默认/取消默认" 管理默认配置
|
||||
- 删除操作需要二次确认
|
||||
|
||||
### 6. 查看统计
|
||||
- 页面顶部显示实时统计信息
|
||||
- 仪表板中显示概览统计
|
||||
- 支持手动刷新统计数据
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **权限控制**: 需要管理员权限才能访问
|
||||
2. **数据验证**: 表单提交前会进行完整验证
|
||||
3. **敏感信息**: API Token等敏感信息会脱敏显示
|
||||
4. **操作确认**: 删除等重要操作需要二次确认
|
||||
5. **错误处理**: 网络错误和业务错误都有相应提示
|
||||
|
||||
## 扩展功能
|
||||
|
||||
### 1. 导入导出
|
||||
- 支持配置的批量导入
|
||||
- 支持配置的导出备份
|
||||
|
||||
### 2. 配置模板
|
||||
- 预设常用配置模板
|
||||
- 快速创建配置
|
||||
|
||||
### 3. 配置测试
|
||||
- 在线测试配置可用性
|
||||
- 健康检查功能
|
||||
|
||||
### 4. 使用统计
|
||||
- 配置使用频率统计
|
||||
- 性能监控数据
|
||||
|
||||
这些扩展功能可以根据实际需求逐步实现。
|
||||
@@ -1,120 +0,0 @@
|
||||
# AI配置管理菜单测试说明
|
||||
|
||||
## 问题解决
|
||||
已成功解决AI配置管理菜单不显示的问题。
|
||||
|
||||
## 修改内容
|
||||
在 `web-admin/src/config/menu.ts` 文件中添加了AI配置管理的菜单项:
|
||||
|
||||
```typescript
|
||||
{
|
||||
path: '/aiconfig',
|
||||
title: 'AI配置管理',
|
||||
icon: 'Setting'
|
||||
}
|
||||
```
|
||||
|
||||
## 测试步骤
|
||||
|
||||
### 1. 启动开发服务器
|
||||
开发服务器已启动在: http://localhost:5176/
|
||||
|
||||
### 2. 访问管理后台
|
||||
1. 打开浏览器访问 http://localhost:5176/
|
||||
2. 使用管理员账号登录
|
||||
|
||||
### 3. 验证菜单显示
|
||||
在左侧菜单栏中应该能看到以下菜单项:
|
||||
- 仪表盘 (DataLine图标)
|
||||
- 管理员管理 (User图标)
|
||||
- 用户管理 (UserFilled图标)
|
||||
- **AI配置管理 (Setting图标)** ← 新添加的菜单
|
||||
|
||||
### 4. 测试功能
|
||||
1. 点击"AI配置管理"菜单项
|
||||
2. 应该跳转到 `/aiconfig/list` 页面
|
||||
3. 页面应该显示AI配置管理界面,包括:
|
||||
- 搜索表单
|
||||
- 统计信息
|
||||
- 配置列表表格
|
||||
- 新增配置按钮
|
||||
|
||||
### 5. 测试仪表板集成
|
||||
1. 返回仪表盘页面 (`/`)
|
||||
2. 应该能看到AI配置的统计信息
|
||||
3. 右侧应该有AI配置快速操作组件
|
||||
|
||||
## 菜单配置说明
|
||||
|
||||
菜单配置位于 `web-admin/src/config/menu.ts` 文件中,采用以下结构:
|
||||
|
||||
```typescript
|
||||
export interface MenuItem {
|
||||
path: string // 路由路径
|
||||
title: string // 菜单标题
|
||||
icon?: string // 图标名称 (Element Plus图标)
|
||||
children?: MenuItem[] // 子菜单
|
||||
hidden?: boolean // 是否隐藏
|
||||
}
|
||||
```
|
||||
|
||||
## 路由配置
|
||||
|
||||
AI配置管理的路由已在 `web-admin/src/router/index.ts` 中配置:
|
||||
|
||||
```typescript
|
||||
{
|
||||
path: '/aiconfig',
|
||||
component: Layout,
|
||||
redirect: '/aiconfig/list',
|
||||
meta: { title: 'AI配置管理', icon: 'Setting' },
|
||||
children: [
|
||||
{
|
||||
path: 'list',
|
||||
name: 'AiConfigList',
|
||||
component: () => import('@/views/aiconfig/AiConfigList.vue'),
|
||||
meta: { title: 'AI配置列表' }
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **图标**: 使用的是Element Plus的内置图标 `Setting`
|
||||
2. **路由**: 菜单路径 `/aiconfig` 对应路由配置
|
||||
3. **权限**: 需要管理员登录权限才能访问
|
||||
4. **响应式**: 菜单支持折叠/展开功能
|
||||
|
||||
## 故障排除
|
||||
|
||||
如果菜单仍然不显示,请检查:
|
||||
|
||||
1. **缓存问题**: 清除浏览器缓存或硬刷新 (Ctrl+F5)
|
||||
2. **开发服务器**: 确保开发服务器正常运行
|
||||
3. **路由配置**: 确认路由配置正确
|
||||
4. **组件导入**: 确认组件文件存在且可正常导入
|
||||
|
||||
## 后续扩展
|
||||
|
||||
可以根据需要添加子菜单,例如:
|
||||
|
||||
```typescript
|
||||
{
|
||||
path: '/aiconfig',
|
||||
title: 'AI配置管理',
|
||||
icon: 'Setting',
|
||||
children: [
|
||||
{
|
||||
path: '/aiconfig/list',
|
||||
title: '配置列表',
|
||||
icon: 'List'
|
||||
},
|
||||
{
|
||||
path: '/aiconfig/template',
|
||||
title: '配置模板',
|
||||
icon: 'Document'
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
@@ -1,157 +0,0 @@
|
||||
# AI配置接口测试功能
|
||||
|
||||
## 功能概述
|
||||
在AI配置管理页面新增了接口测试功能,允许管理员直接在页面上测试AI配置的接口连通性和正确性。
|
||||
|
||||
## 新增功能
|
||||
|
||||
### 1. 测试按钮
|
||||
- 在AI配置列表的操作列中新增了"测试"按钮
|
||||
- 点击后打开接口测试对话框
|
||||
|
||||
### 2. 测试对话框
|
||||
测试对话框分为左右两个区域:
|
||||
|
||||
#### 左侧 - 请求配置区域
|
||||
- **请求URL**: 自动根据配置的API基础URL生成,默认为 `{apiBaseUrl}/v3/chat`
|
||||
- **请求头**: JSON格式的请求头,自动包含Authorization和Content-Type
|
||||
- **请求体**: JSON格式的请求体,基于Coze API标准格式生成
|
||||
|
||||
#### 右侧 - 响应结果区域
|
||||
- **状态码**: 显示HTTP响应状态码,带颜色标识
|
||||
- **响应头**: 显示服务器返回的响应头信息
|
||||
- **响应体**: 显示服务器返回的响应内容,自动格式化JSON
|
||||
|
||||
### 3. 操作按钮
|
||||
- **发送测试请求**: 发送HTTP请求到配置的API端点
|
||||
- **格式化请求**: 格式化请求头和请求体的JSON格式
|
||||
- **格式化响应**: 格式化响应体的JSON格式
|
||||
- **复制响应**: 将响应内容复制到剪贴板
|
||||
- **重置**: 重置测试数据到初始状态
|
||||
|
||||
## 技术实现
|
||||
|
||||
### 1. 请求构建
|
||||
基于AiChatServiceImpl中的实现,自动构建符合Coze API标准的请求:
|
||||
|
||||
```json
|
||||
{
|
||||
"bot_id": "配置的Bot ID",
|
||||
"workflow_id": "配置的Workflow ID (可选)",
|
||||
"user_id": "test_user_时间戳",
|
||||
"stream": false,
|
||||
"additional_messages": [
|
||||
{
|
||||
"role": "user",
|
||||
"content": "你好,这是一个测试消息,请回复确认接口正常工作。",
|
||||
"content_type": "text",
|
||||
"type": "question"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### 2. 请求头处理
|
||||
- 自动添加Authorization Bearer Token
|
||||
- 自动添加Content-Type: application/json
|
||||
- 支持合并自定义请求头
|
||||
|
||||
### 3. 响应处理
|
||||
- 显示完整的HTTP状态码
|
||||
- 显示所有响应头信息
|
||||
- 自动格式化JSON响应体
|
||||
- 支持非JSON响应的显示
|
||||
|
||||
### 4. 错误处理
|
||||
- 网络错误处理
|
||||
- JSON格式错误提示
|
||||
- HTTP错误状态码提示
|
||||
|
||||
## 使用方法
|
||||
|
||||
### 1. 打开测试对话框
|
||||
1. 在AI配置列表中找到要测试的配置
|
||||
2. 点击操作列中的"测试"按钮
|
||||
3. 测试对话框自动打开并填充默认数据
|
||||
|
||||
### 2. 自定义测试参数
|
||||
- 可以修改请求头添加额外的头信息
|
||||
- 可以修改请求体中的消息内容
|
||||
- 可以调整其他API参数
|
||||
|
||||
### 3. 发送测试请求
|
||||
1. 点击"发送测试请求"按钮
|
||||
2. 等待请求完成(显示加载状态)
|
||||
3. 查看右侧的响应结果
|
||||
|
||||
### 4. 分析测试结果
|
||||
- **状态码 200**: 请求成功,配置正常
|
||||
- **状态码 401**: 认证失败,检查API Token
|
||||
- **状态码 400**: 请求参数错误,检查Bot ID等配置
|
||||
- **状态码 500**: 服务器错误,联系API提供商
|
||||
|
||||
## 支持的配置类型
|
||||
|
||||
### 1. Coze配置
|
||||
- 完全支持Coze API的测试
|
||||
- 自动构建符合Coze标准的请求格式
|
||||
- 支持Bot ID和Workflow ID
|
||||
|
||||
### 2. 其他配置类型
|
||||
- 基础的HTTP请求测试
|
||||
- 可以通过修改请求体适配不同的API格式
|
||||
|
||||
## 安全考虑
|
||||
|
||||
### 1. Token脱敏
|
||||
- 在请求头显示中,Token会部分脱敏显示
|
||||
- 实际请求使用完整的Token
|
||||
|
||||
### 2. 跨域处理
|
||||
- 使用浏览器原生fetch API
|
||||
- 可能受到CORS策略限制
|
||||
- 建议在开发环境或配置了CORS的环境中使用
|
||||
|
||||
### 3. 数据隔离
|
||||
- 测试数据不会影响生产数据
|
||||
- 使用独立的测试用户ID
|
||||
|
||||
## 故障排除
|
||||
|
||||
### 1. 网络错误
|
||||
- 检查API URL是否正确
|
||||
- 检查网络连接
|
||||
- 检查防火墙设置
|
||||
|
||||
### 2. 认证错误
|
||||
- 检查API Token是否正确
|
||||
- 检查Token是否过期
|
||||
- 检查Token权限
|
||||
|
||||
### 3. 参数错误
|
||||
- 检查Bot ID是否正确
|
||||
- 检查Workflow ID是否存在
|
||||
- 检查请求体格式
|
||||
|
||||
### 4. CORS错误
|
||||
- 在开发环境中测试
|
||||
- 或使用支持CORS的代理服务器
|
||||
|
||||
## 后续扩展
|
||||
|
||||
### 1. 批量测试
|
||||
- 支持批量测试多个配置
|
||||
- 生成测试报告
|
||||
|
||||
### 2. 测试历史
|
||||
- 保存测试历史记录
|
||||
- 支持测试结果对比
|
||||
|
||||
### 3. 自动化测试
|
||||
- 定时自动测试配置可用性
|
||||
- 异常告警通知
|
||||
|
||||
### 4. 更多API支持
|
||||
- 支持OpenAI API测试
|
||||
- 支持Claude API测试
|
||||
- 支持其他AI服务商API测试
|
||||
@@ -1074,7 +1074,7 @@ const initTestData = (config: AiConfig) => {
|
||||
|
||||
testRequest.headers = JSON.stringify(headers, null, 2)
|
||||
|
||||
// 构建请求体 - 基于Coze API格式
|
||||
// 构建请求体 - 完全按照AiChatServiceImpl.buildCozeRequest的格式
|
||||
const requestBody: any = {
|
||||
bot_id: config.botId || '',
|
||||
user_id: 'test_user_' + Date.now(),
|
||||
@@ -1086,11 +1086,12 @@ const initTestData = (config: AiConfig) => {
|
||||
content_type: 'text',
|
||||
type: 'question'
|
||||
}
|
||||
]
|
||||
],
|
||||
parameters: {}
|
||||
}
|
||||
|
||||
// 如果有workflow_id,添加到请求体
|
||||
if (config.workflowId) {
|
||||
if (config.workflowId && config.workflowId.trim()) {
|
||||
requestBody.workflow_id = config.workflowId
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user