Files
smartmate/backend/services/rag/config/config.go
Losita 9902ca3563 Version: 0.9.65.dev.260503
后端:
1. 阶段 1.5/1.6
收口 llm-service / rag-service,统一模型出口与检索基础设施入口,清退 backend/infra/llm 与 backend/infra/rag 旧实现;
2. 同步更新相关调用链与微服务迁移计划文档
2026-05-03 23:21:03 +08:00

114 lines
3.1 KiB
Go

package config
import "github.com/spf13/viper"
// Config 是 RAG Core 运行配置。
type Config struct {
Enabled bool
Store string
TopK int
Threshold float64
EmbedProvider string
EmbedModel string
EmbedBaseURL string
EmbedTimeoutMS int
EmbedDimension int
RerankerEnabled bool
RerankerProvider string
RerankerTimeoutMS int
ChunkSize int
ChunkOverlap int
RetrieveTimeoutMS int
MilvusAddress string
MilvusToken string
MilvusDBName string
MilvusCollectionName string
MilvusMetricType string
MilvusRequestTimeoutMS int
}
// LoadFromViper 读取 rag 配置并补默认值。
func LoadFromViper() Config {
cfg := Config{
Enabled: viper.GetBool("rag.enabled"),
Store: viper.GetString("rag.store"),
TopK: viper.GetInt("rag.topK"),
Threshold: viper.GetFloat64("rag.threshold"),
EmbedProvider: viper.GetString("rag.embed.provider"),
EmbedModel: viper.GetString("rag.embed.model"),
EmbedBaseURL: viper.GetString("rag.embed.baseURL"),
EmbedTimeoutMS: viper.GetInt("rag.embed.timeoutMs"),
EmbedDimension: viper.GetInt("rag.embed.dimension"),
RerankerEnabled: viper.GetBool("rag.reranker.enabled"),
RerankerProvider: viper.GetString("rag.reranker.provider"),
RerankerTimeoutMS: viper.GetInt("rag.reranker.timeoutMs"),
ChunkSize: viper.GetInt("rag.ingest.chunkSize"),
ChunkOverlap: viper.GetInt("rag.ingest.chunkOverlap"),
RetrieveTimeoutMS: viper.GetInt("rag.retrieve.timeoutMs"),
MilvusAddress: viper.GetString("rag.milvus.address"),
MilvusToken: viper.GetString("rag.milvus.token"),
MilvusDBName: viper.GetString("rag.milvus.dbName"),
MilvusCollectionName: viper.GetString("rag.milvus.collectionName"),
MilvusMetricType: viper.GetString("rag.milvus.metricType"),
MilvusRequestTimeoutMS: viper.GetInt("rag.milvus.requestTimeoutMs"),
}
if cfg.Store == "" {
cfg.Store = "inmemory"
}
if cfg.TopK <= 0 {
cfg.TopK = 8
}
if cfg.Threshold < 0 {
cfg.Threshold = 0
}
if cfg.EmbedProvider == "" {
cfg.EmbedProvider = "mock"
}
if cfg.EmbedBaseURL == "" {
cfg.EmbedBaseURL = viper.GetString("agent.baseURL")
}
if cfg.EmbedTimeoutMS <= 0 {
cfg.EmbedTimeoutMS = 1200
}
if cfg.EmbedDimension <= 0 {
cfg.EmbedDimension = 1024
}
if cfg.RerankerProvider == "" {
cfg.RerankerProvider = "noop"
}
if cfg.RerankerTimeoutMS <= 0 {
cfg.RerankerTimeoutMS = 1200
}
if cfg.ChunkSize <= 0 {
cfg.ChunkSize = 400
}
if cfg.ChunkOverlap < 0 {
cfg.ChunkOverlap = 80
}
if cfg.RetrieveTimeoutMS <= 0 {
cfg.RetrieveTimeoutMS = 1500
}
if cfg.MilvusAddress == "" {
cfg.MilvusAddress = "http://localhost:19530"
}
if cfg.MilvusToken == "" {
cfg.MilvusToken = "root:Milvus"
}
if cfg.MilvusCollectionName == "" {
cfg.MilvusCollectionName = "smartflow_rag_chunks"
}
if cfg.MilvusMetricType == "" {
cfg.MilvusMetricType = "COSINE"
}
if cfg.MilvusRequestTimeoutMS <= 0 {
cfg.MilvusRequestTimeoutMS = 1500
}
return cfg
}