Version: 0.9.76.dev.260505
后端: 1.阶段 6 agent / memory 服务化收口 - 新增 cmd/agent 独立进程入口,承载 agent zrpc server、agent outbox relay / consumer 和运行时依赖初始化 - 补齐 services/agent/rpc 的 Chat stream 与 conversation meta/list/timeline、schedule-preview、context-stats、schedule-state unary RPC - 新增 gateway/client/agent 与 shared/contracts/agent,将 /api/v1/agent chat 和非 chat 门面切到 agent zrpc - 收缩 gateway 本地 AgentService 装配,双 RPC 开关开启时不再初始化本地 agent 编排、LLM、RAG 和 memory reader fallback - 将 backend/memory 物理迁入 services/memory,私有实现收入 internal,保留 module/model/observe 作为 memory 服务门面 - 调整 memory outbox、memory reader 和 agent 记忆渲染链路的 import 与服务边界,cmd/memory 独占 memory worker / consumer - 关闭 gateway 侧 agent outbox worker 所有权,agent relay / consumer 由 cmd/agent 独占,gateway 仅保留 HTTP/SSE 门面与迁移期开关回退 - 更新阶段 6 文档,记录 agent / memory 当前切流点、smoke 结果,以及 backend/client 与 gateway/shared 的目录收口口径
This commit is contained in:
91
backend/services/memory/internal/service/config_loader.go
Normal file
91
backend/services/memory/internal/service/config_loader.go
Normal file
@@ -0,0 +1,91 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
memorymodel "github.com/LoveLosita/smartflow/backend/services/memory/model"
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
// LoadConfigFromViper 读取记忆模块配置并做默认值兜底。
|
||||
//
|
||||
// 默认策略:
|
||||
// 1. temperature/top_p 使用低随机参数,提升可复现性;
|
||||
// 2. Day1 先提供参数位,不强制所有参数立即生效;
|
||||
// 3. 轮询与重试参数给出保守默认值,避免对主链路造成压力。
|
||||
func LoadConfigFromViper() memorymodel.Config {
|
||||
cfg := memorymodel.Config{
|
||||
Enabled: viper.GetBool("memory.enabled"),
|
||||
RAGEnabled: viper.GetBool("memory.rag.enabled"),
|
||||
ReadMode: memorymodel.NormalizeReadMode(viper.GetString("memory.read.mode")),
|
||||
InjectRenderMode: memorymodel.NormalizeInjectRenderMode(viper.GetString("memory.inject.renderMode")),
|
||||
ExtractPrompt: viper.GetString("memory.prompt.extract"),
|
||||
DecisionPrompt: viper.GetString("memory.prompt.decision"),
|
||||
Threshold: viper.GetFloat64("memory.threshold"),
|
||||
EnableReranker: viper.GetBool("memory.enableReranker"),
|
||||
LLMTemperature: viper.GetFloat64("memory.llm.temperature"),
|
||||
LLMTopP: viper.GetFloat64("memory.llm.topP"),
|
||||
JobMaxRetry: viper.GetInt("memory.job.maxRetry"),
|
||||
WorkerPollEvery: viper.GetDuration("memory.worker.pollEvery"),
|
||||
WorkerClaimBatch: viper.GetInt("memory.worker.claimBatch"),
|
||||
ReadConstraintLimit: viper.GetInt("memory.read.constraintLimit"),
|
||||
ReadPreferenceLimit: viper.GetInt("memory.read.preferenceLimit"),
|
||||
ReadFactLimit: viper.GetInt("memory.read.factLimit"),
|
||||
|
||||
// 决策层配置:默认关闭,灰度开启后才会生效。
|
||||
DecisionEnabled: viper.GetBool("memory.decision.enabled"),
|
||||
DecisionCandidateTopK: viper.GetInt("memory.decision.candidateTopK"),
|
||||
DecisionCandidateMinScore: viper.GetFloat64("memory.decision.candidateMinScore"),
|
||||
DecisionFallbackMode: viper.GetString("memory.decision.fallbackMode"),
|
||||
WriteMode: viper.GetString("memory.write.mode"),
|
||||
WriteMinConfidence: viper.GetFloat64("memory.write.minConfidence"),
|
||||
LLMThinking: viper.GetBool("agent.thinking.memory"),
|
||||
}
|
||||
|
||||
if cfg.Threshold <= 0 {
|
||||
cfg.Threshold = 0.55
|
||||
}
|
||||
if cfg.LLMTemperature <= 0 {
|
||||
cfg.LLMTemperature = 0.1
|
||||
}
|
||||
if cfg.LLMTopP <= 0 {
|
||||
cfg.LLMTopP = 0.2
|
||||
}
|
||||
if cfg.JobMaxRetry <= 0 {
|
||||
cfg.JobMaxRetry = 6
|
||||
}
|
||||
if cfg.WorkerPollEvery <= 0 {
|
||||
cfg.WorkerPollEvery = 2 * time.Second
|
||||
}
|
||||
if cfg.WorkerClaimBatch <= 0 {
|
||||
cfg.WorkerClaimBatch = 1
|
||||
}
|
||||
cfg.ReadConstraintLimit = cfg.EffectiveReadConstraintLimit()
|
||||
cfg.ReadPreferenceLimit = cfg.EffectiveReadPreferenceLimit()
|
||||
cfg.ReadFactLimit = cfg.EffectiveReadFactLimit()
|
||||
cfg.ReadMode = cfg.EffectiveReadMode()
|
||||
cfg.InjectRenderMode = cfg.EffectiveInjectRenderMode()
|
||||
|
||||
// 决策层配置默认值兜底。
|
||||
// 说明:
|
||||
// 1. TopK 和 MinScore 是 Milvus 召回参数,需要保守默认值避免召回过多噪声候选;
|
||||
// 2. FallbackMode 默认退回旧路径新增,保证决策流程异常时不丢数据;
|
||||
// 3. WriteMode 由 DecisionEnabled 隐式决定,这里不做强制联动。
|
||||
if cfg.DecisionCandidateTopK <= 0 {
|
||||
cfg.DecisionCandidateTopK = 5
|
||||
}
|
||||
if cfg.DecisionCandidateMinScore <= 0 {
|
||||
cfg.DecisionCandidateMinScore = 0.6
|
||||
}
|
||||
if cfg.DecisionFallbackMode == "" {
|
||||
cfg.DecisionFallbackMode = "legacy_add"
|
||||
}
|
||||
if cfg.WriteMode == "" {
|
||||
cfg.WriteMode = "legacy"
|
||||
}
|
||||
if cfg.WriteMinConfidence <= 0 {
|
||||
cfg.WriteMinConfidence = 0.5
|
||||
}
|
||||
|
||||
return cfg
|
||||
}
|
||||
Reference in New Issue
Block a user