---
author: 华钟民
created_at: 2026-05-23
purpose: 修复 AI 配置管理接口测试功能，确保 Dify/Coze 等多提供商在 web-admin 后台能正常测试，全局确认前后端调用链路一致
---

# AI 配置管理接口测试修复设计

## 1. 问题背景

在 web-admin 后台的"AI 配置管理"页面，流式测试 Dify 接口时报错：
`"message":"user_id is required in input form"`。

根因是存在两套 AI 配置系统：
- **旧系统**：`t_ai_config` 表 + `AiConfigList.vue`（已被路由废弃但文件残留）
- **新系统**：`t_ai_provider` / `t_ai_endpoint_config` / `t_ai_scene_binding` 三表 + `AiRoutingList.vue`（路由当前指向的页面）

## 2. 当前状态确认

### 前端调用链路（全部走新系统）

| 项目 | 调用方式 | 目标接口 | 状态 |
|------|---------|---------|------|
| web | `streamAiScene()` → `fetch('/ai/runtime/stream')` | AiRuntimeService.invokeStream() | ✅ |
| web-admin | `streamAiRuntime()` → `fetch('/ai/runtime/stream')` | AiRoutingController.runtimeStream() | ✅ |
| life-script | `streamAiScene()` → `fetch('/ai/runtime/stream')` | AiRuntimeService.invokeStream() | ✅ |
| mini-program | `streamAiScene()` → `uni.request('/ai/runtime/stream')` | AiRuntimeService.invokeStream() | ✅ |

### 后端服务调用链路（全部走新系统）

| 服务 | 调用方式 | 目标方法 | 状态 |
|------|---------|---------|------|
| AiChatServiceImpl | `aiRuntimeService.test()` | AiRuntimeServiceImpl.test() | ✅ |
| WebSocketServiceImpl | `aiRuntimeService.invokeStream()` | AiRuntimeServiceImpl.invokeStream() | ✅ |
| EpicScriptServiceImpl | `aiRuntimeService.test()` | AiRuntimeServiceImpl.test() | ✅ |
| LifeEventServiceImpl | `aiRuntimeService.test()` | AiRuntimeServiceImpl.test() | ✅ |

### 数据库配置现状

`t_ai_provider` 已有 `dify_default`（`http://49.232.138.53/v1`，api_key=`app-MqQOx09gCu9zzlKMpeLqHQHv`），`t_ai_endpoint_config` 已迁移 Dify 对话接口。但场景绑定需注意：

- `chat` → Coze endpoint（旧系统遗留绑定）
- `script_generate` → **Dify endpoint** ✅
- `short_story_generate` → **Dify endpoint** ✅
- `diary_summary` → Coze endpoint
- `emotion_summary` → Coze endpoint
- `emotion_analysis` → Coze endpoint
- `life_healing` → Coze endpoint

**结论**：在 web-admin 测试 `script_generate` 和 `short_story_generate` 场景时，会走 Dify；其他场景走 Coze。这是预期行为。

## 3. 设计方案

### 3.1 删除旧系统残留

删除 `web-admin/src/views/aiconfig/AiConfigList.vue`。该文件路由已不再指向它，保留只会引起混淆。对应的后端 `/aiConfig/*` 接口保持不变（以防有遗留数据查询需求）。

### 3.2 新系统测试对话框增强

在 `AiRoutingList.vue` 的流式测试对话框（当前标题"流式调用测试"）中增加「非流式测试」按钮，并将对话框标题改为「接口测试」：

- 流式测试走 `/ai/runtime/stream` → `streamAiRuntime()`（已有）
- 非流式测试走 `/ai/runtime/test` → `testAiRuntime()`（已有接口，但当前未 import）
- 两个按钮共享 `testing` 加载状态，避免并发冲突
- 非流式和流式测试结果各自独立展示，互不干扰
- 打开对话框时同时清空两个结果

### 3.3 路由清理

路由配置 `/aiconfig/list` 已正确指向 `AiRoutingList.vue`，无需改动。

### 3.4 数据库配置检查

实施前需确认生产数据库中 Dify provider 和 Dify endpoints 处于 `is_enabled = 1` 状态。SQL 迁移脚本 `2026-05-22-ai-scene-routing.sql` 中已设置了 `is_enabled = 1`，但可能在实际部署时未执行。

## 4. 风险

- 删除 `AiConfigList.vue` 后如果用户需要查询旧 `t_ai_config` 数据，仍有后端 `/aiConfig/*` 接口可用
- 非流式测试新增不影响已有功能
- Dify provider 和 endpoint 需确保 `is_enabled = 1`，否则测试会返回 `AI_ENDPOINT_DISABLED` 或 `AI_PROVIDER_DISABLED`
