Refine strategy creation flow and diagnostics

This commit is contained in:
lky-spec
2026-05-09 14:48:24 +08:00
parent 0f11be77f8
commit e67a927a4f
29 changed files with 3410 additions and 1305 deletions

View File

@@ -2,7 +2,7 @@
"name": "strategy_management",
"kind": "management",
"domain": "strategy",
"description": "当用户想创建、查看、修改、删除、激活或复制策略模板时调用。策略模板不能直接启动运行;只有绑定了该策略的交易员可以启动。",
"description": "当用户想创建、查看、修改、删除、激活或复制策略模板时调用。",
"field_constraints": {
"name": {
"type": "string",
@@ -33,8 +33,7 @@
"strategy_type": {
"type": "enum",
"values": ["ai_trading", "grid_trading"],
"default": "ai_trading",
"description": "策略类型ai_tradingAI 量化)或 grid_trading网格策略。"
"description": "策略类型:ai_tradingAI 量化)或 grid_trading网格策略。创建策略时必须先由用户选择或从用户话语明确识别不能默认成 ai_trading。"
},
"symbol": {
"type": "enum",
@@ -43,8 +42,8 @@
},
"source_type": {
"type": "enum",
"values": ["static", "ai500", "oi_top", "oi_low", "mixed"],
"description": "选币来源类型。static=用户指定静态币池ai500=AI500榜单oi_top=持仓量增长oi_low=持仓量下降mixed=混合。"
"values": ["static", "ai500", "oi_top", "oi_low"],
"description": "选币来源类型。static=用户指定静态币池ai500=AI500榜单oi_top=持仓量增长oi_low=持仓量下降。"
},
"static_coins": {
"type": "string_array",
@@ -78,11 +77,6 @@
"max": 20,
"description": "山寨币最大杠杆倍数,范围 120。"
},
"max_positions": {
"type": "int",
"min": 1,
"description": "最大同时持仓数量。策略页展示为 System enforced不是普通手动可编辑项除非用户明确要求高级配置否则不要主动修改。"
},
"min_confidence": {
"type": "int",
"min": 50,
@@ -124,7 +118,7 @@
"total_investment": {
"type": "float",
"min": 100,
"description": "网格总投入金额grid_trading 类型专用,手动页面最小 100 USDT步进 100。"
"description": "网格总投入金额grid_trading 类型专用,表示用户实际投入/保证金预算,不是杠杆后的名义仓位;名义仓位约等于 total_investment × leverage。手动页面最小 100 USDT步进 100。"
},
"leverage": {
"type": "int",
@@ -351,81 +345,28 @@
"min": 5,
"max": 20,
"description": "价格排行榜返回数量,页面选项为 5、10、15、20。"
},
"btceth_max_position_value_ratio": {
"type": "float",
"min": 0,
"description": "BTC/ETH 单仓最大仓位价值占比。策略页展示为 System enforced不是普通手动可编辑项除非用户明确要求高级配置否则不要主动修改。"
},
"altcoin_max_position_value_ratio": {
"type": "float",
"min": 0,
"description": "山寨币单仓最大仓位价值占比。策略页展示为 System enforced不是普通手动可编辑项除非用户明确要求高级配置否则不要主动修改。"
},
"max_margin_usage": {
"type": "float",
"min": 0,
"description": "最大保证金占用比例。策略页展示为 System enforced不是普通手动可编辑项除非用户明确要求高级配置否则不要主动修改。"
}
},
"validation_rules": [
"AI 策略页面包含:选币来源、指标/K线/量化数据、风险控制、Prompt Sections、自定义提示词、发布设置。",
"网格策略页面包含symbol、grid_count、total_investment、leverage、upper_price、lower_price、use_atr_bounds、atr_multiplier、distribution、max_drawdown_pct、stop_loss_pct、daily_loss_limit_pct、use_maker_only、enable_direction_adjust、direction_bias_ratio、发布设置。",
"用户询问字段有哪些选项、范围或页面能不能设置时,应直接按本 skill 的 field_constraints 回答;不要说“平台会自动匹配”或编造页面不存在的字段。",
"grid_trading 的 symbol 只能从页面下拉选项 BTCUSDT、ETHUSDT、SOLUSDT、BNBUSDT、XRPUSDT、DOGEUSDT 中选择。",
"grid_trading 的 grid_count 范围为 550total_investment 最小 100leverage 范围 15atr_multiplier 范围 15。",
"grid_trading 的 max_drawdown_pct 范围为 550stop_loss_pct 范围为 120daily_loss_limit_pct 范围为 130direction_bias_ratio 范围为 0.550.90。",
"grid_trading 推荐价格区间时,不能凭记忆猜“当前 BTC/ETH/SOL 价格”。没有实时行情工具结果时,应优先推荐 use_atr_bounds=true 的 ATR 自动边界;只有本轮已经获取过实时价格,才可以给基于当前价格的 upper_price/lower_price 数值。",
"AI 策略的 static_coins 最多 10 个selected_timeframes 最多 4 个primary_count 范围为 1030。",
"排行榜 duration 只能用页面选项ranking_limit 只能用 5、10、15、20。",
"btceth_max_leverage 和 altcoin_max_leverage 范围均为 120超出时自动收敛并告知用户。",
"min_confidence 范围 50100超出时自动收敛并告知用户。",
"grid_trading 类型时lower_price 必须小于 upper_price否则提示用户修正。",
"策略模板不能直接启动运行,只有绑定了该策略的交易员才能启动。",
"策略模板创建成功后应出现在策略列表/策略页。",
"本 skill 的“页面/手动页面”表述只用于说明字段范围和 UI 约束,不表示用户必须去页面操作;创建、更新、删除、激活、复制等动作都应通过 Agent 工具在聊天中执行。",
"创建策略的确认发生在聊天里:当配置已整理好,应让用户回复“确认创建”;用户确认后必须调用创建工具,不要要求用户点击网页或 APP 里的按钮。",
"创建策略模板时不要要求用户先绑定或添加交易所账户,也不要要求绑定 AI 模型;交易所和模型只属于 trader 创建、部署或启动流程。",
"策略是模板/规则,不保存交易所 API、模型 provider、钱包余额或扫描间隔这些属于交易员、模型或交易所配置。",
"如果用户只是创建或配置策略模板,不要把它升级成 trader 创建流程。",
"如果用户说“用某个策略创建/启动交易员”,不要新建同名策略;应先查找并绑定已有策略,只有用户明确要求新策略时才创建。",
"删除操作不可逆,必须先向用户确认再执行。",
"激活activate操作将该策略设为默认模板不是启动运行。",
"scan_interval_minutes、initial_balance、lighter_api_key_index 这类交易员/交易所边界值不属于策略本身,若用户在改策略时提到,应引导去对应 trader 或 exchange 配置。",
"max_positions、btceth_max_position_value_ratio、altcoin_max_position_value_ratio、max_margin_usage、min_position_size 在策略页属于 System enforced / 非普通手动编辑项若用户问页面能否改应说明页面不提供普通编辑入口。min_position_size 固定为 12 USDTAgent 不能修改。",
"启用量化数据相关开关时,若需要 nofxos_api_key应主动提醒用户补齐。",
"启用排行榜相关能力时,只修改用户明确提到的 enable_*、duration、limit 字段,不要偷偷打开其他排行榜。"
"本 skill 只负责策略模板创建、查看、修改、删除、激活和复制。",
"字段选项和范围来自 field_constraints产品行为规则由 active session prompt 负责。"
],
"actions": {
"create": {
"description": "创建策略模板。至少需要名称,其他配置可按需追问或按默认值补齐。",
"description": "创建策略模板。",
"required_slots": ["name"],
"optional_slots": ["description", "is_public", "config_visible", "lang", "strategy_type", "symbol", "source_type", "static_coins", "excluded_coins", "primary_timeframe", "selected_timeframes", "btceth_max_leverage", "altcoin_max_leverage", "max_positions", "min_confidence", "min_risk_reward_ratio", "custom_prompt", "role_definition", "trading_frequency", "entry_standards", "decision_process", "use_atr_bounds", "atr_multiplier", "enable_direction_adjust", "direction_bias_ratio", "grid_count", "total_investment", "leverage", "upper_price", "lower_price", "distribution", "max_drawdown_pct", "stop_loss_pct", "daily_loss_limit_pct", "use_maker_only", "use_ai500", "ai500_limit", "use_oi_top", "oi_top_limit", "use_oi_low", "oi_low_limit", "primary_count", "enable_ema", "enable_macd", "enable_rsi", "enable_atr", "enable_boll", "enable_volume", "enable_oi", "enable_funding_rate", "ema_periods", "rsi_periods", "atr_periods", "boll_periods", "nofxos_api_key", "enable_quant_data", "enable_quant_oi", "enable_quant_netflow", "enable_oi_ranking", "oi_ranking_duration", "oi_ranking_limit", "enable_netflow_ranking", "netflow_ranking_duration", "netflow_ranking_limit", "enable_price_ranking", "price_ranking_duration", "price_ranking_limit", "btceth_max_position_value_ratio", "altcoin_max_position_value_ratio", "max_margin_usage"],
"optional_slots": ["strategy_type", "config_patch"],
"goal": "创建一个可供 trader 绑定使用的策略模板。",
"dynamic_rules": [
"若用户只是要给 trader 绑定现有策略,应优先在父任务里补 strategy 槽位,而不是误开新的 create。",
"若用户明确要求新建策略,至少先收齐名称;如果用户尚未说明策略类型,只问一次 AI 策略还是网格策略。",
"策略类型确定后,不要一个字段一个字段追问配置;应把用户已给出的信息合并进去,剩余字段用安全默认值补齐,直接给一份完整草稿让用户确认或修改。",
"如果配置已经足够且用户在聊天里确认创建,应直接调用 Agent 的创建工具;不要告诉用户去页面点击“确认”或“创建策略”按钮。",
"当用户说“全部由你定”“你帮我决定”时,可以给出安全默认/推荐参数,但必须说清楚这些是 Agent 建议值;不要说成“你已经填好/你已经配置好”。",
"创建策略模板本身不需要交易所账户或 AI 模型;不要在 create 策略时询问用户是否已有交易所账户。",
"如果用户同时提到模型 provider、交易所账户或扫描间隔应把这些信息留给 trader 创建流程,不要写入策略配置。",
"只有当用户明确要求运行、部署、实盘、创建交易员或绑定到交易员时,才进入 trader 流程并收集交易所/模型。",
"策略模板创建成功后应出现在策略列表/策略页。",
"只有用户要运行或部署时,才继续 trader 绑定。",
"杠杆超出 120 范围时,自动收敛并告知用户。"
],
"success_output": "返回 strategy_id 和新策略摘要(名称、类型、主要配置)。",
"failure_output": "明确指出仍缺哪些核心参数,或说明需要先确认的风控收敛结果。"
},
"update": {
"description": "更新策略模板的任意可编辑字段。",
"required_slots": ["target_ref"],
"optional_slots": ["name", "description", "is_public", "config_visible", "symbol", "source_type", "static_coins", "excluded_coins", "primary_timeframe", "selected_timeframes", "btceth_max_leverage", "altcoin_max_leverage", "max_positions", "min_confidence", "min_risk_reward_ratio", "custom_prompt", "role_definition", "trading_frequency", "entry_standards", "decision_process", "grid_count", "total_investment", "leverage", "upper_price", "lower_price", "distribution", "use_atr_bounds", "atr_multiplier", "enable_direction_adjust", "direction_bias_ratio", "max_drawdown_pct", "stop_loss_pct", "daily_loss_limit_pct", "use_maker_only", "use_ai500", "ai500_limit", "use_oi_top", "oi_top_limit", "use_oi_low", "oi_low_limit", "primary_count", "enable_ema", "enable_macd", "enable_rsi", "enable_atr", "enable_boll", "enable_volume", "enable_oi", "enable_funding_rate", "ema_periods", "rsi_periods", "atr_periods", "boll_periods", "nofxos_api_key", "enable_quant_data", "enable_quant_oi", "enable_quant_netflow", "enable_oi_ranking", "oi_ranking_duration", "oi_ranking_limit", "enable_netflow_ranking", "netflow_ranking_duration", "netflow_ranking_limit", "enable_price_ranking", "price_ranking_duration", "price_ranking_limit", "btceth_max_position_value_ratio", "altcoin_max_position_value_ratio", "max_margin_usage"],
"optional_slots": ["name", "description", "is_public", "config_visible", "config_patch"],
"goal": "更新一个已有策略模板的指定配置,而不覆盖未提及字段。",
"dynamic_rules": [
"只更新用户明确提到的字段,不要覆盖未提及的字段。",
"如果用户想修改绑定的模型、交易所、扫描间隔或交易员运行状态,应转去 trader_management不要写进策略。",
"杠杆超出 120 范围时,自动收敛并告知用户。",
"grid_trading 类型时lower_price 必须小于 upper_price。"
],
@@ -458,25 +399,20 @@
},
"update_config": {
"description": "修改策略的某个具体配置参数(选币来源、指标、风控参数等)。",
"required_slots": ["target_ref", "config_field", "config_value"],
"required_slots": ["target_ref"],
"optional_slots": ["config_patch"],
"goal": "修改策略模板中的一个或一组具体配置参数。",
"dynamic_rules": [
"配置值超出手动面板边界时,应先自动收敛并明确告知用户。",
"若用户一次提到多个配置 patch可在同一轮内整体应用但要明确说明最终修改了哪些字段。",
"拒绝把 exchange_id、ai_model_id、scan_interval_minutes、initial_balance、wallet/private key 等非策略字段作为策略 config 写入。",
"当配置更新涉及 custom_prompt、role_definition、trading_frequency、entry_standards、decision_process、description、name 等文本槽位,且用户表达了“交给你”“你帮我写”“你自己设计”等委托生成意图时,严禁再次向用户索要正文。",
"此时你必须直接生成一版可用文本,写入对应 extracted 字段,并用确认式问题向用户展示:“我先为你拟了一版……,要直接按这版更新吗?”"
"配置变更统一通过 config_patch 表达,字段必须来自当前策略类型的产品模板。",
"字段选项、范围和非策略字段拦截由 active session prompt 与后端 schema 负责。"
],
"success_output": "返回 strategy_id并明确告知已修改的配置字段及其最终值。",
"failure_output": "明确指出目标策略不存在、配置字段非法,或值仍需用户澄清。"
},
"activate": {
"description": "将策略模板设为默认模板(激活)。注意:这不是启动运行,只是设为默认。",
"description": "将策略模板设为默认模板(激活)。",
"required_slots": ["target_ref"],
"goal": "将某个策略模板设为默认模板,而不是直接运行它。",
"dynamic_rules": [
"必须明确区分“激活模板”和“启动交易员运行”,不要把 activate 解释成运行。"
],
"goal": "将某个策略模板设为默认模板。",
"success_output": "返回 strategy_id并明确告知该策略已被设为默认模板。",
"failure_output": "明确指出目标策略不存在,或激活失败原因。"
},