实现:
com.ruoyi.web.kb.controller.KbOpenAiProxyController(须若依 Token,非匿名)
| 编号 | 用例类 | 预期 |
|---|---|---|
| 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: |
mvn -pl baqing-admin test -Dtest=KbOpenAiProxyServiceImplTest,KbOpenAiProxyControllerApiTest
先 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 示例(模型列表)
curl -s -H "Authorization: Bearer {若依token}" http://localhost:8010/v1/models
| 编号 | 步骤 | 预期 |
|---|---|---|
| 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 改造 |
| 版本 | 日期 | 说明 |
|---|---|---|
| 1.0 | 2026-05-25 | 初版 |
| 1.1 | 2026-05-25 | 补充 IT/UT 编号 |
| 1.2 | 2026-05-25 | IT-004/005、FE 用例:须若依 Token,禁止匿名 |