| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- 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
- }
|