153 lines
3.5 KiB
Markdown
153 lines
3.5 KiB
Markdown
# 无人机自然语言控制项目 (DronePlanning)
|
||
|
||
本项目提供一个基于 `FastAPI + LLM + RAG` 的无人机任务规划后端。输入自然语言指令,输出严格 JSON 的行为树计划(`py_tree`)。
|
||
|
||
> 当前版本已与 ROS2 解耦。
|
||
> 推荐直接使用 `start_all.sh` / `start_all_vllm.sh` 启动。
|
||
|
||
## 1. 当前代码结构
|
||
|
||
```text
|
||
backend_service/src/
|
||
├── main.py
|
||
├── py_tree_generator.py
|
||
├── models.py
|
||
├── websocket_manager.py
|
||
├── pipeline/ # 编排层(stage1~stage4)
|
||
├── llm/ # 模型网关/响应解析/工具运行时
|
||
├── retrieval/ # 多知识库检索(Location/Pattern/Rules)
|
||
├── prompting/ # prompt manifest + 动态注入
|
||
├── validation/ # schema provider + validator
|
||
├── prompts/
|
||
└── tools/
|
||
```
|
||
|
||
## 2. 环境准备(完整命令)
|
||
|
||
在项目根目录执行:
|
||
|
||
```bash
|
||
cd /home/huangfukk/DronePlanning
|
||
|
||
# 1) 创建并激活 venv
|
||
python3 -m venv backend_service/venv
|
||
source backend_service/venv/bin/activate
|
||
|
||
# 2) 安装依赖
|
||
pip install -r backend_service/requirements.txt
|
||
|
||
# 3) 可选:设置设备地址(本地默认 localhost)
|
||
export ORIN_IP="localhost"
|
||
```
|
||
|
||
## 3. 启动服务(推荐)
|
||
|
||
### 3.1 llama.cpp 路线
|
||
|
||
```bash
|
||
cd /home/huangfukk/DronePlanning
|
||
./start_all.sh start
|
||
```
|
||
|
||
常用命令:
|
||
|
||
```bash
|
||
./start_all.sh stop
|
||
./start_all.sh restart
|
||
./start_all.sh vl
|
||
./start_all.sh restart-vl
|
||
./start_all.sh status
|
||
```
|
||
|
||
### 3.2 vLLM 路线
|
||
|
||
```bash
|
||
cd /home/huangfukk/DronePlanning
|
||
./start_all_vllm.sh start
|
||
```
|
||
|
||
常用命令:
|
||
|
||
```bash
|
||
./start_all_vllm.sh stop
|
||
./start_all_vllm.sh restart
|
||
./start_all_vllm.sh status
|
||
```
|
||
|
||
## 4. 构建与入库(RAG)
|
||
|
||
```bash
|
||
cd /home/huangfukk/DronePlanning
|
||
source backend_service/venv/bin/activate
|
||
|
||
# 1) 从 map 生成知识文本(可选,已有知识可跳过)
|
||
python tools/rag/build_knowledge_base.py
|
||
|
||
# 2) 入库到 ChromaDB(Location/Pattern/Rules + 兼容集合)
|
||
python tools/rag/ingest.py
|
||
```
|
||
|
||
> 运行 `ingest.py` 前,请确保 embedding 服务(8090)已启动。
|
||
|
||
## 5. 快速接口验证
|
||
|
||
```bash
|
||
cd /home/huangfukk/DronePlanning
|
||
|
||
# 健康检查
|
||
curl -s http://localhost:8000/docs >/dev/null && echo "fastapi ok"
|
||
curl -s http://localhost:8081/v1/models && echo "llm ok"
|
||
|
||
# 生成计划
|
||
curl -s http://localhost:8000/generate_plan \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"user_prompt":"无人机当前在地面,到广场查找绿色公交车,找到就拍照"}'
|
||
```
|
||
|
||
## 6. 测试命令
|
||
|
||
```bash
|
||
cd /home/huangfukk/DronePlanning
|
||
source backend_service/venv/bin/activate
|
||
|
||
# API 回归
|
||
python tools/test_api.py
|
||
|
||
# 直接测试 8081 的 OpenAI 兼容推理接口
|
||
python tools/test_llama_server.py \
|
||
--system-file backend_service/src/prompts/system_prompt_vllm.txt \
|
||
--user "起飞到10米然后降落" \
|
||
--base-url "http://127.0.0.1:8081/v1" \
|
||
--verbose
|
||
|
||
# 交互式/批量验证
|
||
python tools/test_validate/run_tests.py
|
||
```
|
||
|
||
## 7. 关键 API
|
||
|
||
- `POST /generate_plan`
|
||
- `POST /execute_mission`(当前返回 execution_disabled)
|
||
- `WS /ws/status`
|
||
- `GET /static/py_tree.png`
|
||
|
||
## 8. 日志与排障
|
||
|
||
```bash
|
||
cd /home/huangfukk/DronePlanning
|
||
tail -f logs/*.log
|
||
```
|
||
|
||
常见日志:
|
||
|
||
- `logs/inference_model.log`(llama.cpp 推理)
|
||
- `logs/vllm_inference_model.log`(vLLM 推理)
|
||
- `logs/embedding_model.log`
|
||
- `logs/fastapi.log`
|
||
|
||
如果 `tools/rag/ingest.py` 在 Chroma 初始化时报错,优先确认:
|
||
|
||
1. 是否使用项目 venv 运行
|
||
2. `tools/rag/vector_store/` 是否损坏(可备份后重建)
|
||
3. embedding 服务是否可访问(`http://localhost:8090/v1/embeddings`)
|
||
|