mirror of
https://github.com/NoFxAiOS/nofx.git
synced 2026-07-04 03:21:04 +08:00
refactor: 優化 engine.go 模板加載邏輯,避免策略重複
## 問題 - 之前邏輯:加載模板 → 無條件追加硬編碼策略 - 結果:選擇 adaptive 模板時,會收到重複的策略內容 * adaptive.txt: 259 行 * 硬編碼: 184 行 * 總計:443 行重複指導 ❌ ## 解決方案 使用 templateLoaded 標記追蹤模板加載狀態: - ✅ 模板成功 → 使用模板,跳過硬編碼 - ❌ 模板失敗 → 使用硬編碼作為 fallback ## 變更內容 1. 添加 templateLoaded bool 變量 2. 硬編碼策略包裹在 `if !templateLoaded {}` 中(277-463 行) 3. 硬約束和輸出格式始終追加(不受影響) 4. 添加日誌追蹤模板使用情況 ## 測試驗證 - ✅ Go 編譯成功 - ✅ Docker build 成功 - ✅ 向後兼容(模板失敗時回退到硬編碼) ## 架構改進 ``` 加載流程: 1. 嘗試加載指定模板(如 adaptive) 2. 失敗 → 嘗試 default 3. 仍失敗 → 使用硬編碼 4. 追加硬約束(動態生成) 5. 追加輸出格式(動態生成) ``` 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -242,25 +242,31 @@ func buildSystemPrompt(accountEquity float64, btcEthLeverage, altcoinLeverage in
|
||||
templateName = "default" // 默认使用 default 模板
|
||||
}
|
||||
|
||||
// 追踪模板是否成功加载(用于决定是否使用硬编码 fallback)
|
||||
templateLoaded := false
|
||||
|
||||
template, err := GetPromptTemplate(templateName)
|
||||
if err != nil {
|
||||
// 如果模板不存在,记录错误并使用 default
|
||||
log.Printf("⚠️ 提示词模板 '%s' 不存在,使用 default: %v", templateName, err)
|
||||
template, err = GetPromptTemplate("default")
|
||||
if err != nil {
|
||||
// 如果连 default 都不存在,使用内置的简化版本
|
||||
log.Printf("❌ 无法加载任何提示词模板,使用内置简化版本")
|
||||
sb.WriteString("你是专业的加密货币交易AI。请根据市场数据做出交易决策。\n\n")
|
||||
// 如果连 default 都不存在,将使用下方的硬编码策略
|
||||
log.Printf("❌ 无法加载任何提示词模板,将使用硬编码策略")
|
||||
} else {
|
||||
sb.WriteString(template.Content)
|
||||
sb.WriteString("\n\n")
|
||||
templateLoaded = true
|
||||
log.Printf("✓ 使用 default 模板(fallback)")
|
||||
}
|
||||
} else {
|
||||
sb.WriteString(template.Content)
|
||||
sb.WriteString("\n\n")
|
||||
templateLoaded = true
|
||||
log.Printf("✓ 使用 %s 模板", templateName)
|
||||
}
|
||||
|
||||
// 2. 硬约束(风险控制)- 动态生成
|
||||
// 2. 硬约束(风险控制)- 动态生成(始终追加)
|
||||
sb.WriteString("# 硬约束(风险控制)\n\n")
|
||||
sb.WriteString("1. 风险回报比: 必须 ≥ 1:3(冒1%风险,赚3%+收益)\n")
|
||||
sb.WriteString("2. 最多持仓: 3个币种(质量>数量)\n")
|
||||
@@ -268,8 +274,11 @@ func buildSystemPrompt(accountEquity float64, btcEthLeverage, altcoinLeverage in
|
||||
accountEquity*0.8, accountEquity*1.5, altcoinLeverage, accountEquity*5, accountEquity*10, btcEthLeverage))
|
||||
sb.WriteString("4. 保证金: 总使用率 ≤ 90%\n\n")
|
||||
|
||||
// 市场状态判断与策略选择
|
||||
sb.WriteString("# 市场状态判断(优先)\n\n")
|
||||
// 3. 硬编码策略(仅当模板加载失败时使用)
|
||||
if !templateLoaded {
|
||||
log.Printf("⚠️ 追加硬编码策略作为 fallback")
|
||||
// 市场状态判断与策略选择
|
||||
sb.WriteString("# 市场状态判断(优先)\n\n")
|
||||
sb.WriteString("在制定交易决策前,必须先判断当前市场状态:\n\n")
|
||||
sb.WriteString("判断方法(多个指标交叉验证):\n\n")
|
||||
sb.WriteString("1. 多时间框架一致性:\n")
|
||||
@@ -451,8 +460,9 @@ func buildSystemPrompt(accountEquity float64, btcEthLeverage, altcoinLeverage in
|
||||
sb.WriteString("2. 评估持仓: 趋势是否改变?是否该止盈/止损?\n")
|
||||
sb.WriteString("3. 寻找新机会: 有强信号吗?多空机会?\n")
|
||||
sb.WriteString("4. 输出决策: 思维链分析 + JSON\n\n")
|
||||
} // 结束 if !templateLoaded 区块
|
||||
|
||||
// 3. 输出格式 - 动态生成
|
||||
// 4. 输出格式 - 动态生成(始终追加)
|
||||
sb.WriteString("#输出格式\n\n")
|
||||
sb.WriteString("第一步: 思维链(纯文本)\n")
|
||||
sb.WriteString("简洁分析你的思考过程\n\n")
|
||||
|
||||
Reference in New Issue
Block a user