diff --git a/decision/engine.go b/decision/engine.go index c82436bb..ce79ecc8 100644 --- a/decision/engine.go +++ b/decision/engine.go @@ -123,13 +123,18 @@ func GetFullDecisionWithCustomPrompt(ctx *Context, mcpClient *mcp.Client, custom // 4. 解析AI响应 decision, err := parseFullDecisionResponse(aiResponse, ctx.Account.TotalEquity, ctx.BTCETHLeverage, ctx.AltcoinLeverage) + + // 无论是否有错误,都要保存 SystemPrompt 和 UserPrompt(用于调试和决策未执行后的问题定位) + if decision != nil { + decision.Timestamp = time.Now() + decision.SystemPrompt = systemPrompt // 保存系统prompt + decision.UserPrompt = userPrompt // 保存输入prompt + } + if err != nil { return decision, fmt.Errorf("解析AI响应失败: %w", err) } - decision.Timestamp = time.Now() - decision.SystemPrompt = systemPrompt // 保存系统prompt - decision.UserPrompt = userPrompt // 保存输入prompt return decision, nil } @@ -273,9 +278,10 @@ func buildSystemPrompt(accountEquity float64, btcEthLeverage, altcoinLeverage in sb.WriteString("# 硬约束(风险控制)\n\n") sb.WriteString("1. 风险回报比: 必须 ≥ 1:3(冒1%风险,赚3%+收益)\n") sb.WriteString("2. 最多持仓: 3个币种(质量>数量)\n") - sb.WriteString(fmt.Sprintf("3. 单币仓位: 山寨%.0f-%.0f U(%dx杠杆) | BTC/ETH %.0f-%.0f U(%dx杠杆)\n", - accountEquity*0.8, accountEquity*1.5, altcoinLeverage, accountEquity*5, accountEquity*10, btcEthLeverage)) - sb.WriteString("4. 保证金: 总使用率 ≤ 90%\n\n") + sb.WriteString(fmt.Sprintf("3. 单币仓位: 山寨%.0f-%.0f U | BTC/ETH %.0f-%.0f U\n", + accountEquity*0.8, accountEquity*1.5, accountEquity*5, accountEquity*10)) + sb.WriteString(fmt.Sprintf("4. 杠杆限制: **山寨币最大%dx杠杆** | **BTC/ETH最大%dx杠杆** (⚠️ 严格执行,不可超过)\n", altcoinLeverage, btcEthLeverage)) + sb.WriteString("5. 保证金: 总使用率 ≤ 90%\n\n") // 3. 输出格式 - 动态生成(始终追加) sb.WriteString("#输出格式\n\n")