{ "name": "trader_management", "kind": "management", "domain": "trader", "description": "当用户想创建、查看、修改、删除、启动或停止交易员时调用。交易员是装配层;创建交易员时需要名称以及绑定的交易所、模型、策略。编辑交易员只允许修改手动面板可改的 6 项:绑定交易所、绑定模型、绑定策略、扫描间隔、保证金模式、是否展示到竞技场;不修改这些依赖对象的内部配置,也不在这里改名。若用户要改策略参数、模型配置或交易所凭证,应切到各自的 management skill。创建交易员时交易所、模型、策略既可以直接选择用户已有可用资源,也可以在当前主流程里先新建/启用对应资源,再继续完成交易员创建。不用于排查交易员启动失败、未下单、收益异常、仓位异常等诊断问题。", "intents": [ "创建交易员", "修改交易员", "删除交易员", "启动交易员", "停止交易员", "查询交易员" ], "field_constraints": { "name": { "type": "string", "required": true, "max_length": 50, "description": "交易员名称,用于识别和管理,最多 50 个字符。" }, "exchange_id": { "type": "entity_ref", "required": true, "description": "绑定的交易所配置 ID,必须是已存在且已启用的交易所配置。" }, "ai_model_id": { "type": "entity_ref", "required": true, "description": "绑定的 AI 模型配置 ID,必须是已存在且已启用的模型配置。" }, "strategy_id": { "type": "entity_ref", "required": true, "description": "绑定的策略模板 ID,必须是已存在的策略模板。" }, "scan_interval_minutes": { "type": "int", "min": 3, "max": 60, "default": 5, "description": "AI 扫描决策间隔,单位分钟,手动面板可配置范围 3~60 分钟。超出范围会自动收敛到边界值并告知用户。" }, "is_cross_margin": { "type": "bool", "default": true, "description": "保证金模式。true = 全仓(cross margin),false = 逐仓(isolated margin)。" }, "show_in_competition": { "type": "bool", "default": true, "description": "是否在竞技场中显示该交易员的成绩。" }, "auto_start": { "type": "bool", "default": false, "description": "创建后是否立即启动交易员。启动前系统会校验绑定的交易所、模型、策略均可用。" } }, "validation_rules": [ "exchange_id 对应的交易所配置必须已启用(enabled=true),否则无法创建或启动交易员。", "ai_model_id 对应的模型配置必须已启用(enabled=true)且配置完整(api_key、custom_model_name 不为空;custom_api_url 若填写必须为合法 HTTPS),否则无法创建或启动交易员。", "strategy_id 对应的策略模板必须存在,否则无法创建交易员。", "scan_interval_minutes 超出 3~60 范围时,系统自动收敛到边界值,并通过 LLM 告知用户已调整,询问是否接受。", "交易员初始余额由系统在创建时自动读取绑定交易所账户净值,不接受用户手动设置、充值或修改。", "交易员名称不能从模型 provider 自动推断;用户说“用 claw402”表示模型选择,不表示交易员名称叫 claw402。", "用户明确指定模型、交易所或策略时,若该资源不存在、被禁用、配置不完整或钱包余额不足,必须说明具体原因并让用户确认修复或替换;不得静默换成另一个资源。", "若用户指定 claw402 作为模型,但 claw402 钱包余额为 0 USDC,应提示先充值或确认临时改用其他可用模型;不得说成 claw402 未启用,除非 enabled 确实为 false。", "启动交易员前,绑定的模型必须已启用且完整,绑定的交易所也必须已启用且通过对应交易所的完整性校验,否则拒绝启动并明确指出缺哪一项。", "若绑定的是 OKX 交易所,启用前必须已有 passphrase;若绑定的是 Hyperliquid,启用前必须已有 wallet_addr;若绑定的是 Aster,启用前必须已有 user、signer、private_key;若绑定的是 Lighter,启用前必须已有 wallet_addr 和 api_key_private_key。", "启动(start)和停止(stop)操作属于高风险操作,必须先向用户确认再执行。", "删除(delete)操作不可逆,必须先向用户确认再执行。" ], "actions": { "create": { "description": "创建新的交易员。若缺少交易所、模型或策略,可在当前流程内先选择已有资源,或切去对应 skill 新建/启用后自动回流继续。", "required_slots": ["name", "exchange", "model", "strategy"], "optional_slots": ["auto_start", "scan_interval_minutes", "is_cross_margin", "show_in_competition"], "goal": "创建并初始化一个交易员。", "dynamic_rules": [ "若用户提到的交易所、模型或策略已经存在且可用,应优先直接补入对应槽位,不要重新创建。", "如果用户明确指定某个模型 provider(如 claw402),应先尝试匹配该 provider 对应的模型配置;只有在说明原因并得到用户确认后,才可改用其他模型。", "若用户没有提供交易员名称,应生成一个来自交易所/策略/方向的清晰名称,或向用户追问;不要把模型 provider、交易所类型或策略字段误用为交易员名称。", "若依赖资源不存在、被禁用,或用户明确要求新建或启用,禁止直接报缺字段;应切去对应 management:create 或 management:update_status 子任务。", "子任务成功后,系统会恢复当前交易员草稿并继续补齐剩余槽位。", "scan_interval_minutes 超出 3~60 时,自动收敛并告知用户。", "不要向用户收集或确认初始余额;创建时由系统自动读取绑定交易所账户净值作为初始余额。", "创建完成后询问用户是否立即启动(auto_start),启动前再次确认。" ], "success_output": "返回 trader_id,并给出创建结果摘要(名称、绑定的交易所/模型/策略、是否已启动)。", "failure_output": "用人话指出缺失依赖项,或说明当前正在进入哪个依赖子任务。" }, "update": { "description": "更新已有交易员,但只处理手动面板允许的字段:换绑策略、交易所、模型,或修改扫描间隔、保证金模式、竞技场显示。", "required_slots": ["target_ref"], "optional_slots": ["exchange_id", "ai_model_id", "strategy_id", "scan_interval_minutes", "is_cross_margin", "show_in_competition"], "goal": "更新一个已有交易员的手动面板字段,但不改动策略、模型、交易所内部配置。", "dynamic_rules": [ "只更新用户明确提到的字段,不要覆盖未提及的字段。", "换绑交易所/模型/策略时,新的资源必须已存在且已启用;若是钱包付费模型,还要解释余额不足等支付状态。", "用户明确要求换成某个模型/交易所/策略时,不能自动选择另一个看起来可用的资源,除非用户确认。", "如果用户要求改名,应明确告知交易员改名不在这里处理。", "如果用户实际上是想修改策略参数、模型配置或交易所凭证,不要继续留在 trader update;应切到对应 management skill。" ], "success_output": "返回更新后的 trader_id 与简短配置摘要,明确哪些字段已经生效。", "failure_output": "明确指出目标交易员不存在、依赖资源不可用,或哪一个字段值仍需用户补充/修正。" }, "update_bindings": { "description": "修改交易员手动面板可编辑的字段,可同时修改绑定关系、扫描间隔、保证金模式、竞技场显示。", "required_slots": ["target_ref"], "optional_slots": ["exchange_id", "ai_model_id", "strategy_id", "scan_interval_minutes", "is_cross_margin", "show_in_competition"], "goal": "调整交易员手动面板可编辑的字段,而不改动无关配置。", "dynamic_rules": [ "新绑定的资源必须已存在且已启用,否则提示用户先启用或新建。", "当指定模型是 claw402 或 blockrun-base 且钱包余额不足时,应提示充值或让用户确认临时切换模型。", "扫描间隔超出 3~60 时,自动收敛并告知用户。" ], "success_output": "返回 trader_id,并明确展示新的模型/交易所/策略绑定结果。", "failure_output": "明确指出缺少哪个绑定目标,或当前依赖资源为什么不可直接绑定。" }, "configure_strategy": { "description": "仅修改交易员绑定的策略。", "required_slots": ["target_ref", "strategy_id"], "goal": "为指定交易员换绑一个策略模板。", "dynamic_rules": [ "若用户提到的是不存在的策略,应优先澄清或引导创建,而不是静默失败。" ], "success_output": "返回 trader_id,并明确告知当前生效的 strategy_id/策略名称。", "failure_output": "明确指出目标交易员或策略不存在,或策略仍需用户澄清。" }, "configure_exchange": { "description": "仅修改交易员绑定的交易所。", "required_slots": ["target_ref", "exchange_id"], "goal": "为指定交易员换绑一个交易所配置。", "dynamic_rules": [ "新的交易所配置必须已启用且可用,否则提示用户先启用或补齐凭证。" ], "success_output": "返回 trader_id,并明确告知当前生效的 exchange_id/交易所名称。", "failure_output": "明确指出目标交易员或交易所不存在,或交易所当前不可用。" }, "configure_model": { "description": "仅修改交易员绑定的 AI 模型。", "required_slots": ["target_ref", "ai_model_id"], "goal": "为指定交易员换绑一个 AI 模型配置。", "dynamic_rules": [ "新的模型配置必须已启用且可调用,否则提示用户先启用或补齐模型配置。", "若用户指定的是 claw402,应优先绑定 claw402;只有在钱包余额不足、凭证缺失或配置不可用且用户确认后,才允许改绑其他模型。" ], "success_output": "返回 trader_id,并明确告知当前生效的 ai_model_id/模型名称。", "failure_output": "明确指出目标交易员或模型不存在,或模型当前不可用。" }, "start": { "description": "启动交易员,使其开始自动交易。高风险操作,必须确认。", "required_slots": ["target_ref"], "needs_confirmation": true, "goal": "让一个已配置好的交易员进入运行状态。", "dynamic_rules": [ "启动前系统会自动校验绑定的交易所、模型、策略是否均可用。", "若绑定模型为 claw402 或 blockrun-base 且钱包余额不足,应提示充值或换模型;不要把它泛化成“模型不可用”。", "若校验失败,用人话告知用户具体哪个依赖不可用,并引导修复。" ], "success_output": "返回 trader_id,并明确告知交易员已开始运行。", "failure_output": "明确指出缺少确认、依赖资源不可用,或启动未通过校验。" }, "stop": { "description": "停止交易员,使其停止自动交易。高风险操作,必须确认。", "required_slots": ["target_ref"], "needs_confirmation": true, "goal": "让一个运行中的交易员停止自动交易。", "dynamic_rules": [ "若交易员当前并未运行,也应给用户清晰说明,而不是假装停止成功。" ], "success_output": "返回 trader_id,并明确告知交易员已停止。", "failure_output": "明确指出缺少确认、目标交易员不存在,或当前状态无法停止。" }, "delete": { "description": "删除交易员,不可逆操作,必须确认。支持删除单个、多个或全部交易员。", "required_slots": [], "needs_confirmation": true, "goal": "删除一个、多个或全部交易员及其运行入口。", "dynamic_rules": [ "必须在确认后执行,并明确提醒该操作不可逆。", "删除范围可以是单个 target_ref、多个目标,或 bulk_scope=all。", "删除前必须确认目标交易员都已停止;若存在运行中的交易员,不能删除,应要求用户先停止这些交易员。" ], "success_output": "返回删除成功结果,并明确告知哪些交易员已被移除。", "failure_output": "明确指出缺少确认、目标交易员不存在、目标仍在运行,或删除失败原因。" }, "query_list": { "description": "查询所有交易员列表,包含名称、运行状态、绑定信息。", "goal": "列出当前用户可见的交易员,并给出足够的摘要用于后续选择。", "dynamic_rules": [ "优先返回名称、运行状态、绑定的模型/交易所/策略,不要冗余展开全部详情。" ], "success_output": "返回交易员列表摘要,便于用户继续指定目标对象。", "failure_output": "若列表为空,应明确告知当前没有交易员,而不是返回模糊空结果。" }, "query_running": { "description": "查询当前运行中的交易员列表。", "goal": "仅列出处于运行状态的交易员。", "dynamic_rules": [ "若当前没有运行中的交易员,应明确告知为空。" ], "success_output": "返回当前运行中的交易员列表摘要。", "failure_output": "若没有运行中的交易员,应明确返回空列表说明。" }, "query_detail": { "description": "查询某个交易员的详细配置,包括绑定的交易所、模型、策略、扫描间隔、保证金模式等。", "required_slots": ["target_ref"], "goal": "读取一个交易员的详细配置和当前绑定信息。", "dynamic_rules": [ "若目标对象有歧义,应先澄清再读取详情。" ], "success_output": "返回目标交易员的详细配置摘要。", "failure_output": "明确指出目标交易员不存在,或当前引用需要重新指定。" } }, "tool_mapping": { "create": "manage_trader:create", "update": "manage_trader:update", "update_bindings": "manage_trader:update", "configure_strategy": "manage_trader:update", "configure_exchange": "manage_trader:update", "configure_model": "manage_trader:update", "start": "manage_trader:start", "stop": "manage_trader:stop", "delete": "manage_trader:delete", "query_list": "manage_trader:list", "query_running": "manage_trader:list", "query_detail": "manage_trader:list" } }