From b0de71bdf50c2149d542fa7ebbb1c901a7d60f43 Mon Sep 17 00:00:00 2001 From: Liu Xiang Qian Date: Mon, 3 Nov 2025 22:04:00 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=20Trader=20=E7=9A=84=E7=B3=BB=E7=BB=9F=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E8=AF=8D=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 允许在编辑 Trader 时更新系统提示词模板(SystemPromptTemplate)。 系统提示词模板用于控制 AI 交易决策的行为模式。目前创建 Trader 时可以指定模板,但编辑时无法修改。 1. **UpdateTraderRequest** 添加 `SystemPromptTemplate` 字段 ```go SystemPromptTemplate string `json:"system_prompt_template"` ``` 2. **handleUpdateTrader** 添加处理逻辑 - 如果请求中提供新模板,使用新值 - 如果为空字符串,保持数据库中的原有值 ```go systemPromptTemplate := req.SystemPromptTemplate if systemPromptTemplate == "" { systemPromptTemplate = existingTrader.SystemPromptTemplate } ``` 3. **TraderRecord** 设置 SystemPromptTemplate 字段 ```go SystemPromptTemplate: systemPromptTemplate, ``` - ✅ 支持在编辑 Trader 时更新系统提示词模板 - ✅ 空值时保持原有值不变(向后兼容) - ✅ 与创建 Trader 时的行为保持一致 - ✅ 无破坏性变更 1. 用户创建 Trader 时使用了默认模板 2. 后续想切换到自定义模板(如更激进或保守的策略) 3. 通过编辑功能修改 SystemPromptTemplate 字段 4. 保存后,AI 将使用新的提示词模板进行决策 1. 创建 Trader(使用默认模板 "default") 2. 编辑 Trader,修改 system_prompt_template 为 "aggressive" 3. 保存并验证修改成功 4. 再次编辑,不修改 system_prompt_template(传空字符串) 5. 验证保持 "aggressive" 不变 --- api/server.go | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/api/server.go b/api/server.go index 92c2f174..f3b6a543 100644 --- a/api/server.go +++ b/api/server.go @@ -393,10 +393,11 @@ type UpdateTraderRequest struct { ScanIntervalMinutes int `json:"scan_interval_minutes"` BTCETHLeverage int `json:"btc_eth_leverage"` AltcoinLeverage int `json:"altcoin_leverage"` - TradingSymbols string `json:"trading_symbols"` - CustomPrompt string `json:"custom_prompt"` - OverrideBasePrompt bool `json:"override_base_prompt"` - IsCrossMargin *bool `json:"is_cross_margin"` + TradingSymbols string `json:"trading_symbols"` + CustomPrompt string `json:"custom_prompt"` + OverrideBasePrompt bool `json:"override_base_prompt"` + SystemPromptTemplate string `json:"system_prompt_template"` + IsCrossMargin *bool `json:"is_cross_margin"` } // handleUpdateTrader 更新交易员配置 @@ -452,6 +453,12 @@ func (s *Server) handleUpdateTrader(c *gin.Context) { scanIntervalMinutes = existingTrader.ScanIntervalMinutes // 保持原值 } + // 设置系统提示词模板,允许更新 + systemPromptTemplate := req.SystemPromptTemplate + if systemPromptTemplate == "" { + systemPromptTemplate = existingTrader.SystemPromptTemplate // 保持原值 + } + // 更新交易员配置 trader := &config.TraderRecord{ ID: traderID, @@ -465,7 +472,7 @@ func (s *Server) handleUpdateTrader(c *gin.Context) { TradingSymbols: req.TradingSymbols, CustomPrompt: req.CustomPrompt, OverrideBasePrompt: req.OverrideBasePrompt, - SystemPromptTemplate: existingTrader.SystemPromptTemplate, // 保持原值 + SystemPromptTemplate: systemPromptTemplate, IsCrossMargin: isCrossMargin, ScanIntervalMinutes: scanIntervalMinutes, IsRunning: existingTrader.IsRunning, // 保持原值 From c1f080f59f66ca39a5101d92b657d34c4c410fba Mon Sep 17 00:00:00 2001 From: Liu Xiang Qian Date: Mon, 3 Nov 2025 22:19:58 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=89=8D?= =?UTF-8?q?=E7=AB=AF=E5=AF=B9=20SystemPromptTemplate=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E7=9A=84=E5=AE=8C=E6=95=B4=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 修改内容 ### 后端 (api/server.go) - handleGetTraderConfig 返回中添加 system_prompt_template 字段 ### 前端类型定义 (web/src/types.ts) - TraderConfigData 接口添加 system_prompt_template 字段 ### 前端更新逻辑 (web/src/components/AITradersPage.tsx) - handleSaveEditTrader 的更新请求中添加 system_prompt_template ## 完整数据流 ``` 后端数据库 ↓ handleGetTraderConfig 前端 TraderConfigData (包含 system_prompt_template) ↓ TraderConfigModal (UI 编辑) 前端 UpdateRequest (包含 system_prompt_template) ↓ handleUpdateTrader 后端更新数据库 ``` 现在前后端已完全打通,用户可以在 UI 中编辑系统提示词模板了。 --- api/server.go | 1 + web/src/components/AITradersPage.tsx | 1 + web/src/types.ts | 1 + 3 files changed, 3 insertions(+) diff --git a/api/server.go b/api/server.go index f3b6a543..ee09f721 100644 --- a/api/server.go +++ b/api/server.go @@ -838,6 +838,7 @@ func (s *Server) handleGetTraderConfig(c *gin.Context) { "trading_symbols": traderConfig.TradingSymbols, "custom_prompt": traderConfig.CustomPrompt, "override_base_prompt": traderConfig.OverrideBasePrompt, + "system_prompt_template": traderConfig.SystemPromptTemplate, "is_cross_margin": traderConfig.IsCrossMargin, "use_coin_pool": traderConfig.UseCoinPool, "use_oi_top": traderConfig.UseOITop, diff --git a/web/src/components/AITradersPage.tsx b/web/src/components/AITradersPage.tsx index d534c0b0..9a8864c5 100644 --- a/web/src/components/AITradersPage.tsx +++ b/web/src/components/AITradersPage.tsx @@ -189,6 +189,7 @@ export function AITradersPage({ onTraderSelect }: AITradersPageProps) { trading_symbols: data.trading_symbols, custom_prompt: data.custom_prompt, override_base_prompt: data.override_base_prompt, + system_prompt_template: data.system_prompt_template, is_cross_margin: data.is_cross_margin, use_coin_pool: data.use_coin_pool, use_oi_top: data.use_oi_top diff --git a/web/src/types.ts b/web/src/types.ts index 7d115106..90b74e4c 100644 --- a/web/src/types.ts +++ b/web/src/types.ts @@ -195,6 +195,7 @@ export interface TraderConfigData { trading_symbols: string; custom_prompt: string; override_base_prompt: boolean; + system_prompt_template: string; is_cross_margin: boolean; use_coin_pool: boolean; use_oi_top: boolean;