-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Closed
Description
问题描述
当用户在前端界面修改AI模型配置(如修改 custom_model_name)并保存到数据库后,必须重启后端容器才能使新配置生效。这大大降低了使用数据库存储配置的意义。
复现步骤
- 在前端修改AI模型配置(例如:将DeepSeek的Model Name从
deepseek改为deepseek-chat) - 保存配置(数据库已更新)
- 观察后端日志,发现仍然使用旧的配置值
- 需要执行
docker restart nofx-trading才能加载新配置
当前行为
- 配置在后端启动时从数据库加载到内存(
AutoTraderConfig结构体) - AI调用时使用内存中的配置值
- 修改数据库后,内存中的配置不会更新
相关代码位置
- 配置加载:
manager/trader_manager.go:28-LoadTradersFromDatabase - 配置使用:
trader/auto_trader.go:16-76-AutoTraderConfig结构体 - 内存缓存:
trader/auto_trader.go:84-config AutoTraderConfig
期望行为
修改配置后应该无需重启即可生效,有以下几种实现方案:
方案1:每次AI调用前动态读取配置 ⭐ 推荐
优点:
- 配置实时生效
- 实现简单
- 保证配置一致性
缺点:
- 增加数据库查询(但AI调用间隔通常是分钟级别,影响可忽略)
实现思路:
// 在 auto_trader.go 的 Run() 或调用AI前
func (at *AutoTrader) reloadConfig(database *config.Database) error {
// 重新读取AI模型配置
aiModelCfg, err := database.GetAIModelConfig(userID, at.config.AIModel)
if err != nil {
return err
}
// 更新内存中的配置
at.config.CustomModelName = aiModelCfg.CustomModelName
at.config.CustomAPIURL = aiModelCfg.CustomAPIURL
// ... 更新其他配置项
return nil
}方案2:提供配置热更新API
优点:
- 性能更好(只在需要时更新)
- 可以批量更新多个trader的配置
缺点:
- 需要额外的API endpoint
- 前端需要调用该API
实现思路:
// 新增 API endpoint
POST /api/traders/:id/reload-config
// 实现
func (tm *TraderManager) ReloadTraderConfig(traderID string, database *config.Database) error {
// 从数据库重新加载配置并更新到内存
}方案3:配置变更监听机制
优点:
- 完全自动化
- 性能好
缺点:
- 实现较复杂
- 需要配置变更通知机制
影响范围
此问题影响所有可热更新的配置:
- ✅ AI模型配置(Model Name, API Key, Base URL)
- ✅ 交易所配置(API Key, Secret Key)
- ✅ 交易员配置(杠杆倍数、交易币种等)
- ✅ 自定义策略Prompt
优先级
Medium-High - 虽然有workaround(重启),但影响用户体验,特别是在生产环境中
相关日志
2025/11/02 18:31:15 Model: deepseek # 旧配置(错误)
2025/11/02 18:42:32 Model: deepseek-chat # 重启后加载新配置(正确)
标签建议
enhancementbackendconfigurationgood first issue(如果选择方案1)
Metadata
Metadata
Assignees
Labels
No labels