Project này triển khai một pipeline đơn giản cho:
- LLM làm planner cho agent trong AI2-THOR
- Double-Feedback (feasibility + effect)
- Knowledge Graph (KG) tích lũy lâu dài từ feedback
- So sánh 2 chế độ: no_kg vs with_kg
.
├─ config/
│ └─ k_config.yaml # (hiện tại chưa dùng, có thể để task config sau)
├─ data/
│ ├─ logs/ # log file sẽ được ghi vào đây
│ └─ kg_memory.json # file KG (tự tạo / tự cập nhật)
├─ env/
│ ├─ ai2thor_controller.py
│ └─ state_tracker.py
├─ eval/
│ ├─ evaluator.py
│ └─ metrics.py
├─ knowledge/
│ ├─ kg_retriever.py
│ ├─ kg_store.py
│ └─ kg_updater.py
├─ planner/
│ ├─ double_feedback_controller.py
│ ├─ feedback_parser.py
│ ├─ llm_interface.py
│ └─ prompt_generator.py
├─ utils/
│ ├─ logger.py
│ └─ tools.py
├─ main.py # demo Phase 0: LLM planner đơn giản
└─ main_eval.py # chạy eval 2 mode: no_kg vs with_kg
# 2. Cài đặt môi trường
##2.1. Tạo virtualenv (khuyến nghị)
```bash
python -m venv .venv
# Windows:
.venv\Scripts\activate
# macOS / Linux:
source .venv/bin/activate
```bash
##2.2. Cài dependencies
Tối thiểu cần:
ai2thor
openai
pyyaml (cho utils/tools.py nếu dùng load YAML)
Bạn có thể tạo file requirements.txt như sau:
ai2thor
openai
pyyaml
Sau đó:
```bash
pip install -r requirements.txt
Hoặc cài trực tiếp:
pip install ai2thor openai pyyaml
##2.3. API key cho OpenAI
Đặt biến môi trường OPENAI_API_KEY:
export OPENAI_API_KEY="sk-...."
$Env:OPENAI_API_KEY="sk-...."
main.py chạy pipeline đơn giản:
Khởi tạo AI2-THOR
Gọi LLM để sinh 1 plan (JSON actions)
Thực thi tuần tự, không Double-Feedback, không KG.
Chạy:
python main.py
```bash
Bạn sẽ thấy:
Prompt gửi cho LLM
Raw JSON plan LLM trả về
Các action được thực thi và state agent sau mỗi bước
# 4. Chạy evaluation 2 mode (no_kg vs with_kg)
main_eval.py dùng:
eval/evaluator.py
eval/metrics.py
planner/double_feedback_controller.py
knowledge/*
env/state_tracker.py
Đây là pipeline:
Tạo một list TaskSpec (được định nghĩa sẵn trong build_tasks()).
Chạy tất cả task ở mode:
no_kg: KG không tích lũy giữa các task.
with_kg: KG được tích lũy từ feedback qua các task.
Tổng hợp metrics (success rate, avg steps, v.v.) và in report.
Chạy:
```bash
python main_eval.pyOutput sẽ có dạng:
========== Running tasks WITHOUT lifelong KG (no_kg) ========== [Evaluator] Running no_kg_task_0: goal='...' ...
========== Running tasks WITH lifelong KG (with_kg) ========== [Evaluator] Running with_kg_task_0: goal='...' ...
=== Aggregate Metrics Report ===
Mode: no_kg #Tasks: ... Success rate: ... Avg steps (all): ... ...
- Ghi log & KG
Log text được ghi vào: data/logs/*.log (từ utils/logger.py nếu bạn dùng).
KG lâu dài được lưu trong: data/kg_memory_lifelong.json (mode with_kg trong evaluator) hoặc data/kg_memory.json (nếu bạn dùng KnowledgeGraphStore mặc định).
Bạn có thể mở file KG để xem các triple dạng:
{ "facts": [ { "subject": "Pot", "relation": "RequiresTwoHands", "object": "True", "source": "feedback", "timestamp": 1733012345.123 } ] }
- Tuỳ chỉnh tasks
Hiện tại, các task được định nghĩa ngay trong main_eval.py:
tasks = [ TaskSpec(goal="Pick up an apple and place it in the fridge.", scene="FloorPlan1"), TaskSpec(goal="Turn on the microwave and heat a mug.", scene="FloorPlan1"), ... ]
Muốn thêm / sửa task, bạn chỉ cần chỉnh danh sách này.
Sau này nếu muốn config qua YAML (config/k_config.yaml) thì có thể viết một script riêng đọc YAML và build TaskSpec từ đó.