149 lines
3.6 KiB
Markdown
149 lines
3.6 KiB
Markdown
![]() |
# AI模型字典API调试指南
|
|||
|
|
|||
|
## 问题描述
|
|||
|
|
|||
|
在调用AI模型字典API时遇到错误:
|
|||
|
```
|
|||
|
Sign签名校验失败,时间戳为空!
|
|||
|
```
|
|||
|
|
|||
|
## 已实施的修复措施
|
|||
|
|
|||
|
### 1. **添加时间戳参数到URL**
|
|||
|
```typescript
|
|||
|
// 修改前
|
|||
|
return request.get('/sys/dict/getDictItems/airag_model%20where%20model_type%20=%20\'LLM\',name,id')
|
|||
|
|
|||
|
// 修改后
|
|||
|
const timestamp = Date.now()
|
|||
|
return request.get(`/sys/dict/getDictItems/airag_model%20where%20model_type%20=%20'LLM',name,id?_t=${timestamp}`)
|
|||
|
```
|
|||
|
|
|||
|
### 2. **增强请求头时间戳**
|
|||
|
```typescript
|
|||
|
// 添加多种时间戳格式
|
|||
|
const timestamp = Date.now().toString()
|
|||
|
config.headers['X-Request-Time'] = timestamp
|
|||
|
config.headers['timestamp'] = timestamp
|
|||
|
config.headers['X-Timestamp'] = timestamp
|
|||
|
```
|
|||
|
|
|||
|
### 3. **增强错误调试**
|
|||
|
- 在AiAppSetting.vue中添加详细的调试日志
|
|||
|
- 在AiModelTest.vue中添加直接请求测试功能
|
|||
|
- 显示完整的错误信息和响应数据
|
|||
|
|
|||
|
## 测试步骤
|
|||
|
|
|||
|
### 1. 访问测试页面
|
|||
|
```
|
|||
|
http://localhost:5173/ai-model-test
|
|||
|
```
|
|||
|
|
|||
|
### 2. 检查登录状态
|
|||
|
- 确保用户已登录并有有效的token
|
|||
|
- 在测试页面中查看"用户Token"状态
|
|||
|
|
|||
|
### 3. 测试API调用
|
|||
|
1. 点击"加载AI模型列表"按钮(使用封装的API)
|
|||
|
2. 点击"直接请求测试"按钮(使用原生axios)
|
|||
|
3. 查看控制台日志和响应数据
|
|||
|
|
|||
|
### 4. 检查AI应用设置
|
|||
|
1. 访问 `/ai/app` 页面
|
|||
|
2. 点击任意AI应用卡片
|
|||
|
3. 切换到"模型配置"选项卡
|
|||
|
4. 查看控制台日志
|
|||
|
|
|||
|
## 调试信息
|
|||
|
|
|||
|
### 请求信息
|
|||
|
- **URL**: `/sys/dict/getDictItems/airag_model%20where%20model_type%20=%20'LLM',name,id?_t={timestamp}`
|
|||
|
- **方法**: GET
|
|||
|
- **Base URL**: `/jeecgboot` (或环境变量配置)
|
|||
|
|
|||
|
### 请求头
|
|||
|
```javascript
|
|||
|
{
|
|||
|
'Content-Type': 'application/json',
|
|||
|
'X-Access-Token': '{user_token}',
|
|||
|
'X-Request-Time': '{timestamp}',
|
|||
|
'timestamp': '{timestamp}',
|
|||
|
'X-Timestamp': '{timestamp}'
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### 预期响应格式
|
|||
|
```json
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"message": "",
|
|||
|
"code": 0,
|
|||
|
"result": [
|
|||
|
{
|
|||
|
"value": "1890232564262739969",
|
|||
|
"text": "OpenAI",
|
|||
|
"color": null,
|
|||
|
"jsonObject": null,
|
|||
|
"label": "OpenAI",
|
|||
|
"title": "OpenAI"
|
|||
|
}
|
|||
|
],
|
|||
|
"timestamp": 1759136645858
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
## 可能的解决方案
|
|||
|
|
|||
|
### 1. **检查后端签名算法**
|
|||
|
如果问题仍然存在,可能需要:
|
|||
|
- 检查后端期望的签名算法
|
|||
|
- 添加必要的签名参数
|
|||
|
- 确认时间戳格式要求
|
|||
|
|
|||
|
### 2. **检查接口权限**
|
|||
|
- 确认该接口是否需要特定的用户权限
|
|||
|
- 检查token是否有效
|
|||
|
- 验证用户角色权限
|
|||
|
|
|||
|
### 3. **检查接口路径**
|
|||
|
- 确认接口路径是否正确
|
|||
|
- 检查URL编码是否正确
|
|||
|
- 验证查询参数格式
|
|||
|
|
|||
|
## 备用方案
|
|||
|
|
|||
|
如果API调用仍然失败,系统会自动使用备用数据:
|
|||
|
```typescript
|
|||
|
modelOptions.value = [
|
|||
|
{ label: 'GPT-3.5 Turbo', value: 'gpt-3.5-turbo' },
|
|||
|
{ label: 'GPT-4', value: 'gpt-4' },
|
|||
|
{ label: 'Claude-3', value: 'claude-3' }
|
|||
|
]
|
|||
|
```
|
|||
|
|
|||
|
## 下一步调试
|
|||
|
|
|||
|
1. **查看网络请求**
|
|||
|
- 打开浏览器开发者工具
|
|||
|
- 查看Network选项卡
|
|||
|
- 检查实际发送的请求和响应
|
|||
|
|
|||
|
2. **检查后端日志**
|
|||
|
- 查看后端服务器日志
|
|||
|
- 确认请求是否到达后端
|
|||
|
- 检查签名验证逻辑
|
|||
|
|
|||
|
3. **联系后端开发**
|
|||
|
- 确认接口的正确调用方式
|
|||
|
- 获取签名算法详细信息
|
|||
|
- 确认必需的请求参数
|
|||
|
|
|||
|
## 文件修改记录
|
|||
|
|
|||
|
- `src/api/modules/system.ts`: 添加字典API和时间戳参数
|
|||
|
- `src/api/request.ts`: 增强时间戳请求头
|
|||
|
- `src/views/Ai/component/AiAppSetting.vue`: 添加详细调试日志
|
|||
|
- `src/views/AiModelTest.vue`: 创建专门的测试页面
|
|||
|
- `src/router/index.ts`: 添加测试页面路由
|