mirror of
https://github.com/2930134478/AI-CS.git
synced 2026-06-15 00:44:30 +08:00
55 lines
1.7 KiB
Go
55 lines
1.7 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
|
|
"github.com/2930134478/AI-CS/backend/service/embedding"
|
|
)
|
|
|
|
// ConfigBackedEmbeddingProvider 基于 DB 配置的嵌入服务提供者,每次 Get 从配置读取,保存即生效
|
|
type ConfigBackedEmbeddingProvider struct {
|
|
configService *EmbeddingConfigService
|
|
factory *embedding.EmbeddingFactory
|
|
}
|
|
|
|
// NewConfigBackedEmbeddingProvider 创建基于 DB 配置的嵌入服务提供者
|
|
func NewConfigBackedEmbeddingProvider(configService *EmbeddingConfigService, factory *embedding.EmbeddingFactory) *ConfigBackedEmbeddingProvider {
|
|
return &ConfigBackedEmbeddingProvider{
|
|
configService: configService,
|
|
factory: factory,
|
|
}
|
|
}
|
|
|
|
// Get 返回当前配置对应的嵌入服务(每次从 DB 读取,无缓存)
|
|
func (p *ConfigBackedEmbeddingProvider) Get(ctx context.Context) (embedding.EmbeddingService, error) {
|
|
typ, apiURL, apiKey, model, err := p.configService.GetRaw()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if apiKey != "" {
|
|
switch typ {
|
|
case "openai", "api":
|
|
return embedding.NewOpenAIEmbeddingService(apiURL, apiKey, model), nil
|
|
case "local", "bge":
|
|
return embedding.NewBGEEmbeddingService(apiURL, apiKey, model), nil
|
|
default:
|
|
svc, createErr := p.factory.CreateEmbeddingService(typ)
|
|
if createErr != nil {
|
|
log.Printf("⚠️ 从 DB 创建嵌入服务失败 (%s),回退到环境变量: %v", typ, createErr)
|
|
return p.fallbackFromEnv()
|
|
}
|
|
return svc, nil
|
|
}
|
|
}
|
|
return p.fallbackFromEnv()
|
|
}
|
|
|
|
func (p *ConfigBackedEmbeddingProvider) fallbackFromEnv() (embedding.EmbeddingService, error) {
|
|
svc, err := p.factory.CreateDefaultEmbeddingService()
|
|
if err != nil {
|
|
return embedding.NewUnconfiguredEmbeddingService(), nil
|
|
}
|
|
return svc, nil
|
|
}
|