diff --git a/backend_service/src/prompts/classifier_prompt.txt b/backend_service/src/prompts/classifier_prompt.txt index ec789728..505edbe9 100644 --- a/backend_service/src/prompts/classifier_prompt.txt +++ b/backend_service/src/prompts/classifier_prompt.txt @@ -50,4 +50,5 @@ ``` # 需要辨析的情况 -1. "无人机当前在空中,往东边飞50米,停个20s就好返航了。"这样的指令应该被判定为复杂,因为需要多步执行。 \ No newline at end of file +1. "无人机当前在空中,往东边飞50米,停个20s就好返航了。"这样的指令应该被判定为复杂,因为需要多步执行。 +2. 到某地执行某动作,这样的任务应该是复杂。 \ No newline at end of file diff --git a/backend_service/src/prompts/system_prompt.txt b/backend_service/src/prompts/system_prompt.txt index 8759bebf..99495813 100644 --- a/backend_service/src/prompts/system_prompt.txt +++ b/backend_service/src/prompts/system_prompt.txt @@ -171,25 +171,15 @@ "params": { "duration": 300 } }, { - "name": "拍照循环永不成功", + "name": "SuccessIsFailure", "type": "decorator", "child": { - "name": "DetectAndShoot", + "name": "check_and_photo", "type": "Sequence", "children": [ - { - "name": "SuccessIsFailure", - "type": "decorator", - "child": { - "name": "check_and_photo", - "type": "Sequence", - "children": [ - {"name": "object_detect", "type": "action", "params": { "target_class": "person" }}, - {"name": "object_detected", "type": "condition", "params": { "target_class": "person" }}, - {"name": "take_photos", "type": "action", "params": { "target_class": "person" }} - ] - } - } + {"name": "object_detect", "type": "action", "params": { "target_class": "person" }}, + {"name": "object_detected", "type": "condition", "params": { "target_class": "person" }}, + {"name": "take_photos", "type": "action", "params": { "target_class": "person" }} ] } } @@ -205,6 +195,25 @@ } ``` +#### 场景 4:交互式确认任务(Sequence + Manual Confirmation) +**指令**:“无人机当前在空中,搜索小汽车,搜索到了我确认后再决定要不要拍照。” +**思路**:无人机已在空中,无需起飞,直接进行搜索。首先使用`rotate_search`主动搜索目标,配合`object_detected`条件节点确认目标是否被检测到。检测到后,执行`manual_confirmation`节点等待用户确认。只有用户确认通过(返回Success),才会继续执行后续的`take_photos`动作。 +**结构**:Sequence +```json +{ + "root": { + "type": "Sequence", + "name": "SearchConfirmPhoto", + "children": [ + {"type":"action","name":"rotate_search","params":{"target_class":"car","description":"小汽车"}}, + {"type":"condition","name":"object_detected","params":{"target_class":"car","description":"小汽车"}}, + {"type":"action","name":"manual_confirmation","params":{}}, + {"type":"action","name":"take_photos","params":{"target_class":"car","description":"小汽车"}} + ] + } +} +``` + ## 六、高频错误规避 1. 控制流节点的 `type` 必须是 `"Sequence"`, `"Selector"` 或 `"Parallel"` 2. 当用户指令中要求执行动作前增加人工确认时,比如“我确认后拍照”,则必须在拍照动作前增加manual_confirmation节点 @@ -214,7 +223,7 @@ 6. **严格区分无人机状态**:当用户指令明确无人机在**空中**时,严禁使用system_checks与takeoff节点;仅当指令明确在**地面**时,才可使用这两个节点 7. **重点关注**:fly_to_waypoint与return_emergency节点辨析:当指令包含具体目的地(如“紧急回到广场”、“飞回大门”)时,**必须**使用fly_to_waypoint节点,**绝对禁止**使用return_emergency节点(该节点仅用于无目的地的“紧急返航”指令)。 8. 当用户指令中提及“靠近”、“飞近”、“贴近”目标时,**必须**在`take_photos`之前使用`approach_target`节点;若未提及此类关键词,则**严禁**使用`approach_target`节点。 -9. **方向移动优先原则**:当指令仅要求“往/向/去往 + 东/西/南/北/前/后/左/右 + 飞/移动 + X米”(基于当前位置相对移动)且**未提及具体参照地点名词**(如“广场”、“大门”)时,**必须**使用`move_direction`节点,**严禁**计算坐标使用`fly_to_waypoint`。 +9. **方向移动优先原则**:当指令为“快速去往东边100米”,直接使用 `move_direction` 节点+距离参数,严禁使用fly_to_waypoint ## 七、坐标计算规则(东北天坐标系 ENU) 本系统统一使用东北天(ENU)坐标系: @@ -223,18 +232,6 @@ - **Z轴**:正方向为**天** (Up),负方向为**地** (Down) **仅当指令涉及前往“具体地点”(如广场、大门)的偏移位置时,才需计算绝对坐标并使用`fly_to_waypoint`:** -假设参照点坐标为 $(x_0, y_0, z_0)$,偏移距离为 $d$: -- **"去广场东边 $d$ 米"**:目标坐标 $(x_0 + d, y_0, z_0)$ (使用 `fly_to_waypoint`) -- **"去广场西边 $d$ 米"**:目标坐标 $(x_0 - d, y_0, z_0)$ (使用 `fly_to_waypoint`) -- **"去广场北边 $d$ 米"**:目标坐标 $(x_0, y_0 + d, z_0)$ (使用 `fly_to_waypoint`) -- **"去广场南边 $d$ 米"**:目标坐标 $(x_0, y_0 - d, z_0)$ (使用 `fly_to_waypoint`) -- **"往上/升高 $d$ 米"**:目标坐标 $(x_0, y_0, z_0 + d)$ -(注意:比如指令为“飞往东边100米”,请直接使用 `move_direction` 节点,无需计算坐标) - -**示例**: -若"广场"坐标为 $(-17, 360, 3)$: -- "去广场**东边**20米" -> 目标点 $(3, 360, 3)$ -- "去广场**南边**30米" -> 目标点 $(-17, 330, 3)$ ## 八、输出要求 仅输出1个严格符合上述所有规则的JSON对象。 diff --git a/start_all_vllm.sh b/start_all_vllm.sh index 062806ca..a5c3571b 100755 --- a/start_all_vllm.sh +++ b/start_all_vllm.sh @@ -22,7 +22,7 @@ LLAMA_SERVER_DIR="${LLAMA_SERVER_DIR:-~/llama.cpp/build/bin}" INFERENCE_MODEL_DIR="${INFERENCE_MODEL_DIR:-/home/a/models/AWQ/Qwen3-4B-Instruct-2507}" VLLM_CONDA_ENV="${VLLM_CONDA_ENV:-VLLM}" VLLM_SPECULATIVE_CONFIG="${VLLM_SPECULATIVE_CONFIG:-}" -VLLM_GPU_MEMORY_UTILIZATION="${VLLM_GPU_MEMORY_UTILIZATION:-0.6}" +VLLM_GPU_MEMORY_UTILIZATION="${VLLM_GPU_MEMORY_UTILIZATION:-0.5}" VLLM_SERVED_MODEL_NAME="${VLLM_SERVED_MODEL_NAME:-local-model}" EMBEDDING_MODEL="${EMBEDDING_MODEL:-~/models/gguf/Qwen3/Qwen3-Embedding-4B/Qwen3-Embedding-4B-Q5_K_M.gguf}" VENV_PATH="${VENV_PATH:-${PROJECT_ROOT}/backend_service/venv}" diff --git a/tools/test_validate/instructions/validate_instructions.txt b/tools/test_validate/instructions/validate_instructions.txt index 1e251c89..2aa7af22 100644 --- a/tools/test_validate/instructions/validate_instructions.txt +++ b/tools/test_validate/instructions/validate_instructions.txt @@ -1,10 +1,10 @@ 无人机当前在地面,到广场查找穿黄色衣服的男子,找到后近距离拍照。 无人机当前在空中,回到广场,对戴帽子的人进行拍照。 无人机当前在空中,去广场西边200米,对过往的公交车拍张照,然后返航。 -无人机当前在空中,到广场查找绿色公交车,看见了拍个照片。 +无人机当前在地面,到广场查找绿色公交车,看见了拍个照片。 无人机当前在空中,搜索小汽车,搜索到了我确认后再决定要不要拍照。 无人机当前在空中,往广场西边飞200米,持续监控5分钟,发现人就拍照告诉我,到时间可以返航。 -无人机当前在空中,到广场边上的施工区域内,发现有没带安全帽的飞近后拍照。 +无人机当前在地面,到广场边上的施工区域内,发现有没带安全帽的飞近后拍照。 无人机当前在空中,紧急回到广场,看见了红绿灯之后直接降落。 -无人机当前在空中,快速去往东边100米,有身穿黑色衣服,头戴帽子的男子在挟持他人,对其进行拍照。 +无人机当前在地面,快速去往东边100米,有身穿黑色衣服,头戴帽子的男子在挟持他人,对其进行拍照。 无人机当前在空中,离黑色衣服戴帽子的人太远了照片看不清,贴近到3米距离拍,拍完可以直接返航。 \ No newline at end of file