From ab6e09423b877ce481fd48b3f26d2def61eec9be Mon Sep 17 00:00:00 2001 From: huangfu <3045324663@qq.com> Date: Tue, 2 Dec 2025 21:41:18 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8E=BB=E9=99=A4ROS2=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E5=86=85=E5=AE=B9=EF=BC=8C=E6=96=B0=E5=A2=9E=E4=B8=80=E9=94=AE?= =?UTF-8?q?=E5=90=AF=E5=8A=A8=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/api_test.log | 286 +++ tools/response.json | 149 -- tools/test_api.py | 115 +- tools/test_validate/api_test_log.txt | 1833 ----------------- tools/test_validate/test_results.csv | 11 + tools/test_validate/test_summary.csv | 22 +- tools/test_validate/test_validity.py | 62 +- .../data_level0.bin | Bin 103800000 -> 1038000 bytes .../header.bin | Bin 100 -> 100 bytes .../length.bin | Bin 40000 -> 400 bytes tools/vector_store/chroma.sqlite3 | Bin 200704 -> 204800 bytes 11 files changed, 460 insertions(+), 2018 deletions(-) create mode 100644 tools/api_test.log delete mode 100644 tools/response.json delete mode 100644 tools/test_validate/api_test_log.txt diff --git a/tools/api_test.log b/tools/api_test.log new file mode 100644 index 00000000..1a4235dc --- /dev/null +++ b/tools/api_test.log @@ -0,0 +1,286 @@ +[2025-12-02 21:36:22] ================================================================================ +[2025-12-02 21:36:22] --- API Test: Generate Plan --- +[2025-12-02 21:36:22] URL: http://127.0.0.1:8000/generate_plan +[2025-12-02 21:36:22] Sending Prompt: "已知目标检测红色气球危险性高于蓝色气球高于绿色气球,飞往搜索区搜索并锁定危险性最高的气球,对其跟踪30秒后进行打击操作" +[2025-12-02 21:36:22] ❌ TEST FAILED: Could not connect to the server. + Please make sure the backend service is running. + Error details: HTTPConnectionPool(host='127.0.0.1', port=8000): Max retries exceeded with url: /generate_plan (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-12-02 21:36:22] ================================================================================ +[2025-12-02 21:36:22] +[2025-12-02 21:38:38] ================================================================================ +[2025-12-02 21:38:38] --- API Test: Generate Plan --- +[2025-12-02 21:38:38] URL: http://127.0.0.1:8000/generate_plan +[2025-12-02 21:38:38] Sending Prompt: "已知目标检测红色气球危险性高于蓝色气球高于绿色气球,飞往搜索区搜索并锁定危险性最高的气球,对其跟踪30秒后进行打击操作" +[2025-12-02 21:38:51] ✅ Received Response: +[2025-12-02 21:38:51] + 📝 组织后的Prompt: +[2025-12-02 21:38:51] === System Prompt === + 任务:根据用户任意任务指令,生成结构化可执行的无人机行为树(Pytree)JSON。**仅输出单一JSON对象,无任何自然语言、注释或额外内容**。 + + ## 一、核心节点定义(格式不可修改,确保后端解析) + #### 1. 可用节点定义 (必须遵守) + 你必须严格从以下JSON定义的列表中选择节点构建行为树,不允许使用未定义节点: + ```json + { + "actions": [ + {"name":"takeoff","params":{"altitude":"float[1,100],默认2"}}, + {"name":"land","params":{"mode":"'current'/'home'"}}, + {"name":"fly_to_waypoint","params":{"x":"±10000","y":"±10000","z":"[1,5000]","acceptance_radius":"默认2.0"}}, + {"name":"move_direction","params":{"direction":"north/south/east/west/forward/backward/left/right","distance":"[1,10000],缺省持续移动"}}, + {"name":"orbit_around_point","params":{"center_x":"±10000","center_y":"±10000","center_z":"[1,5000]","radius":"[5,1000]","laps":"[1,20]","clockwise":"默认true","speed_mps":"[0.5,15]","gimbal_lock":"默认true"}}, + {"name":"orbit_around_target","params":{"target_class":"见object_detect列表","description":"可选,目标属性","radius":"[5,1000]","laps":"[1,20]","clockwise":"默认true","speed_mps":"[0.5,15]","gimbal_lock":"默认true"}}, + {"name":"loiter","params":{"duration":"[1,600]秒/until_condition:可选"}}, + {"name":"object_detect","params":{"target_class":"person,bicycle,car,motorcycle,airplane,bus,train,truck,boat,traffic_light,fire_hydrant,stop_sign,parking_meter,bench,bird,cat,dog,horse,sheep,cow,elephant,bear,zebra,giraffe,backpack,umbrella,handbag,tie,suitcase,frisbee,skis,snowboard,sports_ball,kite,baseball_bat,baseball_glove,skateboard,surfboard,tennis_racket,bottle,wine_glass,cup,fork,knife,spoon,bowl,banana,apple,sandwich,orange,broccoli,carrot,hot_dog,pizza,donut,cake,chair,couch,potted_plant,bed,dining_table,toilet,tv,laptop,mouse,remote,keyboard,cell_phone,microwave,oven,toaster,sink,refrigerator,book,clock,vase,scissors,teddy_bear,hair_drier,toothbrush","description":"可选,","count":"默认1"}}, + {"name":"strike_target","params":{"target_class":"同object_detect","description":"可选,目标属性","count":"默认1"}}, + {"name":"battle_damage_assessment","params":{"target_class":"同object_detect","assessment_time":"[5,60],默认15"}}, + {"name":"search_pattern","params":{"pattern_type":"spiral/grid","center_x":"±10000","center_y":"±10000","center_z":"[1,5000]","radius":"[5,1000]","target_class":"同object_detect","description":"可选,目标属性","count":"默认1"}}, + {"name":"track_object","params":{"target_class":"同object_detect","description":"可选,目标属性","track_time":"[1,600]秒(必传,不可用'duration')","min_confidence":"[0.5,1.0]默认0.7","safe_distance":"[2,50]默认10"}}, + {"name":"deliver_payload","params":{"payload_type":"string","release_altitude":"[2,100]默认5"}}, + {"name":"preflight_checks","params":{"check_level":"basic/comprehensive"}}, + {"name":"emergency_return","params":{"reason":"string"}} + ], + "conditions": [ + {"name":"battery_above","params":{"threshold":"[0.0,1.0],必传"}}, + {"name":"at_waypoint","params":{"x":"±10000","y":"±10000","z":"[1,5000]","tolerance":"默认3.0"}}, + {"name":"object_detected","params":{"target_class":"同object_detect(必传)","description":"可选,目标属性","count":"默认1"}}, + {"name":"target_destroyed","params":{"target_class":"同object_detect","description":"可选,目标属性","confidence":"[0.5,1.0]默认0.8"}}, + {"name":"time_elapsed","params":{"duration":"[1,2700]秒"}}, + {"name":"gps_status","params":{"min_satellites":"int[6,15],必传(如8)"}} + ], + "control_flow": [ + {"name":"Sequence","params":{},"children":"子节点数组(按序执行,全成功则成功)"}, + {"name":"Selector","params":{"memory":"默认true"},"children":"子节点数组(执行到成功为止)"}, + {"name":"Parallel","params":{"policy":"all_success"},"children":"子节点数组(同时执行,严禁用'one_success')"} + ] + } + ``` + + + ## 二、节点必填字段(后端Schema强制要求,缺一验证失败) + 每个节点必须包含以下字段,字段名/类型不可自定义: + 1. **`type`**: + - 动作节点→`"action"`,条件节点→`"condition"`,控制流节点→`"Sequence"`/`"Selector"`/`"Parallel"`(与`name`字段值完全一致); + 2. **`name`**:必须是上述JSON中`actions`/`conditions`/`control_flow`下的`name`值(如“gps_status”不可错写为“gps_check”); + 3. **`params`**:严格匹配上述节点的`params`定义,无自定义参数(如优先级排序不可加“priority”字段,仅用`description`); + 4. **`children`**:仅控制流节点必含(子节点数组),动作/条件节点无此字段。 + + + ## 三、行为树固定结构(通用不变,确保安全验证) + 根节点必须是`Parallel`,`children`含`MainTask`(Sequence)和`SafetyMonitor`(Selector),结构不随任务类型(含优先级排序)修改: + ```json + { + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": {"policy": "all_success"}, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "params": {}, + "children": [ + // 通用主任务步骤(含优先级排序任务示例,需按用户指令替换): + {"type":"action","name":"preflight_checks","params":{"check_level":"comprehensive"}}, + {"type":"action","name":"takeoff","params":{"altitude":10.0}}, + {"type":"action","name":"fly_to_waypoint","params":{"x":200.0,"y":150.0,"z":10.0}}, // 搜索区坐标(用户未给时填合理值) + {"type":"action","name":"search_pattern","params":{"pattern_type":"grid","center_x":200.0,"center_y":150.0,"center_z":10.0,"radius":50.0,"target_class":"balloon","description":"红色"}}, + {"type":"condition","name":"object_detected","params":{"target_class":"balloon","description":"红色"}}, // 确认高优先级目标 + {"type":"action","name":"track_object","params":{"target_class":"balloon","description":"红色","track_time":30.0}}, + {"type":"action","name":"strike_target","params":{"target_class":"balloon","description":"红色"}}, + {"type":"action","name":"land","params":{"mode":"home"}} + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": {"memory": true}, + "children": [ + {"type":"condition","name":"battery_above","params":{"threshold":0.3}}, + {"type":"condition","name":"gps_status","params":{"min_satellites":8}}, + { + "type":"Sequence", + "name":"EmergencyHandler", + "params": {}, + "children": [ + {"type":"action","name":"emergency_return","params":{"reason":"safety_breach"}}, + {"type":"action","name":"land","params":{"mode":"home"}} + ] + } + ] + } + ] + } + } + ``` + + + ## 四、优先级排序任务通用示例 + 当用户指令中明确提出有多个待考察且具有优先级关系的物体时,节点描述须为优先级关系。比如当指令为已知有三个气球,危险级关系为红色气球大于蓝色气球大于绿色气球,要求优先跟踪最危险的气球时,节点的描述参考下表情形。 + | 用户指令场景 | `target_class` | `description` | 核心节点示例(search_pattern) | + |-----------------------------|-----------------|-------------------------|------------------------------------------------------------------------------------------------| + | 红气球>蓝气球>绿气球 | `balloon` | `(红>蓝>绿)` | `{"type":"action","name":"search_pattern","params":{"pattern_type":"grid","center_x":200,"center_y":150,"center_z":10,"radius":50,"target_class":"balloon","description":"(红>蓝>绿)"}}` | + | 军用卡车>民用卡车>面包车 | `truck` | `(军用卡车>民用卡车>面包车)` | `{"type":"action","name":"object_detect","params":{"target_class":"truck","description":"(军用卡车>民用卡车>面包车)"}}` | + + + ## 五、高频错误规避(确保验证通过) + 1. 优先级排序不可修改`target_class`:如“民用卡车、面包车与军用卡车中,军用卡车优先”,`target_class`仍为`truck`,仅用`description`填排序规则; + 2. 在没有明确指出物体之间的优先级关系情况下,`description`字段只描述物体属性本身,严禁与用户指令中不存在的物体进行排序; + 3. `track_object`必传`track_time`:不可用`duration`替代(如跟踪30秒填`"track_time":30.0`); + 4. `gps_status`的`min_satellites`必须在6-15之间(如8,不可缺省); + 5. 无自定义节点:“锁定高优先级目标”需通过`object_detect`+`object_detected`实现,不可用“lock_high_risk_target”。 + + + ## 六、输出要求 + 仅输出1个严格符合上述所有规则的JSON对象,**确保:1. 优先级排序逻辑正确填入`description`;2. `target_class`匹配预定义列表;3. 行为树结构不变;4. 后端解析与Schema验证无错误**,无任何冗余内容。 + + + 【强制规则】仅生成包含root的复杂行为树JSON,不得输出简单模式(不得包含mode字段或仅有action节点)。 + + === User Prompt === + 已知目标检测红色气球危险性高于蓝色气球高于绿色气球,飞往搜索区搜索并锁定危险性最高的气球,对其跟踪30秒后进行打击操作 + + --- + 参考知识: + 以下是从知识库中检索到的、与当前任务最相关的信息,请优先参考这些信息来生成结果: + 在地图上有一个名为 '学生宿舍' 的地点或区域,它的building是'dormitory',其中心位置坐标大约在 (x:5, y:3, z:2)。 + + 在地图上有一个名为 '跷跷板' 的地点或区域,它的leisure是'playground',其中心位置坐标大约在 (x:15, y:-8.5, z:1.2)。 + + 在地图上有一个名为 'A地' 的地点或区域,它的building是'commercial',其中心位置坐标大约在 (x:10, y:-10, z:2)。 + --- +[2025-12-02 21:38:51] + 完整响应内容: +[2025-12-02 21:38:51] { + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "params": {}, + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 10.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 15.0, + "y": -8.5, + "z": 1.2 + } + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 15.0, + "center_y": -8.5, + "center_z": 1.1, + "radius": 50.0, + "target_class": "balloon", + "description": "(红>蓝>绿)" + } + }, + { + "type": "condition", + "name": "object_detected", + "params": { + "target_class": "balloon", + "description": "(红>蓝>绿)" + } + }, + { + "type": "action", + "name": "track_object", + "params": { + "target_class": "balloon", + "description": "(红>蓝>绿)", + "track_time": 30.0 + } + }, + { + "type": "action", + "name": "strike_target", + "params": { + "target_class": "balloon", + "description": "(红>蓝>绿)" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.3 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "params": {}, + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "a4ed4c91-a277-4ab5-b3c1-7fd351f0e844", + "visualization_url": "/static/py_tree.png", + "final_prompt": "=== System Prompt ===\n任务:根据用户任意任务指令,生成结构化可执行的无人机行为树(Pytree)JSON。**仅输出单一JSON对象,无任何自然语言、注释或额外内容**。\n\n## 一、核心节点定义(格式不可修改,确保后端解析)\n#### 1. 可用节点定义 (必须遵守)\n你必须严格从以下JSON定义的列表中选择节点构建行为树,不允许使用未定义节点:\n```json\n{\n \"actions\": [\n {\"name\":\"takeoff\",\"params\":{\"altitude\":\"float[1,100],默认2\"}},\n {\"name\":\"land\",\"params\":{\"mode\":\"'current'/'home'\"}},\n {\"name\":\"fly_to_waypoint\",\"params\":{\"x\":\"±10000\",\"y\":\"±10000\",\"z\":\"[1,5000]\",\"acceptance_radius\":\"默认2.0\"}},\n {\"name\":\"move_direction\",\"params\":{\"direction\":\"north/south/east/west/forward/backward/left/right\",\"distance\":\"[1,10000],缺省持续移动\"}},\n {\"name\":\"orbit_around_point\",\"params\":{\"center_x\":\"±10000\",\"center_y\":\"±10000\",\"center_z\":\"[1,5000]\",\"radius\":\"[5,1000]\",\"laps\":\"[1,20]\",\"clockwise\":\"默认true\",\"speed_mps\":\"[0.5,15]\",\"gimbal_lock\":\"默认true\"}},\n {\"name\":\"orbit_around_target\",\"params\":{\"target_class\":\"见object_detect列表\",\"description\":\"可选,目标属性\",\"radius\":\"[5,1000]\",\"laps\":\"[1,20]\",\"clockwise\":\"默认true\",\"speed_mps\":\"[0.5,15]\",\"gimbal_lock\":\"默认true\"}},\n {\"name\":\"loiter\",\"params\":{\"duration\":\"[1,600]秒/until_condition:可选\"}},\n {\"name\":\"object_detect\",\"params\":{\"target_class\":\"person,bicycle,car,motorcycle,airplane,bus,train,truck,boat,traffic_light,fire_hydrant,stop_sign,parking_meter,bench,bird,cat,dog,horse,sheep,cow,elephant,bear,zebra,giraffe,backpack,umbrella,handbag,tie,suitcase,frisbee,skis,snowboard,sports_ball,kite,baseball_bat,baseball_glove,skateboard,surfboard,tennis_racket,bottle,wine_glass,cup,fork,knife,spoon,bowl,banana,apple,sandwich,orange,broccoli,carrot,hot_dog,pizza,donut,cake,chair,couch,potted_plant,bed,dining_table,toilet,tv,laptop,mouse,remote,keyboard,cell_phone,microwave,oven,toaster,sink,refrigerator,book,clock,vase,scissors,teddy_bear,hair_drier,toothbrush\",\"description\":\"可选,\",\"count\":\"默认1\"}},\n {\"name\":\"strike_target\",\"params\":{\"target_class\":\"同object_detect\",\"description\":\"可选,目标属性\",\"count\":\"默认1\"}},\n {\"name\":\"battle_damage_assessment\",\"params\":{\"target_class\":\"同object_detect\",\"assessment_time\":\"[5,60],默认15\"}},\n {\"name\":\"search_pattern\",\"params\":{\"pattern_type\":\"spiral/grid\",\"center_x\":\"±10000\",\"center_y\":\"±10000\",\"center_z\":\"[1,5000]\",\"radius\":\"[5,1000]\",\"target_class\":\"同object_detect\",\"description\":\"可选,目标属性\",\"count\":\"默认1\"}},\n {\"name\":\"track_object\",\"params\":{\"target_class\":\"同object_detect\",\"description\":\"可选,目标属性\",\"track_time\":\"[1,600]秒(必传,不可用'duration')\",\"min_confidence\":\"[0.5,1.0]默认0.7\",\"safe_distance\":\"[2,50]默认10\"}},\n {\"name\":\"deliver_payload\",\"params\":{\"payload_type\":\"string\",\"release_altitude\":\"[2,100]默认5\"}},\n {\"name\":\"preflight_checks\",\"params\":{\"check_level\":\"basic/comprehensive\"}},\n {\"name\":\"emergency_return\",\"params\":{\"reason\":\"string\"}}\n ],\n \"conditions\": [\n {\"name\":\"battery_above\",\"params\":{\"threshold\":\"[0.0,1.0],必传\"}},\n {\"name\":\"at_waypoint\",\"params\":{\"x\":\"±10000\",\"y\":\"±10000\",\"z\":\"[1,5000]\",\"tolerance\":\"默认3.0\"}},\n {\"name\":\"object_detected\",\"params\":{\"target_class\":\"同object_detect(必传)\",\"description\":\"可选,目标属性\",\"count\":\"默认1\"}},\n {\"name\":\"target_destroyed\",\"params\":{\"target_class\":\"同object_detect\",\"description\":\"可选,目标属性\",\"confidence\":\"[0.5,1.0]默认0.8\"}},\n {\"name\":\"time_elapsed\",\"params\":{\"duration\":\"[1,2700]秒\"}},\n {\"name\":\"gps_status\",\"params\":{\"min_satellites\":\"int[6,15],必传(如8)\"}}\n ],\n \"control_flow\": [\n {\"name\":\"Sequence\",\"params\":{},\"children\":\"子节点数组(按序执行,全成功则成功)\"},\n {\"name\":\"Selector\",\"params\":{\"memory\":\"默认true\"},\"children\":\"子节点数组(执行到成功为止)\"},\n {\"name\":\"Parallel\",\"params\":{\"policy\":\"all_success\"},\"children\":\"子节点数组(同时执行,严禁用'one_success')\"}\n ]\n}\n```\n\n\n## 二、节点必填字段(后端Schema强制要求,缺一验证失败)\n每个节点必须包含以下字段,字段名/类型不可自定义:\n1. **`type`**: \n - 动作节点→`\"action\"`,条件节点→`\"condition\"`,控制流节点→`\"Sequence\"`/`\"Selector\"`/`\"Parallel\"`(与`name`字段值完全一致);\n2. **`name`**:必须是上述JSON中`actions`/`conditions`/`control_flow`下的`name`值(如“gps_status”不可错写为“gps_check”);\n3. **`params`**:严格匹配上述节点的`params`定义,无自定义参数(如优先级排序不可加“priority”字段,仅用`description`);\n4. **`children`**:仅控制流节点必含(子节点数组),动作/条件节点无此字段。\n\n\n## 三、行为树固定结构(通用不变,确保安全验证)\n根节点必须是`Parallel`,`children`含`MainTask`(Sequence)和`SafetyMonitor`(Selector),结构不随任务类型(含优先级排序)修改:\n```json\n{\n \"root\": {\n \"type\": \"Parallel\",\n \"name\": \"MissionWithSafety\",\n \"params\": {\"policy\": \"all_success\"},\n \"children\": [\n {\n \"type\": \"Sequence\",\n \"name\": \"MainTask\",\n \"params\": {},\n \"children\": [\n // 通用主任务步骤(含优先级排序任务示例,需按用户指令替换):\n {\"type\":\"action\",\"name\":\"preflight_checks\",\"params\":{\"check_level\":\"comprehensive\"}},\n {\"type\":\"action\",\"name\":\"takeoff\",\"params\":{\"altitude\":10.0}},\n {\"type\":\"action\",\"name\":\"fly_to_waypoint\",\"params\":{\"x\":200.0,\"y\":150.0,\"z\":10.0}}, // 搜索区坐标(用户未给时填合理值)\n {\"type\":\"action\",\"name\":\"search_pattern\",\"params\":{\"pattern_type\":\"grid\",\"center_x\":200.0,\"center_y\":150.0,\"center_z\":10.0,\"radius\":50.0,\"target_class\":\"balloon\",\"description\":\"红色\"}},\n {\"type\":\"condition\",\"name\":\"object_detected\",\"params\":{\"target_class\":\"balloon\",\"description\":\"红色\"}}, // 确认高优先级目标\n {\"type\":\"action\",\"name\":\"track_object\",\"params\":{\"target_class\":\"balloon\",\"description\":\"红色\",\"track_time\":30.0}},\n {\"type\":\"action\",\"name\":\"strike_target\",\"params\":{\"target_class\":\"balloon\",\"description\":\"红色\"}},\n {\"type\":\"action\",\"name\":\"land\",\"params\":{\"mode\":\"home\"}}\n ]\n },\n {\n \"type\": \"Selector\",\n \"name\": \"SafetyMonitor\",\n \"params\": {\"memory\": true},\n \"children\": [\n {\"type\":\"condition\",\"name\":\"battery_above\",\"params\":{\"threshold\":0.3}},\n {\"type\":\"condition\",\"name\":\"gps_status\",\"params\":{\"min_satellites\":8}},\n {\n \"type\":\"Sequence\",\n \"name\":\"EmergencyHandler\",\n \"params\": {},\n \"children\": [\n {\"type\":\"action\",\"name\":\"emergency_return\",\"params\":{\"reason\":\"safety_breach\"}},\n {\"type\":\"action\",\"name\":\"land\",\"params\":{\"mode\":\"home\"}}\n ]\n }\n ]\n }\n ]\n }\n}\n```\n\n\n## 四、优先级排序任务通用示例\n当用户指令中明确提出有多个待考察且具有优先级关系的物体时,节点描述须为优先级关系。比如当指令为已知有三个气球,危险级关系为红色气球大于蓝色气球大于绿色气球,要求优先跟踪最危险的气球时,节点的描述参考下表情形。\n| 用户指令场景 | `target_class` | `description` | 核心节点示例(search_pattern) |\n|-----------------------------|-----------------|-------------------------|------------------------------------------------------------------------------------------------|\n| 红气球>蓝气球>绿气球 | `balloon` | `(红>蓝>绿)` | `{\"type\":\"action\",\"name\":\"search_pattern\",\"params\":{\"pattern_type\":\"grid\",\"center_x\":200,\"center_y\":150,\"center_z\":10,\"radius\":50,\"target_class\":\"balloon\",\"description\":\"(红>蓝>绿)\"}}` |\n| 军用卡车>民用卡车>面包车 | `truck` | `(军用卡车>民用卡车>面包车)` | `{\"type\":\"action\",\"name\":\"object_detect\",\"params\":{\"target_class\":\"truck\",\"description\":\"(军用卡车>民用卡车>面包车)\"}}` |\n\n\n## 五、高频错误规避(确保验证通过)\n1. 优先级排序不可修改`target_class`:如“民用卡车、面包车与军用卡车中,军用卡车优先”,`target_class`仍为`truck`,仅用`description`填排序规则;\n2. 在没有明确指出物体之间的优先级关系情况下,`description`字段只描述物体属性本身,严禁与用户指令中不存在的物体进行排序;\n3. `track_object`必传`track_time`:不可用`duration`替代(如跟踪30秒填`\"track_time\":30.0`);\n4. `gps_status`的`min_satellites`必须在6-15之间(如8,不可缺省);\n5. 无自定义节点:“锁定高优先级目标”需通过`object_detect`+`object_detected`实现,不可用“lock_high_risk_target”。\n\n\n## 六、输出要求\n仅输出1个严格符合上述所有规则的JSON对象,**确保:1. 优先级排序逻辑正确填入`description`;2. `target_class`匹配预定义列表;3. 行为树结构不变;4. 后端解析与Schema验证无错误**,无任何冗余内容。\n\n\n【强制规则】仅生成包含root的复杂行为树JSON,不得输出简单模式(不得包含mode字段或仅有action节点)。\n\n=== User Prompt ===\n已知目标检测红色气球危险性高于蓝色气球高于绿色气球,飞往搜索区搜索并锁定危险性最高的气球,对其跟踪30秒后进行打击操作\n\n---\n参考知识:\n以下是从知识库中检索到的、与当前任务最相关的信息,请优先参考这些信息来生成结果:\n在地图上有一个名为 '学生宿舍' 的地点或区域,它的building是'dormitory',其中心位置坐标大约在 (x:5, y:3, z:2)。\n\n在地图上有一个名为 '跷跷板' 的地点或区域,它的leisure是'playground',其中心位置坐标大约在 (x:15, y:-8.5, z:1.2)。\n\n在地图上有一个名为 'A地' 的地点或区域,它的building是'commercial',其中心位置坐标大约在 (x:10, y:-10, z:2)。\n---" + } +[2025-12-02 21:38:51] + --- Validation Checks --- +[2025-12-02 21:38:51] PASS: Response is a valid JSON object. +[2025-12-02 21:38:51] PASS: Response contains a valid 'root' key. +[2025-12-02 21:38:51] PASS: Response contains a valid 'visualization_url': /static/py_tree.png +[2025-12-02 21:38:51] ✅ Test completed successfully +[2025-12-02 21:38:51] ================================================================================ +[2025-12-02 21:38:51] diff --git a/tools/response.json b/tools/response.json deleted file mode 100644 index a4153b8f..00000000 --- a/tools/response.json +++ /dev/null @@ -1,149 +0,0 @@ -{ - "plan_id": "9f743b03-8ba7-4a06-9260-337463887fc2", - "root": { - "children": [ - { - "children": [ - { - "name": "preflight_checks", - "params": { - "check_level": "comprehensive" - }, - "type": "action" - }, - { - "name": "takeoff", - "params": { - "altitude": 2 - }, - "type": "action" - }, - { - "name": "fly_to_waypoint", - "params": { - "acceptance_radius": 2, - "x": 5, - "y": 3, - "z": 2 - }, - "type": "action" - }, - { - "children": [ - { - "children": [ - { - "name": "loiter", - "params": { - "duration": 10 - }, - "type": "action" - }, - { - "name": "object_detect", - "params": { - "count": 1, - "description": "学生", - "target_class": "person" - }, - "type": "action" - } - ], - "name": "DirectDetectionSequence", - "type": "Sequence" - }, - { - "name": "search_pattern", - "params": { - "center_x": 5, - "center_y": 3, - "center_z": 2, - "count": 1, - "description": "学生", - "pattern_type": "spiral", - "radius": 50, - "target_class": "person" - }, - "type": "action" - } - ], - "name": "TargetAcquisitionSelector", - "params": { - "memory": true - }, - "type": "Selector" - }, - { - "name": "track_object", - "params": { - "description": "学生", - "min_confidence": 0.7, - "safe_distance": 10, - "target_class": "person", - "track_time": 20 - }, - "type": "action" - }, - { - "name": "land", - "params": { - "mode": "home" - }, - "type": "action" - } - ], - "name": "MainTrackingTask", - "type": "Sequence" - }, - { - "children": [ - { - "name": "battery_above", - "params": { - "threshold": 0.35 - }, - "type": "condition" - }, - { - "name": "gps_status", - "params": { - "min_satellites": 8 - }, - "type": "condition" - }, - { - "children": [ - { - "name": "emergency_return", - "params": { - "reason": "safety_breach" - }, - "type": "action" - }, - { - "name": "land", - "params": { - "mode": "home" - }, - "type": "action" - } - ], - "name": "EmergencyHandler", - "type": "Sequence" - } - ], - "name": "SafetyMonitor", - "params": { - "memory": true - }, - "type": "Selector" - } - ], - "name": "TrackingMission", - "params": { - "policy": "all_success" - }, - "type": "Parallel" - }, - "visualization_url": "/static/py_tree.png" -} diff --git a/tools/test_api.py b/tools/test_api.py index 739d78ef..d9184e34 100644 --- a/tools/test_api.py +++ b/tools/test_api.py @@ -3,6 +3,8 @@ import requests import json +import os +from datetime import datetime # --- Configuration --- # The base URL of your running FastAPI service @@ -14,17 +16,49 @@ ENDPOINT = "/generate_plan" # The user prompt we will send for the test TEST_PROMPT = "已知目标检测红色气球危险性高于蓝色气球高于绿色气球,飞往搜索区搜索并锁定危险性最高的气球,对其跟踪30秒后进行打击操作" +# Log file path (will be created in the same directory as this script) +LOG_FILE = os.path.join(os.path.dirname(__file__), "api_test.log") + +def write_log(message, print_to_console=True): + """ + Write a message to the log file in append mode. + Supports multi-line messages - only the first line gets timestamp. + + Args: + message: The message to write (can be multi-line) + print_to_console: Whether to also print to console (default: True) + """ + timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + + # Split message into lines and add timestamp to first line only + lines = message.split('\n') + log_entries = [f"[{timestamp}] {lines[0]}\n"] + for line in lines[1:]: + log_entries.append(f"{' ' * (len(timestamp) + 3)}{line}\n") # Indent continuation lines + + try: + with open(LOG_FILE, "a", encoding="utf-8") as f: + f.writelines(log_entries) + except Exception as e: + print(f"⚠️ Warning: Failed to write to log file: {e}") + + if print_to_console: + print(message) + def test_generate_plan(): """ Sends a request to the /generate_plan endpoint and validates the response. + All results are logged to the log file for continuous tracking. """ url = BASE_URL + ENDPOINT payload = {"user_prompt": TEST_PROMPT} headers = {"Content-Type": "application/json"} - print("--- API Test: Generate Plan ---") - print(f"✅ URL: {url}") - print(f"✅ Sending Prompt: \"{TEST_PROMPT}\"") + # Write separator and test start info to log + write_log("=" * 80, print_to_console=False) + write_log("--- API Test: Generate Plan ---") + write_log(f"URL: {url}") + write_log(f"Sending Prompt: \"{TEST_PROMPT}\"") try: # Send the POST request @@ -36,40 +70,85 @@ def test_generate_plan(): # Parse the JSON response data = response.json() - print("✅ Received Response:") - print(json.dumps(data, indent=2, ensure_ascii=False)) + # Extract and log organized prompt if available in response + organized_prompt = None + if isinstance(data, dict): + # Check for various possible field names for organized prompt + organized_prompt = data.get("organized_prompt") or \ + data.get("processed_prompt") or \ + data.get("final_prompt") or \ + data.get("enhanced_prompt") or \ + data.get("user_prompt_enhanced") + + write_log("✅ Received Response:") + + # Log organized prompt if found + if organized_prompt: + write_log("\n📝 组织后的Prompt:") + write_log(organized_prompt) + else: + # If not in response, log the original prompt for reference + write_log("\n📝 原始Prompt:") + write_log(f" {TEST_PROMPT}") + write_log(" (注: 组织后的prompt未在API响应中返回,如需查看请检查后端日志)") + + response_json = json.dumps(data, indent=2, ensure_ascii=False) + write_log("\n完整响应内容:") + write_log(response_json) # --- Validation --- - print("\n--- Validation Checks ---") + write_log("\n--- Validation Checks ---") + + validation_results = [] # 1. Check if the response is a dictionary if isinstance(data, dict): - print("PASS: Response is a valid JSON object.") + validation_results.append("PASS: Response is a valid JSON object.") else: - print("FAIL: Response is not a valid JSON object.") + validation_results.append("FAIL: Response is not a valid JSON object.") + # Write all validation results to log before returning + for result in validation_results: + write_log(result) + write_log("=" * 80, print_to_console=False) + write_log("", print_to_console=False) # Empty line for readability return # 2. Check for the existence of the 'root' key if "root" in data and isinstance(data['root'], dict): - print("PASS: Response contains a valid 'root' key.") + validation_results.append("PASS: Response contains a valid 'root' key.") else: - print("FAIL: Response does not contain a valid 'root' key.") + validation_results.append("FAIL: Response does not contain a valid 'root' key.") # 3. Check for the existence and format of the 'visualization_url' key if "visualization_url" in data and data["visualization_url"].endswith(".png"): - print(f"PASS: Response contains a valid 'visualization_url': {data['visualization_url']}") + validation_results.append(f"PASS: Response contains a valid 'visualization_url': {data['visualization_url']}") else: - print("FAIL: Response does not contain a valid 'visualization_url'.") + validation_results.append("FAIL: Response does not contain a valid 'visualization_url'.") + + # Write all validation results to log + for result in validation_results: + write_log(result) + + # Write test completion marker + write_log("✅ Test completed successfully") + write_log("=" * 80, print_to_console=False) + write_log("", print_to_console=False) # Empty line for readability except requests.exceptions.RequestException as e: - print(f"\n❌ TEST FAILED: Could not connect to the server.") - print(" Please make sure the backend service is running.") - print(f" Error details: {e}") + error_msg = f"❌ TEST FAILED: Could not connect to the server.\n Please make sure the backend service is running.\n Error details: {e}" + write_log(error_msg) + write_log("=" * 80, print_to_console=False) + write_log("", print_to_console=False) # Empty line for readability except json.JSONDecodeError: - print(f"\n❌ TEST FAILED: The server response was not valid JSON.") - print(f" Response text: {response.text}") + error_msg = f"❌ TEST FAILED: The server response was not valid JSON.\n Response text: {response.text}" + write_log(error_msg) + write_log("=" * 80, print_to_console=False) + write_log("", print_to_console=False) # Empty line for readability except Exception as e: - print(f"\n❌ TEST FAILED: An unexpected error occurred: {e}") + error_msg = f"❌ TEST FAILED: An unexpected error occurred: {e}" + write_log(error_msg) + write_log("=" * 80, print_to_console=False) + write_log("", print_to_console=False) # Empty line for readability if __name__ == "__main__": test_generate_plan() diff --git a/tools/test_validate/api_test_log.txt b/tools/test_validate/api_test_log.txt deleted file mode 100644 index d9041f04..00000000 --- a/tools/test_validate/api_test_log.txt +++ /dev/null @@ -1,1833 +0,0 @@ - -================================================================================ -指令 #1 - 运行 #1 - 2025-09-08 09:38:02 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方降落 -尝试次数: 1 -响应时间: 8.96秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #1 - 运行 #2 - 2025-09-08 09:38:11 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方降落 -尝试次数: 1 -响应时间: 7.76秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #1 - 运行 #3 - 2025-09-08 09:38:20 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方降落 -尝试次数: 1 -响应时间: 7.73秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #1 - 运行 #4 - 2025-09-08 09:38:29 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方降落 -尝试次数: 1 -响应时间: 7.85秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #1 - 运行 #5 - 2025-09-08 09:38:38 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方降落 -尝试次数: 1 -响应时间: 7.82秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #1 - 运行 #6 - 2025-09-08 09:38:46 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方降落 -尝试次数: 1 -响应时间: 7.75秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #1 - 运行 #7 - 2025-09-08 09:38:55 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方降落 -尝试次数: 1 -响应时间: 7.81秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #1 - 运行 #8 - 2025-09-08 09:39:04 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方降落 -尝试次数: 1 -响应时间: 7.79秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #1 - 运行 #9 - 2025-09-08 09:39:13 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方降落 -尝试次数: 1 -响应时间: 7.82秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #1 - 运行 #10 - 2025-09-08 09:39:22 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方降落 -尝试次数: 1 -响应时间: 7.79秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #2 - 运行 #1 - 2025-09-08 09:39:48 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方查找蓝色的车 -尝试次数: 1 -响应时间: 25.25秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #2 - 运行 #2 - 2025-09-08 09:39:58 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方查找蓝色的车 -尝试次数: 1 -响应时间: 9.40秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #2 - 运行 #3 - 2025-09-08 09:40:10 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方查找蓝色的车 -尝试次数: 1 -响应时间: 10.36秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #2 - 运行 #4 - 2025-09-08 09:40:24 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方查找蓝色的车 -尝试次数: 1 -响应时间: 13.88秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #2 - 运行 #5 - 2025-09-08 09:41:00 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方查找蓝色的车 -尝试次数: 1 -响应时间: 34.45秒 -结果: ❌ 失败 -错误信息: None - -================================================================================ -指令 #2 - 运行 #6 - 2025-09-08 09:41:15 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方查找蓝色的车 -尝试次数: 1 -响应时间: 13.95秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #2 - 运行 #7 - 2025-09-08 09:41:25 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方查找蓝色的车 -尝试次数: 1 -响应时间: 9.54秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #2 - 运行 #8 - 2025-09-08 09:41:52 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方查找蓝色的车 -尝试次数: 1 -响应时间: 25.44秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #2 - 运行 #9 - 2025-09-08 09:42:03 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方查找蓝色的车 -尝试次数: 1 -响应时间: 10.33秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #2 - 运行 #10 - 2025-09-08 09:42:14 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方查找蓝色的车 -尝试次数: 1 -响应时间: 9.45秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #3 - 运行 #1 - 2025-09-08 09:42:23 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方寻找蓝色的车 -尝试次数: 1 -响应时间: 8.51秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #3 - 运行 #2 - 2025-09-08 09:42:37 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方寻找蓝色的车 -尝试次数: 1 -响应时间: 13.08秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #3 - 运行 #3 - 2025-09-08 09:42:51 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方寻找蓝色的车 -尝试次数: 1 -响应时间: 12.99秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #3 - 运行 #4 - 2025-09-08 09:43:05 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方寻找蓝色的车 -尝试次数: 1 -响应时间: 13.02秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #3 - 运行 #5 - 2025-09-08 09:43:19 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方寻找蓝色的车 -尝试次数: 1 -响应时间: 13.00秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #3 - 运行 #6 - 2025-09-08 09:43:33 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方寻找蓝色的车 -尝试次数: 1 -响应时间: 12.95秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #3 - 运行 #7 - 2025-09-08 09:43:47 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方寻找蓝色的车 -尝试次数: 1 -响应时间: 12.95秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #3 - 运行 #8 - 2025-09-08 09:44:01 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方寻找蓝色的车 -尝试次数: 1 -响应时间: 12.97秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #3 - 运行 #9 - 2025-09-08 09:44:09 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方寻找蓝色的车 -尝试次数: 1 -响应时间: 7.00秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #3 - 运行 #10 - 2025-09-08 09:44:23 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方寻找蓝色的车 -尝试次数: 1 -响应时间: 13.02秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #4 - 运行 #1 - 2025-09-08 09:44:37 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方检测蓝色的车 -尝试次数: 1 -响应时间: 13.09秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #4 - 运行 #2 - 2025-09-08 09:44:47 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方检测蓝色的车 -尝试次数: 1 -响应时间: 9.09秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #4 - 运行 #3 - 2025-09-08 09:45:01 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方检测蓝色的车 -尝试次数: 1 -响应时间: 12.94秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #4 - 运行 #4 - 2025-09-08 09:45:15 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方检测蓝色的车 -尝试次数: 1 -响应时间: 12.97秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #4 - 运行 #5 - 2025-09-08 09:45:29 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方检测蓝色的车 -尝试次数: 1 -响应时间: 12.99秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #4 - 运行 #6 - 2025-09-08 09:45:43 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方检测蓝色的车 -尝试次数: 1 -响应时间: 13.00秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #4 - 运行 #7 - 2025-09-08 09:45:57 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方检测蓝色的车 -尝试次数: 1 -响应时间: 13.01秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #4 - 运行 #8 - 2025-09-08 09:46:11 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方检测蓝色的车 -尝试次数: 1 -响应时间: 12.97秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #4 - 运行 #9 - 2025-09-08 09:46:25 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方检测蓝色的车 -尝试次数: 1 -响应时间: 12.94秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #4 - 运行 #10 - 2025-09-08 09:46:35 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方检测蓝色的车 -尝试次数: 1 -响应时间: 9.09秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #5 - 运行 #1 - 2025-09-08 09:46:49 -HTTP状态: 200 -指令: 飞到学生宿舍上方查找蓝色的车 -尝试次数: 1 -响应时间: 13.07秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #5 - 运行 #2 - 2025-09-08 09:47:03 -HTTP状态: 200 -指令: 飞到学生宿舍上方查找蓝色的车 -尝试次数: 1 -响应时间: 13.07秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #5 - 运行 #3 - 2025-09-08 09:47:17 -HTTP状态: 200 -指令: 飞到学生宿舍上方查找蓝色的车 -尝试次数: 1 -响应时间: 12.98秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #5 - 运行 #4 - 2025-09-08 09:47:31 -HTTP状态: 200 -指令: 飞到学生宿舍上方查找蓝色的车 -尝试次数: 1 -响应时间: 13.01秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #5 - 运行 #5 - 2025-09-08 09:47:45 -HTTP状态: 200 -指令: 飞到学生宿舍上方查找蓝色的车 -尝试次数: 1 -响应时间: 12.79秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #5 - 运行 #6 - 2025-09-08 09:47:59 -HTTP状态: 200 -指令: 飞到学生宿舍上方查找蓝色的车 -尝试次数: 1 -响应时间: 12.98秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #5 - 运行 #7 - 2025-09-08 09:48:13 -HTTP状态: 200 -指令: 飞到学生宿舍上方查找蓝色的车 -尝试次数: 1 -响应时间: 12.98秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #5 - 运行 #8 - 2025-09-08 09:48:27 -HTTP状态: 200 -指令: 飞到学生宿舍上方查找蓝色的车 -尝试次数: 1 -响应时间: 13.00秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #5 - 运行 #9 - 2025-09-08 09:48:41 -HTTP状态: 200 -指令: 飞到学生宿舍上方查找蓝色的车 -尝试次数: 1 -响应时间: 13.03秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #5 - 运行 #10 - 2025-09-08 09:48:55 -HTTP状态: 200 -指令: 飞到学生宿舍上方查找蓝色的车 -尝试次数: 1 -响应时间: 12.99秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #6 - 运行 #1 - 2025-09-08 09:49:15 -HTTP状态: 200 -指令: 飞到学生宿舍上方查找蓝色车辆并进行打击 -尝试次数: 1 -响应时间: 19.38秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #6 - 运行 #2 - 2025-09-08 09:49:36 -HTTP状态: 200 -指令: 飞到学生宿舍上方查找蓝色车辆并进行打击 -尝试次数: 1 -响应时间: 19.19秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #6 - 运行 #3 - 2025-09-08 09:49:56 -HTTP状态: 200 -指令: 飞到学生宿舍上方查找蓝色车辆并进行打击 -尝试次数: 1 -响应时间: 19.13秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #6 - 运行 #4 - 2025-09-08 09:50:16 -HTTP状态: 200 -指令: 飞到学生宿舍上方查找蓝色车辆并进行打击 -尝试次数: 1 -响应时间: 19.23秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #6 - 运行 #5 - 2025-09-08 09:50:36 -HTTP状态: 200 -指令: 飞到学生宿舍上方查找蓝色车辆并进行打击 -尝试次数: 1 -响应时间: 19.09秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #6 - 运行 #6 - 2025-09-08 09:50:56 -HTTP状态: 200 -指令: 飞到学生宿舍上方查找蓝色车辆并进行打击 -尝试次数: 1 -响应时间: 19.10秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #6 - 运行 #7 - 2025-09-08 09:51:16 -HTTP状态: 200 -指令: 飞到学生宿舍上方查找蓝色车辆并进行打击 -尝试次数: 1 -响应时间: 19.10秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #6 - 运行 #8 - 2025-09-08 09:51:36 -HTTP状态: 200 -指令: 飞到学生宿舍上方查找蓝色车辆并进行打击 -尝试次数: 1 -响应时间: 19.08秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #6 - 运行 #9 - 2025-09-08 09:51:57 -HTTP状态: 200 -指令: 飞到学生宿舍上方查找蓝色车辆并进行打击 -尝试次数: 1 -响应时间: 19.22秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #6 - 运行 #10 - 2025-09-08 09:52:17 -HTTP状态: 200 -指令: 飞到学生宿舍上方查找蓝色车辆并进行打击 -尝试次数: 1 -响应时间: 19.18秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #7 - 运行 #1 - 2025-09-08 09:52:37 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方搜索蓝色车辆,并进行打击 -尝试次数: 1 -响应时间: 19.23秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #7 - 运行 #2 - 2025-09-08 09:52:57 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方搜索蓝色车辆,并进行打击 -尝试次数: 1 -响应时间: 19.07秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #7 - 运行 #3 - 2025-09-08 09:53:17 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方搜索蓝色车辆,并进行打击 -尝试次数: 1 -响应时间: 19.15秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #7 - 运行 #4 - 2025-09-08 09:53:38 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方搜索蓝色车辆,并进行打击 -尝试次数: 1 -响应时间: 19.25秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #7 - 运行 #5 - 2025-09-08 09:53:58 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方搜索蓝色车辆,并进行打击 -尝试次数: 1 -响应时间: 19.18秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #7 - 运行 #6 - 2025-09-08 09:54:18 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方搜索蓝色车辆,并进行打击 -尝试次数: 1 -响应时间: 19.25秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #7 - 运行 #7 - 2025-09-08 09:54:38 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方搜索蓝色车辆,并进行打击 -尝试次数: 1 -响应时间: 19.10秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #7 - 运行 #8 - 2025-09-08 09:54:58 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方搜索蓝色车辆,并进行打击 -尝试次数: 1 -响应时间: 19.16秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #7 - 运行 #9 - 2025-09-08 09:55:18 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方搜索蓝色车辆,并进行打击 -尝试次数: 1 -响应时间: 19.25秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #7 - 运行 #10 - 2025-09-08 09:55:39 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方搜索蓝色车辆,并进行打击 -尝试次数: 1 -响应时间: 19.19秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #8 - 运行 #1 - 2025-09-08 09:55:56 -HTTP状态: 200 -指令: 起飞到学生宿舍上方搜索被困人员,并为被困人员投递救援物资 -尝试次数: 1 -响应时间: 15.86秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #8 - 运行 #2 - 2025-09-08 09:56:12 -HTTP状态: 200 -指令: 起飞到学生宿舍上方搜索被困人员,并为被困人员投递救援物资 -尝试次数: 1 -响应时间: 15.75秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #8 - 运行 #3 - 2025-09-08 09:56:29 -HTTP状态: 200 -指令: 起飞到学生宿舍上方搜索被困人员,并为被困人员投递救援物资 -尝试次数: 1 -响应时间: 15.36秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #8 - 运行 #4 - 2025-09-08 09:56:45 -HTTP状态: 200 -指令: 起飞到学生宿舍上方搜索被困人员,并为被困人员投递救援物资 -尝试次数: 1 -响应时间: 15.66秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #8 - 运行 #5 - 2025-09-08 09:57:02 -HTTP状态: 200 -指令: 起飞到学生宿舍上方搜索被困人员,并为被困人员投递救援物资 -尝试次数: 1 -响应时间: 15.71秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #8 - 运行 #6 - 2025-09-08 09:57:19 -HTTP状态: 200 -指令: 起飞到学生宿舍上方搜索被困人员,并为被困人员投递救援物资 -尝试次数: 1 -响应时间: 15.69秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #8 - 运行 #7 - 2025-09-08 09:57:35 -HTTP状态: 200 -指令: 起飞到学生宿舍上方搜索被困人员,并为被困人员投递救援物资 -尝试次数: 1 -响应时间: 14.89秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #8 - 运行 #8 - 2025-09-08 09:57:51 -HTTP状态: 200 -指令: 起飞到学生宿舍上方搜索被困人员,并为被困人员投递救援物资 -尝试次数: 1 -响应时间: 15.75秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #8 - 运行 #9 - 2025-09-08 09:58:08 -HTTP状态: 200 -指令: 起飞到学生宿舍上方搜索被困人员,并为被困人员投递救援物资 -尝试次数: 1 -响应时间: 15.91秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #8 - 运行 #10 - 2025-09-08 09:58:25 -HTTP状态: 200 -指令: 起飞到学生宿舍上方搜索被困人员,并为被困人员投递救援物资 -尝试次数: 1 -响应时间: 15.89秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #9 - 运行 #1 - 2025-09-08 09:58:40 -HTTP状态: 200 -指令: 飞到学生宿舍上方搜索方圆10米范围内的蓝色车辆 -尝试次数: 1 -响应时间: 14.15秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #9 - 运行 #2 - 2025-09-08 09:58:55 -HTTP状态: 200 -指令: 飞到学生宿舍上方搜索方圆10米范围内的蓝色车辆 -尝试次数: 1 -响应时间: 14.03秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #9 - 运行 #3 - 2025-09-08 09:59:10 -HTTP状态: 200 -指令: 飞到学生宿舍上方搜索方圆10米范围内的蓝色车辆 -尝试次数: 1 -响应时间: 14.04秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #9 - 运行 #4 - 2025-09-08 09:59:25 -HTTP状态: 200 -指令: 飞到学生宿舍上方搜索方圆10米范围内的蓝色车辆 -尝试次数: 1 -响应时间: 13.99秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #9 - 运行 #5 - 2025-09-08 09:59:40 -HTTP状态: 200 -指令: 飞到学生宿舍上方搜索方圆10米范围内的蓝色车辆 -尝试次数: 1 -响应时间: 13.99秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #9 - 运行 #6 - 2025-09-08 09:59:55 -HTTP状态: 200 -指令: 飞到学生宿舍上方搜索方圆10米范围内的蓝色车辆 -尝试次数: 1 -响应时间: 13.97秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #9 - 运行 #7 - 2025-09-08 10:00:10 -HTTP状态: 200 -指令: 飞到学生宿舍上方搜索方圆10米范围内的蓝色车辆 -尝试次数: 1 -响应时间: 14.07秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #9 - 运行 #8 - 2025-09-08 10:00:25 -HTTP状态: 200 -指令: 飞到学生宿舍上方搜索方圆10米范围内的蓝色车辆 -尝试次数: 1 -响应时间: 14.03秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #9 - 运行 #9 - 2025-09-08 10:00:40 -HTTP状态: 200 -指令: 飞到学生宿舍上方搜索方圆10米范围内的蓝色车辆 -尝试次数: 1 -响应时间: 14.06秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #9 - 运行 #10 - 2025-09-08 10:00:56 -HTTP状态: 200 -指令: 飞到学生宿舍上方搜索方圆10米范围内的蓝色车辆 -尝试次数: 1 -响应时间: 14.08秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #10 - 运行 #1 - 2025-09-08 10:01:11 -HTTP状态: 200 -指令: 飞到学生宿舍上方搜索半径为10米区域范围内的蓝色车辆 -尝试次数: 1 -响应时间: 14.16秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #10 - 运行 #2 - 2025-09-08 10:01:23 -HTTP状态: 200 -指令: 飞到学生宿舍上方搜索半径为10米区域范围内的蓝色车辆 -尝试次数: 1 -响应时间: 11.36秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #10 - 运行 #3 - 2025-09-08 10:01:35 -HTTP状态: 200 -指令: 飞到学生宿舍上方搜索半径为10米区域范围内的蓝色车辆 -尝试次数: 1 -响应时间: 11.39秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #10 - 运行 #4 - 2025-09-08 10:01:48 -HTTP状态: 200 -指令: 飞到学生宿舍上方搜索半径为10米区域范围内的蓝色车辆 -尝试次数: 1 -响应时间: 11.35秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #10 - 运行 #5 - 2025-09-08 10:02:00 -HTTP状态: 200 -指令: 飞到学生宿舍上方搜索半径为10米区域范围内的蓝色车辆 -尝试次数: 1 -响应时间: 11.36秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #10 - 运行 #6 - 2025-09-08 10:02:12 -HTTP状态: 200 -指令: 飞到学生宿舍上方搜索半径为10米区域范围内的蓝色车辆 -尝试次数: 1 -响应时间: 11.32秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #10 - 运行 #7 - 2025-09-08 10:02:25 -HTTP状态: 200 -指令: 飞到学生宿舍上方搜索半径为10米区域范围内的蓝色车辆 -尝试次数: 1 -响应时间: 11.35秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #10 - 运行 #8 - 2025-09-08 10:02:37 -HTTP状态: 200 -指令: 飞到学生宿舍上方搜索半径为10米区域范围内的蓝色车辆 -尝试次数: 1 -响应时间: 11.29秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #10 - 运行 #9 - 2025-09-08 10:02:50 -HTTP状态: 200 -指令: 飞到学生宿舍上方搜索半径为10米区域范围内的蓝色车辆 -尝试次数: 1 -响应时间: 11.38秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #10 - 运行 #10 - 2025-09-08 10:03:02 -HTTP状态: 200 -指令: 飞到学生宿舍上方搜索半径为10米区域范围内的蓝色车辆 -尝试次数: 1 -响应时间: 11.42秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #11 - 运行 #1 - 2025-09-08 10:03:18 -HTTP状态: 200 -指令: 起飞到学生宿舍搜索有没有被困人员,然后抛洒救援物资 -尝试次数: 1 -响应时间: 15.05秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #11 - 运行 #2 - 2025-09-08 10:03:34 -HTTP状态: 200 -指令: 起飞到学生宿舍搜索有没有被困人员,然后抛洒救援物资 -尝试次数: 1 -响应时间: 15.01秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #11 - 运行 #3 - 2025-09-08 10:03:50 -HTTP状态: 200 -指令: 起飞到学生宿舍搜索有没有被困人员,然后抛洒救援物资 -尝试次数: 1 -响应时间: 15.00秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #11 - 运行 #4 - 2025-09-08 10:04:06 -HTTP状态: 200 -指令: 起飞到学生宿舍搜索有没有被困人员,然后抛洒救援物资 -尝试次数: 1 -响应时间: 14.96秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #11 - 运行 #5 - 2025-09-08 10:04:22 -HTTP状态: 200 -指令: 起飞到学生宿舍搜索有没有被困人员,然后抛洒救援物资 -尝试次数: 1 -响应时间: 14.97秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #11 - 运行 #6 - 2025-09-08 10:04:38 -HTTP状态: 200 -指令: 起飞到学生宿舍搜索有没有被困人员,然后抛洒救援物资 -尝试次数: 1 -响应时间: 15.28秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #11 - 运行 #7 - 2025-09-08 10:04:54 -HTTP状态: 200 -指令: 起飞到学生宿舍搜索有没有被困人员,然后抛洒救援物资 -尝试次数: 1 -响应时间: 15.01秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #11 - 运行 #8 - 2025-09-08 10:05:10 -HTTP状态: 200 -指令: 起飞到学生宿舍搜索有没有被困人员,然后抛洒救援物资 -尝试次数: 1 -响应时间: 15.00秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #11 - 运行 #9 - 2025-09-08 10:05:26 -HTTP状态: 200 -指令: 起飞到学生宿舍搜索有没有被困人员,然后抛洒救援物资 -尝试次数: 1 -响应时间: 14.97秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #11 - 运行 #10 - 2025-09-08 10:05:52 -HTTP状态: 200 -指令: 起飞到学生宿舍搜索有没有被困人员,然后抛洒救援物资 -尝试次数: 1 -响应时间: 24.95秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #1 - 运行 #1 - 2025-09-08 10:37:00 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方降落 -尝试次数: 1 -响应时间: 5.31秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #1 - 运行 #2 - 2025-09-08 10:37:07 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方降落 -尝试次数: 1 -响应时间: 5.30秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #1 - 运行 #3 - 2025-09-08 10:37:13 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方降落 -尝试次数: 1 -响应时间: 5.19秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #1 - 运行 #4 - 2025-09-08 10:37:19 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方降落 -尝试次数: 1 -响应时间: 5.29秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ - -================================================================================ -指令 #1 - 运行 #5 - 2025-09-08 10:37:25 -HTTP状态: 200 -指令: 起飞后移动到学生宿舍上方降落 -尝试次数: 1 -响应时间: 5.29秒 -结果: ✅ 成功 -验证结果: - is_dict: ✅ - has_root: ✅ - root_has_children: ✅ - has_plan_id: ✅ - has_visualization_url: ✅ - leaf_nodes_valid: ✅ - has_safety: ✅ diff --git a/tools/test_validate/test_results.csv b/tools/test_validate/test_results.csv index bd84e811..bebab39a 100644 --- a/tools/test_validate/test_results.csv +++ b/tools/test_validate/test_results.csv @@ -1 +1,12 @@ instruction_index,instruction,run_number,success,attempts,response_time,plan_id,error,timestamp +1,起飞后移动到学生宿舍上方降落,1,False,1,2.048215866088867,,,2025-12-02 20:44:56 +2,起飞后移动到学生宿舍上方查找蓝色的车,1,True,1,14.806509971618652,8a6f282e-c306-4249-962c-d47d48c31bad,,2025-12-02 20:45:12 +3,起飞后移动到学生宿舍上方寻找蓝色的车,1,True,1,15.240672826766968,f298e2f4-9295-4ffd-8fff-0d0eb9a0ee6c,,2025-12-02 20:45:28 +4,起飞后移动到学生宿舍上方检测蓝色的车,1,True,1,13.8105788230896,31733491-2030-43b1-a5e4-eb1300b8d23f,,2025-12-02 20:45:43 +5,飞到学生宿舍上方查找蓝色的车,1,True,1,12.74257755279541,4c855ef4-c251-48cd-b464-4816bc62fbb5,,2025-12-02 20:45:57 +6,飞到学生宿舍上方查找蓝色车辆并进行打击,1,True,1,16.117226600646973,63d0e7c3-dcbb-40f0-b76b-6f0191c6512f,,2025-12-02 20:46:14 +7,起飞后移动到学生宿舍上方搜索蓝色车辆,并进行打击,1,True,1,16.25989079475403,1b4a537e-c1be-4abf-897e-c21b677b83b7,,2025-12-02 20:46:31 +8,起飞到学生宿舍上方搜索被困人员,并为被困人员投递救援物资,1,True,1,16.014280796051025,f88ea46f-5e0b-48fb-b1da-326d287af3d6,,2025-12-02 20:46:48 +9,飞到学生宿舍上方搜索方圆10米范围内的蓝色车辆,1,True,1,15.530286073684692,f56c811a-8304-4c68-8260-01643928bf3e,,2025-12-02 20:47:05 +10,飞到学生宿舍上方搜索半径为10米区域范围内的蓝色车辆,1,True,1,16.660754919052124,07a13346-3026-4dce-a976-4e0faa132248,,2025-12-02 20:47:23 +11,起飞到学生宿舍搜索有没有被困人员,然后抛洒救援物资,1,True,1,14.128317832946777,16426d41-4f02-4e27-a05e-f4eb84d6c935,,2025-12-02 20:47:38 diff --git a/tools/test_validate/test_summary.csv b/tools/test_validate/test_summary.csv index bf4ff8f5..02557001 100644 --- a/tools/test_validate/test_summary.csv +++ b/tools/test_validate/test_summary.csv @@ -1,12 +1,12 @@ instruction_index,instruction,total_runs,successful_runs,success_rate,avg_response_time,min_response_time,max_response_time,total_response_time -1,起飞后移动到学生宿舍上方降落,10,10,100.00%,7.91s,7.73s,8.96s,79.07s -2,起飞后移动到学生宿舍上方查找蓝色的车,10,9,90.00%,14.18s,9.40s,25.44s,127.59s -3,起飞后移动到学生宿舍上方寻找蓝色的车,10,10,100.00%,11.95s,7.00s,13.08s,119.49s -4,起飞后移动到学生宿舍上方检测蓝色的车,10,10,100.00%,12.21s,9.09s,13.09s,122.08s -5,飞到学生宿舍上方查找蓝色的车,10,10,100.00%,12.99s,12.79s,13.07s,129.90s -6,飞到学生宿舍上方查找蓝色车辆并进行打击,10,10,100.00%,19.17s,19.08s,19.38s,191.70s -7,起飞后移动到学生宿舍上方搜索蓝色车辆,并进行打击,10,10,100.00%,19.18s,19.07s,19.25s,191.85s -8,起飞到学生宿舍上方搜索被困人员,并为被困人员投递救援物资,10,10,100.00%,15.65s,14.89s,15.91s,156.47s -9,飞到学生宿舍上方搜索方圆10米范围内的蓝色车辆,10,10,100.00%,14.04s,13.97s,14.15s,140.40s -10,飞到学生宿舍上方搜索半径为10米区域范围内的蓝色车辆,10,10,100.00%,11.64s,11.29s,14.16s,116.39s -11,起飞到学生宿舍搜索有没有被困人员,然后抛洒救援物资,10,10,100.00%,16.02s,14.96s,24.95s,160.19s +1,起飞后移动到学生宿舍上方降落,1,0,0.00%,N/A,N/A,N/A,0.00s +2,起飞后移动到学生宿舍上方查找蓝色的车,1,1,100.00%,14.81s,14.81s,14.81s,14.81s +3,起飞后移动到学生宿舍上方寻找蓝色的车,1,1,100.00%,15.24s,15.24s,15.24s,15.24s +4,起飞后移动到学生宿舍上方检测蓝色的车,1,1,100.00%,13.81s,13.81s,13.81s,13.81s +5,飞到学生宿舍上方查找蓝色的车,1,1,100.00%,12.74s,12.74s,12.74s,12.74s +6,飞到学生宿舍上方查找蓝色车辆并进行打击,1,1,100.00%,16.12s,16.12s,16.12s,16.12s +7,起飞后移动到学生宿舍上方搜索蓝色车辆,并进行打击,1,1,100.00%,16.26s,16.26s,16.26s,16.26s +8,起飞到学生宿舍上方搜索被困人员,并为被困人员投递救援物资,1,1,100.00%,16.01s,16.01s,16.01s,16.01s +9,飞到学生宿舍上方搜索方圆10米范围内的蓝色车辆,1,1,100.00%,15.53s,15.53s,15.53s,15.53s +10,飞到学生宿舍上方搜索半径为10米区域范围内的蓝色车辆,1,1,100.00%,16.66s,16.66s,16.66s,16.66s +11,起飞到学生宿舍搜索有没有被困人员,然后抛洒救援物资,1,1,100.00%,14.13s,14.13s,14.13s,14.13s diff --git a/tools/test_validate/test_validity.py b/tools/test_validate/test_validity.py index 0d3f05f9..5ae7ef85 100644 --- a/tools/test_validate/test_validity.py +++ b/tools/test_validate/test_validity.py @@ -17,7 +17,7 @@ SUMMARY_CSV = "test_summary.csv" LOG_FILE = "api_test_log.txt" # 测试参数 -TESTS_PER_INSTRUCTION = 10 +TESTS_PER_INSTRUCTION = 1 MAX_RETRIES = 3 RETRY_DELAY = 2 @@ -207,20 +207,38 @@ def read_instructions(filename): return [] def write_log_entry(log_file, instruction_idx, run_number, prompt, result): - """写入详细日志""" + """写入详细日志,包含完整的API响应""" timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") with open(log_file, 'a', encoding='utf-8') as f: f.write(f"\n{'='*80}\n") f.write(f"指令 #{instruction_idx} - 运行 #{run_number} - {timestamp}\n") f.write(f"HTTP状态: {result.get('http_status', 'N/A')}\n") - f.write(f"指令: {prompt}\n") + f.write(f"原始指令: {prompt}\n") f.write(f"尝试次数: {result['attempts']}\n") f.write(f"响应时间: {result['response_time']:.2f}秒\n") f.write(f"结果: {'✅ 成功' if result['success'] else '❌ 失败'}\n") - if result['success']: - f.write("验证结果:\n") + if result['success'] and result.get('data'): + data = result['data'] + + # 提取并记录组织后的prompt(如果存在) + organized_prompt = None + if isinstance(data, dict): + organized_prompt = data.get("organized_prompt") or \ + data.get("processed_prompt") or \ + data.get("final_prompt") or \ + data.get("enhanced_prompt") or \ + data.get("user_prompt_enhanced") + + if organized_prompt: + f.write(f"\n📝 组织后的Prompt:\n") + f.write(f"{organized_prompt}\n") + else: + f.write(f"\n📝 组织后的Prompt: (未在响应中返回)\n") + + # 记录验证结果 + f.write("\n验证结果:\n") for check_name, check_result in result['validation_checks'].items(): f.write(f" {check_name}: {'✅' if check_result else '❌'}\n") @@ -229,8 +247,27 @@ def write_log_entry(log_file, instruction_idx, run_number, prompt, result): if result['invalid_conditions']: f.write(f"⚠️ 无效条件节点: {result['invalid_conditions']}\n") + + # 记录完整的API响应 + f.write(f"\n完整API响应:\n") + try: + response_json = json.dumps(data, indent=2, ensure_ascii=False) + f.write(response_json) + f.write("\n") + except Exception as e: + f.write(f"⚠️ 无法序列化响应数据: {e}\n") + f.write(f"原始数据: {str(data)}\n") else: f.write(f"错误信息: {result['error']}\n") + # 即使失败也尝试记录响应数据(如果有) + if result.get('data'): + f.write(f"\n部分响应数据:\n") + try: + response_json = json.dumps(result['data'], indent=2, ensure_ascii=False) + f.write(response_json) + f.write("\n") + except Exception: + f.write(f"原始数据: {str(result['data'])}\n") def generate_summary_report(instructions, results_summary): """ @@ -311,6 +348,10 @@ def main(): write_log_entry(LOG_FILE, instruction_idx, run_number, prompt, result) # 记录结果 + plan_id = "" + if result.get("success") and result.get("data") and isinstance(result["data"], dict): + plan_id = result["data"].get("plan_id", "") + detailed_result = { "instruction_index": instruction_idx, "instruction": prompt, @@ -318,7 +359,7 @@ def main(): "success": result["success"], "attempts": result["attempts"], "response_time": result["response_time"], - "http_status": result.get("http_status"), + "plan_id": plan_id, "error": result["error"] or "", "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S") } @@ -363,6 +404,10 @@ def main(): # 生成统计摘要 generate_summary_report(instructions, results_summary) + # 计算总统计 + total_tests = len(instructions) * TESTS_PER_INSTRUCTION + total_successful = sum(summary['success_count'] for summary in results_summary) + # 打印最终统计 print(f"\n{'='*60}") print("📈 最终测试统计") @@ -370,7 +415,10 @@ def main(): print(f"总测试次数: {total_tests}") print(f"成功次数: {total_successful}") print(f"失败次数: {total_tests - total_successful}") - print(f"总成功率: {(total_successful / total_tests * 100):.2f}%") + if total_tests > 0: + print(f"总成功率: {(total_successful / total_tests * 100):.2f}%") + else: + print(f"总成功率: N/A") # 打印每个指令的统计 print(f"\n📋 每个指令的统计:") diff --git a/tools/vector_store/2298535b-1808-4498-8a3a-59146f62ce97/data_level0.bin b/tools/vector_store/2298535b-1808-4498-8a3a-59146f62ce97/data_level0.bin index 86568df233d920088fd7b7464afc6cef42968c8d..c656b189d7e0eaa4acd20dd56e0d27df5f2cda40 100644 GIT binary patch delta 40 wcmX@GbHCw+we}4yj4ezp%q=V}tSxLU>@6HEoGn}}+$}sUye)iN_%~bw06P#4Z~y=R delta 4895 zcmeI0OAP`65JR*7|8Av#0<1yO`oI9mlE8rzs6Y=kI6MJ!nas4W-EXJQ>wP@CaOujm z8@KMYwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd p0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkryI2L_x#00961 diff --git a/tools/vector_store/chroma.sqlite3 b/tools/vector_store/chroma.sqlite3 index 72445549053357061828472261bad2d22fc3bd53..0d7c47ca731d2387b7ae36b64e5c4266603115cc 100644 GIT binary patch delta 376 zcmZozz|(MmXM(h#BLf425fHh|@Qhy&$Ws;o z5=xw0KvIxjb~3wyA``#tWx31gAWVhCVuj+8qRhPX%(TqZ6ostf{JhEWqT-V;2=f|3l*9w&6+&DiLaez= jlZ_Ki6O&Dn%q>&W%+1U#Et5>ljSMY}%u`cLQw>u9DoJCo delta 138 zcmZoTz|*jRXM(h#H3I{KArQlW-b5W^M(d3UOZd4M`G12%mHB^f=M!Lh%g+PkC~n*|*h`6p}Y-)1)EXPnG#kiOYaVKQGcqy2V9dq&oY96K5K&hgFU{V=g; h+V&+E7+Kh-zkkmtxOpeL6G!{+`;6Ov-)CYq000-CB>n&Z