后端: 1. RAG embedding 接入修正,并兼容 Ark 多模态 embedding 链路 - 更新 backend/infra/rag/embed/eino_embedder.go:文本 embedding 继续走 Eino OpenAI 兼容链路;`doubao-embedding-vision-*` 模型切到 Ark 原生 `/embeddings/multimodal` - 增加 embedding baseURL 归一化:兼容把 `.../embeddings` 或 `.../embeddings/multimodal` 误填进配置的情况,统一回退到 `/api/v3` - 为第三方 embedding 调用增加 panic recover,避免向量检索/写入异常直接打崩主进程 2. RAG runtime / pipeline / store 稳定性加固,统一降级为 error 语义 - 更新 backend/infra/rag/runtime.go:runtime 对外入口增加 panic recover 与观测打点 - 更新 backend/infra/rag/core/pipeline.go:ingest / retrieve 编排边界增加 panic recover - 更新 backend/infra/rag/retrieve/vector_retriever.go:向量检索边界补充 panic recover - 更新 backend/infra/rag/store/milvus_store.go、backend/infra/rag/store/inmemory_store.go:补齐未初始化保护,避免 nil 依赖直接异常退出 3. RAG embedding 配置口径与普通 LLM 链路对齐 - 更新 backend/infra/rag/factory.go:RAG embedding API Key 不再走 `apiKeyEnv` 间接映射,统一直接读取 `ARK_API_KEY` - 更新 backend/infra/rag/config/config.go:删除 `rag.embed.apiKeyEnv` 配置字段,收敛配置分叉 - 更新 backend/config.example.yaml:示例配置切到当前联调口径,保持 `rag.enabled=true`、`memory.rag.enabled=true`,并对齐 Milvus / embed 配置 4. Memory + RAG 联调链路可运行态修正 - 当前已验证 memory 抽取写库、RAG ingest 写入 Milvus、后续语义召回链路可继续联调 - 检索失败场景已从“直接 panic”收敛为“记录日志并降级”,不再阻断主聊天链路 前端:无 仓库:无 undo: 1. 增删改查的 mysql 记忆去重没实现 2. 提取用户话为记忆的过滤机制不足,有点无脑 3. RAG 召回也有问题
114 lines
3.1 KiB
Go
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
|
|
}
|