
Ini adalah repo resmi untuk "PromptAgent: Perencanaan Strategis dengan Model Bahasa memungkinkan optimasi cepat tingkat ahli". PromptAgent adalah metode optimasi prompt otomatis baru yang secara mandiri membuat setara dengan kualitas dengan buatan tangan oleh para ahli, yaitu, petunjuk tingkat ahli. [Arxiv]


git clone https://github.com/XinyuanWangCS/PromptAgent.git
cd PromptAgent
conda create -n prompt_agent
conda activate prompt_agent
pip install -r requirements.txtPerintah berikut menjalankan PromptAgent untuk membuat prompt ahli untuk tugas-tugas besar, Penguins_in_a_table. Berlari bisa memakan waktu tergantung pada kecepatan inferensi API Openai dan ukuran dataset.
CATATAN : Sebelum menjalankan perintah ini, silakan tambahkan tombol API (OpenAi) Anda ke file example_config.yaml (base_model_setting: API_KEY dan OPTIM_MODEL_SETTING: API_KEY). Anda juga dapat memeriksa semua augumen lain dalam file YAML.
python src/main.py --config_dir example_config.yaml penguins_in_a_table adalah tugas pemahaman tabel untuk menjawab pertanyaan tentang hewan yang terkandung dalam tabel. Contoh dari dataset asli terlihat seperti ini:
Here is a table where the first line is a header and each subsequent line is a penguin:
name, age, height (cm), weight (kg)
Louis, 7, 50, 11
Bernard, 5, 80, 13
Vincent, 9, 60, 11
Gwen, 8, 70, 15
For example: the age of Louis is 7, the weight of Gwen is 15 kg, the height of
Bernard is 80 cm.
Which penguin is taller than the other ones? Answer:
Kemudian, hasil yang diharapkan adalah Bernard .
Kueri awal dari dataset Big-Bench adalah Answer questions about a table of penguins and their attributes. Dimulai dengan prompt biasa seperti itu, promptAgent akan secara strategis mencicipi kesalahan model (dari model dasar), menghasilkan umpan balik kesalahan (tindakan), mensimulasikan imbalan di masa depan, dan mencari jalur jalur tinggi yang mengarah ke petunjuk ahli. Prompt yang dioptimalkan untuk penguins_in_a_table akan terlihat seperti ini (hasil yang tepat dapat bervariasi karena ini tidak deterministik):
As you delve into a dataset of penguins, assess essential attributes like names, ages,
and gender. Decode the significance of each attribute in the context of every penguin
while keeping in mind that the dataset may be modified, including addition or removal
of penguins. When such modifications are made, immediately revise your understanding,
redo your computations, and ensure that your subsequent calculations consider these
changes. The crux of your task is to identify relationships and patterns within
the attributes, giving special attention to the names and ages of the penguins.
For complex tasks, break them down into manageable chunks ensuring no essential detail
is missed. When a change is made to the dataset, recompute your values taking into
consideration these changes, paying extra attention to cumulative computations. Ensure
that your understanding of ’more than’, ’less than’, and ’equal to’ is precise and
that you correctly interpret these in context of the question.
...
Dibutuhkan sekitar dua jam untuk menjalankan percobaan di atas, yang harganya sekitar $ 5 menggunakan OpenAI API (sekitar $ 4 untuk GPT-4 dan $ 1 untuk GPT-3.5). Setelah menyelesaikan optimasi, semua node dan jalur perantara akan disimpan dalam file JSON. Kami akan menjaga node hadiah atas-K, simpul terakhir di jalur hadiah rata-rata tertinggi, dan node hadiah tertinggi di jalur hadiah rata-rata tertinggi. Di koran, kami menggunakan simpul hadiah tertinggi di jalur hadiah rata -rata tertinggi sebagai strategi seleksi.
Kami dapat menjalankan test.py untuk menguji kinerja cepat apa pun dengan perintah berikut:
Masukkan prompt di baris perintah:
python src/test.py --task_name bigbench --prompt " Answer questions about a table of penguins and their attributes. " --prompt_file " prompt file path " --train_size 70 --eval_size 50 --test_size 79 --seed 42 --base_model_type " openai " --base_model_name ' gpt-3.5-turbo ' --data_dir " datasets/penguins_in_a_table.json " --base_api_key " your_api " atau
Letakkan prompt di file .txt jika prompt sangat panjang:
python src/test.py --task_name bigbench --prompt_file " prompt file path " --train_size 70 --eval_size 50 --test_size 79 --seed 42 --base_model_type " openai " --base_model_name ' gpt-3.5-turbo ' --data_dir " datasets/penguins_in_a_table.json " --base_api_key " your_api " Jika Anda menggunakan model HuggingFace TextGeneration, silakan modifikasi base_model_setting atau optim_model_setting di file .yaml. Jika Anda berencana untuk menggunakan model open-source, kami merekomendasikan menggunakan model yang disesuaikan dengan instruksi dengan ukuran sedang, seperti Mistralai/Mistral-7b-instruct-V0.2. Seperti yang kami sebutkan di koran, prompt tingkat ahli disiapkan untuk LLM yang relatif canggih.
Catatan : Anda dapat memodifikasi parameter model HuggingFace (seperti MAX_NEW_TOKENS), karena model ini mungkin memiliki jendela input yang berbeda atau pengaturan lainnya.
Berikut adalah contoh menggunakan Mistralai/Mistral-7b-instruct-V0.2:
base_model_setting:
model_type: hf_textgeneration # openai | palm | hf_text2text | hf_textgeneration | ct_model
model_name: mistralai/Mistral-7B-Instruct-v0.2 # api-based model'name or huggingface model name
temperature: 0.0
api_key: null # if need api key
device: cuda # cuda | cpu | cuda:x, e.g. 0,1,2...
model_path: null # ct model requires the downloaded model's path Anda dapat menambahkan file .py baru termasuk model baru Anda. Kelas model membutuhkan dua fungsi: batch_forward_func: masukkan batch prompt, output batch respons model.
def batch_forward_func(self, batch_prompts: List(str)):
...
return List(str)Hasilkan: Masukkan satu prompt, output satu respons
def generate(self, input: str):
...
return strMaka Anda dapat menambahkan nama model_type dan nama kelas di init .py di folder language_model. Anda juga dapat menghubungi kami, jika Anda memenuhi masalah apa pun atau ingin menambah repo resmi.
Kelas tugas dasar kami dapat dilihat dalam file tugas/base_task.py, di mana fungsi -fungsi khusus tugas dijelaskan secara rinci. Tugas kami saat ini mencakup tugas pertanyaan seleksi dan tugas NER. Menambahkan tugas pilihan baru relatif mudah. Silakan merujuk ke file .py di folder tugas. Pertama, buat file Task.py baru dan kelas CustomTask baru. Kemudian, ada beberapa fungsi khusus tugas yang akan diimplementasikan dalam file Task.py yang Anda khusus:
Setelah itu, Anda dapat menjalankan promptAgent pada dataset khusus Anda!
Jika Anda menemukan kertas dan kode yang berguna, silakan membintangi repo ini dan mengutip kertas berikut. Jangan ragu untuk menghubungi [email protected] dan [email protected], atau buka masalah jika Anda memiliki pertanyaan. Terima kasih banyak!
@article { wang2023promptagent ,
title = { PromptAgent: Strategic Planning with Language Models Enables Expert-level Prompt Optimization } ,
author = { Wang, Xinyuan and Li, Chenxi and Wang, Zhen and Bai, Fan and Luo, Haotian and Zhang, Jiayou and Jojic, Nebojsa and Xing, Eric P and Hu, Zhiting } ,
journal = { arXiv preprint arXiv:2310.16427 } ,
year = { 2023 }
}