feat: 完成统一 AI 查询组件的集成
- 更新 argon_detect_spam_comment_sync() 使用统一接口 - 更新 argon_extract_keywords_from_comment() 使用统一接口 - 删除旧的 argon_call_ai_api_for_spam_detection() 函数 - 删除旧的 argon_call_ai_for_keyword_extraction() 函数 - 所有 AI 查询现在都通过 argon_ai_query() 统一接口 - 所有查询都会记录到 wp_argon_ai_query_log 数据表 - 支持按场景统计(summary/spam_detection/keyword_extraction)
This commit is contained in:
136
.kiro/steering/multi-api-management.md
Normal file
136
.kiro/steering/multi-api-management.md
Normal file
@@ -0,0 +1,136 @@
|
||||
# 多 API 管理功能设计
|
||||
|
||||
## 功能概述
|
||||
|
||||
为每个 AI 服务商支持配置多个 API,用户可以:
|
||||
- 为同一服务商添加多个 API 配置(不同的 Key、端点、模型)
|
||||
- 选择其中一个作为当前使用的 API
|
||||
- 方便实现负载均衡、备用切换、不同场景使用不同配置等需求
|
||||
|
||||
## 数据结构
|
||||
|
||||
### 配置存储格式
|
||||
```php
|
||||
// 存储在 WordPress options 中
|
||||
// 键名:argon_ai_{provider}_apis
|
||||
// 值:JSON 数组
|
||||
[
|
||||
{
|
||||
"id": "api_1",
|
||||
"name": "主 API",
|
||||
"api_key": "sk-xxx",
|
||||
"api_endpoint": "",
|
||||
"model": "gpt-4o-mini",
|
||||
"is_active": true
|
||||
},
|
||||
{
|
||||
"id": "api_2",
|
||||
"name": "备用 API",
|
||||
"api_key": "sk-yyy",
|
||||
"api_endpoint": "https://api.custom.com/v1/chat/completions",
|
||||
"model": "gpt-4o",
|
||||
"is_active": false
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
### 当前使用的 API ID
|
||||
```php
|
||||
// 键名:argon_ai_{provider}_active_api
|
||||
// 值:字符串,API 的 ID
|
||||
"api_1"
|
||||
```
|
||||
|
||||
## 界面设计
|
||||
|
||||
### 设置页布局
|
||||
```
|
||||
AI 服务商: [OpenAI ▼]
|
||||
|
||||
┌─ OpenAI 配置 ─────────────────────────────┐
|
||||
│ │
|
||||
│ 已配置的 API: │
|
||||
│ ○ 主 API (gpt-4o-mini) [编辑] [删除]│
|
||||
│ ● 备用 API (gpt-4o) [编辑] [删除]│
|
||||
│ │
|
||||
│ [+ 添加新 API 配置] │
|
||||
│ │
|
||||
└────────────────────────────────────────────┘
|
||||
|
||||
添加/编辑 API 配置:
|
||||
┌────────────────────────────────────────────┐
|
||||
│ 配置名称: [主 API_______________] │
|
||||
│ API 密钥: [sk-xxx______________] [显示] │
|
||||
│ API 端点: [___________________] (可选) │
|
||||
│ 模型: [gpt-4o-mini_________] [刷新] │
|
||||
│ │
|
||||
│ [保存] [取消] │
|
||||
└────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## 实现步骤
|
||||
|
||||
### 1. 数据层
|
||||
- `argon_get_provider_apis($provider)` - 获取提供商的所有 API 配置
|
||||
- `argon_get_active_api($provider)` - 获取当前使用的 API 配置
|
||||
- `argon_add_provider_api($provider, $config)` - 添加 API 配置
|
||||
- `argon_update_provider_api($provider, $api_id, $config)` - 更新 API 配置
|
||||
- `argon_delete_provider_api($provider, $api_id)` - 删除 API 配置
|
||||
- `argon_set_active_api($provider, $api_id)` - 设置当前使用的 API
|
||||
|
||||
### 2. 界面层
|
||||
- 为每个提供商显示 API 列表
|
||||
- 添加/编辑表单(可折叠)
|
||||
- 单选框选择当前使用的 API
|
||||
- AJAX 操作(添加、编辑、删除、切换)
|
||||
|
||||
### 3. 调用层
|
||||
- 更新 `argon_get_ai_provider_config()` 函数
|
||||
- 从多个 API 中获取当前激活的配置
|
||||
- 保持向后兼容(如果没有配置多 API,使用原有逻辑)
|
||||
|
||||
## 使用场景
|
||||
|
||||
### 场景 1:负载均衡
|
||||
- 配置多个 OpenAI API Key
|
||||
- 手动或自动切换使用不同的 Key
|
||||
- 避免单个 Key 达到速率限制
|
||||
|
||||
### 场景 2:备用切换
|
||||
- 主 API 配置官方端点
|
||||
- 备用 API 配置代理端点
|
||||
- 主 API 失败时手动切换到备用
|
||||
|
||||
### 场景 3:不同场景使用不同配置
|
||||
- API 1:使用 gpt-4o-mini(快速、便宜)用于评论检测
|
||||
- API 2:使用 gpt-4o(准确、贵)用于文章摘要
|
||||
- 根据使用场景选择不同的 API
|
||||
|
||||
### 场景 4:测试与生产分离
|
||||
- API 1:测试环境配置
|
||||
- API 2:生产环境配置
|
||||
- 方便切换测试
|
||||
|
||||
## 向后兼容
|
||||
|
||||
如果用户已有旧配置(单 API 模式):
|
||||
1. 自动迁移到新格式
|
||||
2. 创建一个名为"默认配置"的 API
|
||||
3. 设置为当前使用
|
||||
|
||||
## 未来扩展
|
||||
|
||||
### 自动切换(可选)
|
||||
- 检测 API 调用失败
|
||||
- 自动切换到下一个可用的 API
|
||||
- 记录切换日志
|
||||
|
||||
### 负载均衡(可选)
|
||||
- 轮询模式:依次使用不同的 API
|
||||
- 随机模式:随机选择一个 API
|
||||
- 权重模式:根据权重分配使用频率
|
||||
|
||||
### 健康检查(可选)
|
||||
- 定期检测 API 可用性
|
||||
- 标记不可用的 API
|
||||
- 自动禁用失败的 API
|
||||
219
.kiro/steering/multi-api-testing-guide.md
Normal file
219
.kiro/steering/multi-api-testing-guide.md
Normal file
@@ -0,0 +1,219 @@
|
||||
# 多 API 管理功能测试指南
|
||||
|
||||
## 测试环境
|
||||
|
||||
- WordPress 后台 → 外观 → Argon 主题选项 → 文章功能 → AI 文章摘要
|
||||
- 选择任意 AI 服务商(如 OpenAI)
|
||||
|
||||
## 功能特性
|
||||
|
||||
### 1. 多 API 配置管理
|
||||
- 每个 AI 服务商可以配置多个 API
|
||||
- 每个 API 配置包含:配置名称、API 密钥、API 端点(可选)、模型(可选)
|
||||
- 通过单选框选择当前使用的 API
|
||||
- 支持添加、编辑、删除 API 配置
|
||||
|
||||
### 2. 模型列表刷新
|
||||
- 每个 API 配置都可以独立刷新模型列表
|
||||
- 根据配置的 API 密钥和端点动态获取可用模型
|
||||
- 支持从模型列表中快速选择并应用
|
||||
|
||||
### 3. 向后兼容
|
||||
- 如果用户之前没有配置多 API,系统会自动从旧配置迁移
|
||||
- 创建一个名为"默认配置"的 API 并设置为激活状态
|
||||
|
||||
## 测试步骤
|
||||
|
||||
### 步骤 1:添加第一个 API 配置
|
||||
|
||||
**操作**:
|
||||
1. 选择 AI 服务商(如 OpenAI)
|
||||
2. 点击"添加新 API 配置"按钮
|
||||
3. 填写配置信息:
|
||||
- 配置名称:主 API
|
||||
- API 密钥:sk-test-key-1
|
||||
- API 端点:(留空或填写自定义端点)
|
||||
- 模型:(留空或填写模型名称)
|
||||
4. 点击"刷新"按钮测试获取模型列表
|
||||
5. 从模型列表中选择一个模型
|
||||
6. 点击"使用选中的模型"按钮
|
||||
7. 点击"保存"按钮
|
||||
|
||||
**预期结果**:
|
||||
- 表单隐藏
|
||||
- 显示新添加的 API 配置
|
||||
- 该 API 自动被选中(单选框勾选)
|
||||
- 显示配置名称、模型、密钥前缀
|
||||
|
||||
### 步骤 2:添加第二个 API 配置
|
||||
|
||||
**操作**:
|
||||
1. 再次点击"添加新 API 配置"按钮
|
||||
2. 填写配置信息:
|
||||
- 配置名称:备用 API
|
||||
- API 密钥:sk-test-key-2
|
||||
- API 端点:https://api.custom.com/v1/chat/completions
|
||||
- 模型:gpt-4o
|
||||
3. 点击"保存"按钮
|
||||
|
||||
**预期结果**:
|
||||
- 显示两个 API 配置
|
||||
- 第一个 API 仍然被选中
|
||||
- 第二个 API 未被选中
|
||||
|
||||
### 步骤 3:切换激活的 API
|
||||
|
||||
**操作**:
|
||||
1. 点击第二个 API 的单选框
|
||||
|
||||
**预期结果**:
|
||||
- 第二个 API 被选中
|
||||
- 第一个 API 取消选中
|
||||
|
||||
### 步骤 4:编辑 API 配置
|
||||
|
||||
**操作**:
|
||||
1. 点击第一个 API 的"编辑"按钮
|
||||
2. 修改配置名称为"主 API(已更新)"
|
||||
3. 点击"刷新"按钮重新获取模型列表
|
||||
4. 选择一个不同的模型
|
||||
5. 点击"保存"按钮
|
||||
|
||||
**预期结果**:
|
||||
- 表单隐藏
|
||||
- 第一个 API 的名称和模型更新
|
||||
- 激活状态保持不变(第二个 API 仍然被选中)
|
||||
|
||||
### 步骤 5:尝试删除激活的 API
|
||||
|
||||
**操作**:
|
||||
1. 点击第二个 API(当前激活)的"删除"按钮
|
||||
|
||||
**预期结果**:
|
||||
- 弹出错误提示:"无法删除当前正在使用的 API 配置,请先切换到其他 API"
|
||||
- API 未被删除
|
||||
|
||||
### 步骤 6:删除非激活的 API
|
||||
|
||||
**操作**:
|
||||
1. 点击第一个 API(未激活)的"删除"按钮
|
||||
2. 在确认对话框中点击"确定"
|
||||
|
||||
**预期结果**:
|
||||
- 第一个 API 被删除
|
||||
- 只剩下第二个 API
|
||||
- 第二个 API 仍然被选中
|
||||
|
||||
### 步骤 7:测试模型刷新功能
|
||||
|
||||
**操作**:
|
||||
1. 点击"添加新 API 配置"
|
||||
2. 填写 API 密钥
|
||||
3. 点击"刷新"按钮
|
||||
|
||||
**预期结果**:
|
||||
- 按钮显示加载状态(图标旋转)
|
||||
- 显示"加载中..."提示
|
||||
- 成功后显示可用模型列表
|
||||
- 可以选择模型并应用到输入框
|
||||
|
||||
### 步骤 8:保存设置
|
||||
|
||||
**操作**:
|
||||
1. 滚动到页面底部
|
||||
2. 点击"保存更改"按钮
|
||||
|
||||
**预期结果**:
|
||||
- 显示"设置已保存"提示
|
||||
- 刷新页面后,配置仍然存在
|
||||
- 激活的 API 保持选中状态
|
||||
|
||||
### 步骤 9:测试 AI 摘要生成
|
||||
|
||||
**操作**:
|
||||
1. 前往任意文章页面
|
||||
2. 查看是否显示 AI 摘要
|
||||
|
||||
**预期结果**:
|
||||
- 使用当前激活的 API 配置生成摘要
|
||||
- 摘要正常显示
|
||||
|
||||
## 边界情况测试
|
||||
|
||||
### 测试 1:空配置名称
|
||||
- 不填写配置名称,直接点击保存
|
||||
- 预期:弹出提示"请输入配置名称"
|
||||
|
||||
### 测试 2:空 API 密钥
|
||||
- 只填写配置名称,不填写 API 密钥
|
||||
- 预期:弹出提示"请输入 API 密钥"
|
||||
|
||||
### 测试 3:刷新模型时未填写密钥
|
||||
- 不填写 API 密钥,直接点击刷新
|
||||
- 预期:弹出提示"请先输入 API 密钥"
|
||||
|
||||
### 测试 4:删除最后一个 API
|
||||
- 当只剩一个 API 时,尝试删除
|
||||
- 预期:如果是激活的,无法删除;如果不是激活的,可以删除
|
||||
|
||||
### 测试 5:切换服务商
|
||||
- 切换到不同的 AI 服务商(如 DeepSeek)
|
||||
- 预期:显示该服务商的 API 配置列表
|
||||
|
||||
### 测试 6:向后兼容性测试
|
||||
- 如果之前有旧的单 API 配置
|
||||
- 预期:自动迁移为"默认配置"并设置为激活
|
||||
|
||||
## 功能验证清单
|
||||
|
||||
- [ ] 添加第一个 API 配置
|
||||
- [ ] 添加第二个 API 配置
|
||||
- [ ] 切换激活的 API
|
||||
- [ ] 编辑 API 配置
|
||||
- [ ] 尝试删除激活的 API(应失败)
|
||||
- [ ] 删除非激活的 API
|
||||
- [ ] 刷新模型列表
|
||||
- [ ] 从模型列表选择并应用模型
|
||||
- [ ] 保存设置并刷新页面
|
||||
- [ ] 验证数据持久化
|
||||
- [ ] 测试空配置名称
|
||||
- [ ] 测试空 API 密钥
|
||||
- [ ] 测试切换服务商
|
||||
- [ ] 测试 AI 摘要生成功能
|
||||
- [ ] 测试向后兼容性
|
||||
|
||||
## 已知问题
|
||||
|
||||
无
|
||||
|
||||
## 修复记录
|
||||
|
||||
### 2026-01-26
|
||||
- 修复删除功能:添加激活状态检查,防止删除当前使用的 API
|
||||
- 修复保存逻辑:编辑时正确保留激活状态
|
||||
- 优化体验:添加第一个 API 时自动设置为激活
|
||||
- 添加模型刷新功能:支持动态获取可用模型列表
|
||||
- 修复配置获取的错误处理:防止空配置导致 Fatal Error
|
||||
- 改进向后兼容性:自动迁移旧配置到新格式
|
||||
|
||||
## 使用场景
|
||||
|
||||
### 场景 1:负载均衡
|
||||
- 配置多个 OpenAI API Key
|
||||
- 手动切换使用不同的 Key
|
||||
- 避免单个 Key 达到速率限制
|
||||
|
||||
### 场景 2:备用切换
|
||||
- 主 API 配置官方端点
|
||||
- 备用 API 配置代理端点
|
||||
- 主 API 失败时手动切换到备用
|
||||
|
||||
### 场景 3:不同场景使用不同配置
|
||||
- API 1:使用 gpt-4o-mini(快速、便宜)
|
||||
- API 2:使用 gpt-4o(准确、贵)
|
||||
- 根据需求切换不同的 API
|
||||
|
||||
### 场景 4:测试与生产分离
|
||||
- API 1:测试环境配置
|
||||
- API 2:生产环境配置
|
||||
- 方便切换测试
|
||||
Reference in New Issue
Block a user