refactor: 恢復模板加載失敗時的簡化版本 fallback

## 問題
之前修改將模板加載失敗時改為返回空字符串,但:
- 上層函數沒有檢測空字符串的邏輯
- 空字符串會直接傳給 AI API,導致錯誤
- 極端情況下系統無法運行

## 解決方案
恢復原始邏輯,保留內置簡化版本作為最後防線:
```
用戶模板失敗 → default 失敗 → 使用內置簡化版本
"你是专业的加密货币交易AI。请根据市场数据做出交易决策。"
```

## 差異對比
### 之前(不安全)
```go
if default 加載失敗 {
    return ""  //  上層未檢測,會傳空字符串給 AI
}
```

### 現在(安全)
```go
if default 加載失敗 {
    sb.WriteString("你是专业的加密货币交易AI。请根据市场数据做出交易决策。\n\n")
    //  有最後防線,極端情況下仍能運行
}
```

## 測試驗證
-  Go 編譯成功
-  Docker build 成功
-  邏輯恢復到原始穩定版本

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
ZhouYongyou
2025-11-02 01:27:44 +08:00
parent 1fb5ecb89c
commit 8faa2b3494

View File

@@ -248,18 +248,18 @@ func buildSystemPrompt(accountEquity float64, btcEthLeverage, altcoinLeverage in
log.Printf("⚠️ 提示词模板 '%s' 不存在,使用 default: %v", templateName, err)
template, err = GetPromptTemplate("default")
if err != nil {
// 如果连 default 都不存在,说明文件系统有严重问题
log.Printf("❌ 致命错误:无法加载任何提示词模板,系统无法安全运行")
return "" // 返回空字符串,上层应该检测并停止交易
// 如果连 default 都不存在,使用内置的简化版本(最后防线)
log.Printf("❌ 无法加载任何提示词模板,使用内置简化版本")
sb.WriteString("你是专业的加密货币交易AI。请根据市场数据做出交易决策。\n\n")
} else {
sb.WriteString(template.Content)
sb.WriteString("\n\n")
}
log.Printf("✓ 使用 default 模板fallback")
} else {
log.Printf("✓ 使用 %s 模板", templateName)
sb.WriteString(template.Content)
sb.WriteString("\n\n")
}
sb.WriteString(template.Content)
sb.WriteString("\n\n")
// 2. 硬约束(风险控制)- 动态生成(始终追加)
sb.WriteString("# 硬约束(风险控制)\n\n")
sb.WriteString("1. 风险回报比: 必须 ≥ 1:3冒1%风险赚3%+收益)\n")