# 大模型网关转发测试用例 > 实现:`com.ruoyi.web.kb.controller.KbOpenAiProxyController`(**须若依 Token,非匿名**) --- ## 1. 单元测试(Service / Controller 逻辑) | 编号 | 用例类 | 预期 | | --- | --- | --- | | UT-KB-LLM-001 | `KbOpenAiProxyServiceImplTest.listModelsForwardsAuth` | GET 上游 `/v1/models`,Bearer 为 `ruoyi.kb.api-key` | | UT-KB-LLM-007 | `KbOpenAiProxyControllerApiTest.models` | MockMvc `GET /v1/models` 路由与响应(standalone 不测 Security) | | UT-KB-LLM-002 | `KbOpenAiProxyServiceImplTest.chatCompletionsForwardsBody` | POST 上游 `/v1/chat/completions` | | UT-KB-LLM-003 | `KbOpenAiProxyServiceImplTest.detectsStreamRequest` | 识别 `stream:true` | | UT-KB-LLM-004 | `KbOpenAiProxyServiceImplTest.rejectsWithoutApiKey` | 未配置服务端 api-key 抛异常 | | UT-KB-LLM-005 | `KbOpenAiProxyControllerApiTest.chatNonStream` | 非流式转发逻辑 | | UT-KB-LLM-006 | `KbOpenAiProxyControllerApiTest.chatStream` | 流式 SSE 写出 `data:` | ```bash mvn -pl baqing-admin test -Dtest=KbOpenAiProxyServiceImplTest,KbOpenAiProxyControllerApiTest ``` --- ## 2. 接口联调(须启动 8010 + 有效若依 Token) 先 `POST /login` 获取 `token`,后续请求: `Authorization: Bearer {token}` | 编号 | 步骤 | 预期 | | --- | --- | --- | | IT-KB-LLM-001 | `GET http://localhost:8010/v1/models` + Token | HTTP **200** | | IT-KB-LLM-002 | `POST .../v1/chat/completions`,`stream:false` + Token | JSON 含 `choices` | | IT-KB-LLM-003 | 同上 `stream:true` + Token | `text/event-stream` | | IT-KB-LLM-004 | 上述任一路径 **不带** Token | HTTP **401** | | IT-KB-LLM-005 | 仅带 `VUE_APP_LLM_API_KEY`、不带若依 Token | HTTP **401**(大模型 Key 不能代替登录态) | **curl 示例(模型列表)** ```bash curl -s -H "Authorization: Bearer {若依token}" http://localhost:8010/v1/models ``` --- ## 3. 前端回归(经 8010 转发) | 编号 | 步骤 | 预期 | | --- | --- | --- | | FE-KB-LLM-001 | 管理端已登录,`VUE_APP_LLM_BASE_URL` 指向 8010,对话请求 Header 为 **若依 Token** | 对话成功 | | FE-KB-LLM-002 | 同上但 Header 仍为 `VUE_APP_LLM_API_KEY` | **401**,需按 `doc/大模型/大模型网关转发接口说明.md` §6 改造 | --- ## 4. 修订记录 | 版本 | 日期 | 说明 | | --- | --- | --- | | 1.0 | 2026-05-25 | 初版 | | 1.1 | 2026-05-25 | 补充 IT/UT 编号 | | 1.2 | 2026-05-25 | **IT-004/005、FE 用例**:须若依 Token,禁止匿名 |