
Dies ist das offizielle Repo für "promptagent: Strategische Planung mit Sprachmodellen ermöglicht die Schnelloptimierung auf Expertenebene". Promptagent ist eine neuartige Methode für automatische Eingabeaufforderungoptimierungsmethoden, die die Qualität autonom auf die Qualität der Qualität der Handwerke von Experten, dh Expertenebene, auffordert. [Arxiv]


git clone https://github.com/XinyuanWangCS/PromptAgent.git
cd PromptAgent
conda create -n prompt_agent
conda activate prompt_agent
pip install -r requirements.txtDer folgende Befehl läuft Eingabeaufforderung, eine Expertenaufforderung für eine Big-Bench-Aufgabe, penguins_in_a_table, zu erstellen. Das Laufen könnte einige Zeit dauern, abhängig von der Schlussfolgerung von OpenAI -APIs und der Größe der Datensätze.
HINWEIS : Bevor Sie diesen Befehl ausführen, fügen Sie bitte Ihre (OpenAI) API -Taste in die Datei example_config.yaml hinzu (Base_Model_Setting: api_key und optim_model_Setting: api_key). Sie können auch alle anderen Augumente in der YAML -Datei überprüfen.
python src/main.py --config_dir example_config.yaml penguins_in_a_table ist eine Tabellenverständnisaufgabe, um Fragen zu Tieren zu beantworten, die in Tabellen enthalten sind. Ein Beispiel aus dem ursprünglichen Datensatz sieht folgt aus:
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:
Dann ist das erwartete Ergebnis Bernard .
Die anfängliche Abfrage aus dem Big-Bench-Datensatz ist Answer questions about a table of penguins and their attributes. Beginnend mit einer solchen gewöhnlichen Eingabeaufforderung wird Promptagent strategisch Modell Fehler (aus dem Basismodell) probieren, Fehlerfeedbacks (Aktionen) generieren, zukünftige Belohnungen simulieren und nach hochrangigen Pfaden suchen, die zu Expertenaufforderungen führen. Die optimierte Eingabeaufforderung für penguins_in_a_table sieht so aus (genaue Ergebnisse können variieren, da dies nicht deterministisch ist):
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.
...
Es dauert ungefähr zwei Stunden, um das obige Experiment durchzuführen, das mit OpenAI-API rund 5 US-Dollar kostet (etwa 4 US-Dollar für GPT-4 und 1 USD für GPT-3,5). Nach Abschluss der Optimierung werden alle Zwischenknoten und Pfade in einer JSON -Datei gespeichert. Wir werden die Top-K-Belohnungsknoten, den letzten Knoten im höchsten durchschnittlichen Belohnungsweg und den höchsten Belohnungsknoten im höchsten durchschnittlichen Belohnungsweg behalten. In dem Papier verwenden wir den höchsten Belohnungsknoten im höchsten durchschnittlichen Belohnungsweg als Auswahlstrategie.
Wir können test.py ausführen, um eine sofortige Leistung mit den folgenden Befehlen zu testen:
Geben Sie die Eingabeaufforderung in der Befehlszeile ein:
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 " oder
Setzen Sie die Eingabeaufforderung in eine .txt -Datei ein, wenn die Eingabeaufforderung sehr lang ist:
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 " Wenn Sie das Huggingface -Textgenerationsmodell verwenden, ändern Sie bitte die Base_Model_Setting oder optim_model_Setting in der .yaml -Datei. Wenn Sie vorhaben, Open-Source-Modelle zu verwenden, empfehlen wir mit moderaten Größe mit mäßigem Anweisungsmodellen wie Mistralai/Mistral-7b-Instruct-V0.2. Wie wir in der Zeitung erwähnt haben, werden die Eingabeaufforderung auf Expertenebene für relativ fortgeschrittene LLMs vorbereitet.
Hinweis : Sie können die Parameter des Huggingface -Modells (z. B. max_new_tokens) ändern, da diese Modelle möglicherweise unterschiedliche Eingangsfenster oder andere Einstellungen haben.
Hier ist ein Beispiel für die Verwendung von 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 Sie können eine neue .py -Datei mit Ihrem neuen Modell hinzufügen. Die Klasse des Modells erfordert zwei Funktionen: batch_forward_func: Geben Sie eine Stapelaufforderung ein und geben Sie eine Stapel der Antworten des Modells aus.
def batch_forward_func(self, batch_prompts: List(str)):
...
return List(str)Generieren: Eingabeaufforderung eingeben, eine Antwort ausgeben
def generate(self, input: str):
...
return strDann können Sie den Namen model_type und den Klassennamen in der Init .py im Ordner "Language_Model" hinzufügen. Sie können uns auch mit uns in Verbindung setzen, wenn Sie ein Problem erfüllen oder das offizielle Rectoragent -Repo hinzufügen möchten.
Unsere Basis -Task -Klasse ist in der Datei Aufgaben/Base_task.py zu sehen, in der die spezifischen Funktionen aus den Aufgaben im Detail erläutert werden. Unsere aktuellen Aufgaben umfassen Auswahlfragebedingungen und NER -Aufgaben. Das Hinzufügen neuer Auswahlaufgaben ist relativ einfach. Bitte beachten Sie die .py -Dateien im Ordner "Aufgaben". Erstellen Sie zunächst eine neue Task.py -Datei und eine neue CustomTask -Klasse. Anschließend gibt es mehrere aufgabenspezifische Funktionen, die in Ihrer benutzerdefinierten Task.py-Datei implementiert werden müssen:
Danach können Sie Eingabeaufentwicklung in Ihrem angepassten Datensatz ausführen!
Wenn Sie das Papier und den Code nützlich finden, speichern Sie bitte dieses Repo und zitieren Sie das folgende Papier. Wenden Sie sich gerne an [email protected] und [email protected] oder öffnen Sie ein Problem, wenn Sie Fragen haben. Vielen Dank!
@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 }
}