Awesome
LLM+P: Empowering Large Language Models with Optimal Planning Proficiency
This repo contains the source code for making plans based on problems decribed by natural language.
Dependency
-
Install OpenAI GPT API. Remember to put openai_keys under the
keys
folder. -
Install fast-downward. For more details on fast-downward, please check the official github repo and the fast-downward website.
Running Code
To run a for a specific task in a specific domain using a specific method:
python main.py --domain DOMAIN --method METHOD --task TASK_ID
DOMAIN
is selected from
[barman, blocksworld, floortile, grippers, storage, termes, tyreworld]
METHOD
is selected from
[llm_ic_pddl_planner, llm_pddl_planner, llm_planner, llm_ic_planner]
Alternatively, you can just use:
bash run.sh DOMAIN METHOD TASK_ID
Citations
Please cite this pre-print if you find this repo useful.
@article{liu2023llmp,
title={LLM+P: Empowering Large Language Models with Optimal Planning Proficiency},
author={Liu, Bo and Jiang, Yuqian and Zhang, Xiaohan and Liu, Qiang and Zhang, Shiqi and Biswas, Joydeep and Stone, Peter},
journal={arXiv preprint arXiv:2304.11477},
year={2023}
}
The File Hierarchy:
llm-pddl
└─main.py (the main python script)
└─keys
└─ openai_keys.txt (you should place your openai keys here, one line each)
└─domains (the generated domain files)
└─ barman
└─ description_geneator.py (generating natural language description)
└─ p_example.nl (example natural language)
└─ p_example.pddl (example problem pddl file)
└─ domain.pddl (the shared domain.pddl file for all problems)
└─ xxx.nl (task natural language description)
└─ xxx.pddl (ground-truth problem pddl, might not be used)
└─ blocksworld
└─ floortile
└─ grippers
└─ storage
└─ termes
└─ tyreworld
└─problems (the generated problem pddl files)
└─ llm (empty, since llm -> plan does not generate pddl)
└─ llm_ic (empty, since llm + context -> plan does not generate pddl)
└─ llm_pddl (baseline 2: llm -> p.pddl)
└─ llm_ic_pddl (ours: llm + context -> p.pddl)
└─ barman
└─ ...
└─plans (the tmp folder for storing raw solutions found by fast-downward)
└─ llm (empty, since llm -> plan does not generate raw plans)
└─ llm_ic (empty, since llm + context -> plan does not generate raw plans)
└─ llm_pddl (baseline 2: llm -> p.pddl)
└─ llm_ic_pddl (ours: llm + context -> p.pddl)
└─ barman
└─ ...
└─results (the final plan in natural language)
└─ llm (baseline 1: llm -> plan)
└─ llm_ic (baseline 3: llm + context -> plan)
└─ llm_pddl (baseline 2: llm -> p.pddl)
└─ llm_ic_pddl (ours: llm + context -> p.pddl)
└─ barman
└─ ...