Coze接口配置及调用变更
This commit is contained in:
@@ -0,0 +1,234 @@
|
||||
# API Base URL 字段调整总结
|
||||
|
||||
## 修改概述
|
||||
|
||||
将 `AiConfig` 实体类中的 `apiBaseUrl` 字段从"基础URL"调整为"完整的API URL",不再需要在调用时拼接任何后缀。
|
||||
|
||||
## 修改内容
|
||||
|
||||
### 1. 实体类和DTO修改
|
||||
|
||||
#### 1.1 AiConfig.java
|
||||
- **文件路径**: `backend-single/src/main/java/com/emotion/entity/AiConfig.java`
|
||||
- **修改内容**: 更新 `apiBaseUrl` 字段注释
|
||||
- **修改前**: `API基础URL`
|
||||
- **修改后**: `API完整URL(包含完整的接口路径,不需要再拼接任何后缀)例如:https://api.coze.cn/v3/chat`
|
||||
|
||||
#### 1.2 AiConfigCreateRequest.java
|
||||
- **文件路径**: `backend-single/src/main/java/com/emotion/dto/request/aiconfig/AiConfigCreateRequest.java`
|
||||
- **修改内容**: 更新 `apiBaseUrl` 字段注释和验证消息
|
||||
- **修改前**: `API基础URL` / `API基础URL不能为空`
|
||||
- **修改后**: `API完整URL(包含完整的接口路径,不需要再拼接任何后缀)` / `API完整URL不能为空`
|
||||
|
||||
#### 1.3 AiConfigUpdateRequest.java
|
||||
- **文件路径**: `backend-single/src/main/java/com/emotion/dto/request/aiconfig/AiConfigUpdateRequest.java`
|
||||
- **修改内容**: 更新 `apiBaseUrl` 字段注释
|
||||
- **修改前**: `API基础URL`
|
||||
- **修改后**: `API完整URL(包含完整的接口路径,不需要再拼接任何后缀)`
|
||||
|
||||
#### 1.4 AiConfigResponse.java
|
||||
- **文件路径**: `backend-single/src/main/java/com/emotion/dto/response/aiconfig/AiConfigResponse.java`
|
||||
- **修改内容**: 更新 `apiBaseUrl` 字段注释
|
||||
- **修改前**: `API基础URL`
|
||||
- **修改后**: `API完整URL(包含完整的接口路径,不需要再拼接任何后缀)`
|
||||
|
||||
### 2. 后端服务层修改
|
||||
|
||||
#### 2.1 AiChatServiceImpl.java
|
||||
- **文件路径**: `backend-single/src/main/java/com/emotion/service/impl/AiChatServiceImpl.java`
|
||||
|
||||
##### 修改1: getApiPath方法
|
||||
```java
|
||||
// 修改前
|
||||
private String getApiPath(AiConfig config) {
|
||||
// 默认使用 /v3/chat 路径
|
||||
return "/v3/chat";
|
||||
}
|
||||
|
||||
// 修改后
|
||||
private String getApiPath(AiConfig config) {
|
||||
// apiBaseUrl已经是完整的URL,返回空字符串
|
||||
return "";
|
||||
}
|
||||
```
|
||||
|
||||
##### 修改2: 新增extractBaseUrl方法
|
||||
```java
|
||||
/**
|
||||
* 从apiBaseUrl中提取基础URL(用于状态查询和消息查询等辅助接口)
|
||||
* 例如:https://api.coze.cn/v3/chat -> https://api.coze.cn
|
||||
*/
|
||||
private String extractBaseUrl(String apiBaseUrl) {
|
||||
if (apiBaseUrl == null || apiBaseUrl.isEmpty()) {
|
||||
return "";
|
||||
}
|
||||
try {
|
||||
java.net.URL url = new java.net.URL(apiBaseUrl);
|
||||
return url.getProtocol() + "://" + url.getHost() + (url.getPort() > 0 ? ":" + url.getPort() : "");
|
||||
} catch (Exception e) {
|
||||
log.warn("解析apiBaseUrl失败: {}", apiBaseUrl, e);
|
||||
// 尝试简单截取
|
||||
int pathIndex = apiBaseUrl.indexOf("/", apiBaseUrl.indexOf("://") + 3);
|
||||
if (pathIndex > 0) {
|
||||
return apiBaseUrl.substring(0, pathIndex);
|
||||
}
|
||||
return apiBaseUrl;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### 修改3: 状态查询URL构建
|
||||
```java
|
||||
// 修改前
|
||||
String statusUrl = config.getApiBaseUrl() + "/v3/chat/retrieve?chat_id=" + chatId + "&conversation_id=" + conversationId;
|
||||
|
||||
// 修改后
|
||||
String baseUrl = extractBaseUrl(config.getApiBaseUrl());
|
||||
String statusUrl = baseUrl + "/v3/chat/retrieve?chat_id=" + chatId + "&conversation_id=" + conversationId;
|
||||
```
|
||||
|
||||
##### 修改4: 消息查询URL构建
|
||||
```java
|
||||
// 修改前
|
||||
String messagesUrl = config.getApiBaseUrl() + "/v3/chat/message/list?chat_id=" + chatId + "&conversation_id=" + conversationId;
|
||||
|
||||
// 修改后
|
||||
String baseUrl = extractBaseUrl(config.getApiBaseUrl());
|
||||
String messagesUrl = baseUrl + "/v3/chat/message/list?chat_id=" + chatId + "&conversation_id=" + conversationId;
|
||||
```
|
||||
|
||||
### 3. 前端修改
|
||||
|
||||
#### 3.1 web-admin/src/views/aiconfig/AiConfigList.vue
|
||||
|
||||
##### 修改1: 表单字段标签和提示
|
||||
```vue
|
||||
<!-- 修改前 -->
|
||||
<el-form-item label="API基础URL" prop="apiBaseUrl">
|
||||
<el-input v-model="formData.apiBaseUrl" placeholder="请输入API基础URL" />
|
||||
</el-form-item>
|
||||
|
||||
<!-- 修改后 -->
|
||||
<el-form-item label="API完整URL" prop="apiBaseUrl">
|
||||
<el-input v-model="formData.apiBaseUrl" placeholder="请输入完整的API URL,如:https://api.coze.cn/v3/chat" />
|
||||
</el-form-item>
|
||||
```
|
||||
|
||||
##### 修改2: 详情展示标签
|
||||
```vue
|
||||
<!-- 修改前 -->
|
||||
<el-descriptions-item label="API基础URL">{{ viewData.apiBaseUrl }}</el-descriptions-item>
|
||||
|
||||
<!-- 修改后 -->
|
||||
<el-descriptions-item label="API完整URL">{{ viewData.apiBaseUrl }}</el-descriptions-item>
|
||||
```
|
||||
|
||||
##### 修改3: 表单验证规则
|
||||
```javascript
|
||||
// 修改前
|
||||
apiBaseUrl: [{ required: true, message: '请输入API基础URL', trigger: 'blur' }]
|
||||
|
||||
// 修改后
|
||||
apiBaseUrl: [{ required: true, message: '请输入完整的API URL', trigger: 'blur' }]
|
||||
```
|
||||
|
||||
##### 修改4: 测试功能URL构建
|
||||
```javascript
|
||||
// 修改前
|
||||
const initTestData = (config: AiConfig) => {
|
||||
testRequest.url = config.apiBaseUrl + '/v3/chat'
|
||||
// ...
|
||||
}
|
||||
|
||||
// 修改后
|
||||
const initTestData = (config: AiConfig) => {
|
||||
// apiBaseUrl已经是完整的API URL,直接使用
|
||||
testRequest.url = config.apiBaseUrl
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
### 4. 单元测试
|
||||
|
||||
#### 4.1 AiChatServiceImplTest.java
|
||||
- **文件路径**: `backend-single/src/test/java/com/emotion/service/AiChatServiceImplTest.java`
|
||||
- **测试内容**:
|
||||
1. `testGetApiPath`: 测试getApiPath方法返回空字符串
|
||||
2. `testExtractBaseUrl`: 测试extractBaseUrl方法提取基础URL
|
||||
3. `testApiUrlConstruction`: 测试完整API URL的构建逻辑
|
||||
4. `testStatusQueryUrlConstruction`: 测试状态查询URL的构建逻辑
|
||||
5. `testMessageQueryUrlConstruction`: 测试消息查询URL的构建逻辑
|
||||
6. `testDifferentApiBaseUrlFormats`: 测试不同格式的apiBaseUrl
|
||||
7. `testEdgeCases`: 测试边界情况
|
||||
|
||||
**测试结果**: ✅ 所有7个测试用例全部通过
|
||||
|
||||
## 影响范围
|
||||
|
||||
### 后端影响
|
||||
1. **AiConfig实体类**: 字段语义变更,但数据库字段名不变
|
||||
2. **AiChatServiceImpl**: API调用逻辑调整,不再拼接路径
|
||||
3. **DTO类**: 注释和验证消息更新
|
||||
|
||||
### 前端影响
|
||||
1. **web-admin AI配置管理页面**:
|
||||
- 表单标签和提示文本更新
|
||||
- 测试功能URL构建逻辑调整
|
||||
- 用户需要输入完整的API URL
|
||||
|
||||
### 数据库影响
|
||||
- **无需修改数据库**: 字段名 `api_base_url` 保持不变
|
||||
- **数据迁移**: 需要将现有数据从基础URL更新为完整URL
|
||||
- 例如: `https://api.coze.cn` → `https://api.coze.cn/v3/chat`
|
||||
|
||||
## 使用示例
|
||||
|
||||
### 修改前
|
||||
```java
|
||||
AiConfig config = new AiConfig();
|
||||
config.setApiBaseUrl("https://api.coze.cn"); // 基础URL
|
||||
// 调用时拼接: config.getApiBaseUrl() + "/v3/chat"
|
||||
```
|
||||
|
||||
### 修改后
|
||||
```java
|
||||
AiConfig config = new AiConfig();
|
||||
config.setApiBaseUrl("https://api.coze.cn/v3/chat"); // 完整URL
|
||||
// 调用时直接使用: config.getApiBaseUrl()
|
||||
```
|
||||
|
||||
## 测试验证
|
||||
|
||||
### 后端测试
|
||||
```bash
|
||||
cd backend-single
|
||||
mvn test -Dtest=AiChatServiceImplTest
|
||||
```
|
||||
|
||||
**测试结果**:
|
||||
- Tests run: 7
|
||||
- Failures: 0
|
||||
- Errors: 0
|
||||
- Skipped: 0
|
||||
- ✅ 全部通过
|
||||
|
||||
### 前端测试
|
||||
1. 启动 web-admin 前端项目
|
||||
2. 进入 AI配置管理页面
|
||||
3. 点击"新增配置"或"编辑"按钮
|
||||
4. 在"API完整URL"字段输入完整的API地址(如:`https://api.coze.cn/v3/chat`)
|
||||
5. 保存配置
|
||||
6. 点击"测试"按钮,验证接口调用是否成功
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **数据迁移**: 现有的AI配置数据需要更新,将基础URL改为完整URL
|
||||
2. **向后兼容**: 如果有其他服务依赖旧的URL格式,需要同步更新
|
||||
3. **文档更新**: 需要更新相关的API文档和使用说明
|
||||
4. **配置示例**: 需要更新配置示例,明确说明应该填写完整的API URL
|
||||
|
||||
## 完成时间
|
||||
2025-12-22
|
||||
|
||||
## 修改人员
|
||||
System
|
||||
Reference in New Issue
Block a user