feat: 平台管理 - 模型提供商连接测试功能

- 前端:添加"测试连接"按钮,支持实时测试 provider 可用性
- 后端:新增 TestProvider 接口,发送测试请求验证配置
- 路由:注册 POST /providers/{id}/test 端点
- 初始化:LLM Manager 优先从数据库加载 providers,失败时回退到环境变量
- .gitignore:忽略构建产物 server/bin/、server-* 和 test-* 目录
This commit is contained in:
selfrelease
2026-06-22 18:05:19 +08:00
parent fe2c6fb2e4
commit 0c1a8544e8
4 changed files with 175 additions and 40 deletions
+16 -8
View File
@@ -1,6 +1,7 @@
package main
import (
"context"
"net/http"
"time"
@@ -42,14 +43,20 @@ func newRouter(cfg *config.Config, pool *pgxpool.Pool, rdb *redis.Client) http.H
// LLM Manager — direct model calls replacing Dify for chat
llmMgr := llm.NewManager()
if cfg.LLM.OpenAIKey != "" {
llmMgr.Register("openai", llm.NewOpenAIProvider(cfg.LLM.OpenAIKey, cfg.LLM.OpenAIBaseURL, cfg.LLM.OpenAIModel))
}
if cfg.LLM.AnthropicKey != "" {
llmMgr.Register("anthropic", llm.NewAnthropicProvider(cfg.LLM.AnthropicKey, cfg.LLM.AnthropicBaseURL, cfg.LLM.AnthropicModel))
}
if cfg.LLM.Provider != "" {
llmMgr.SetFallback(cfg.LLM.Provider)
llmMgr.SetPool(pool)
// 优先从数据库加载 providers(如果失败,回退到环境变量配置)
if err := llmMgr.LoadProvidersFromDB(context.Background()); err != nil {
// 回退:使用环境变量配置
if cfg.LLM.OpenAIKey != "" {
llmMgr.Register("openai", llm.NewOpenAIProvider(cfg.LLM.OpenAIKey, cfg.LLM.OpenAIBaseURL, cfg.LLM.OpenAIModel))
}
if cfg.LLM.AnthropicKey != "" {
llmMgr.Register("anthropic", llm.NewAnthropicProvider(cfg.LLM.AnthropicKey, cfg.LLM.AnthropicBaseURL, cfg.LLM.AnthropicModel))
}
if cfg.LLM.Provider != "" {
llmMgr.SetFallback(cfg.LLM.Provider)
}
}
// Embedding client(向量化服务,支持 DashScope / OpenAI 兼容 API
@@ -229,6 +236,7 @@ func newRouter(cfg *config.Config, pool *pgxpool.Pool, rdb *redis.Client) http.H
// 模型提供商
r.Get("/providers", platformH.ListProviders)
r.Post("/providers", platformH.CreateProvider)
r.Post("/providers/{id}/test", platformH.TestProvider)
r.Put("/providers/{id}", platformH.UpdateProvider)
r.Delete("/providers/{id}", platformH.DeleteProvider)