
Это официальное репо для «resckagent: стратегическое планирование с языковыми моделями обеспечивает быстрое оптимизацию на уровне экспертов». Resckagent-это новый метод автоматической оперативной оптимизации, который автономно создает эквивалент качества, которые изготовлены экспертами, т. Е. Подсказки на уровне экспертов. [arxiv]


git clone https://github.com/XinyuanWangCS/PromptAgent.git
cd PromptAgent
conda create -n prompt_agent
conda activate prompt_agent
pip install -r requirements.txtСледующая команда выполняет быстрое, чтобы создать экспертную подсказку для задачи с большим количеством, penguins_in_a_table. Работа может занять некоторое время в зависимости от скорости вывода API OpenAI и размера наборов данных.
ПРИМЕЧАНИЕ . Перед выполнением этой команды добавьте свой ключ (OpenAI) API в файл exatter_config.yaml (base_model_setting: api_key и optim_model_setting: api_key). Вы также можете проверить все остальные документы в файле YAML.
python src/main.py --config_dir example_config.yaml penguins_in_a_table - это задача по пониманию таблицы, чтобы ответить на вопросы о животных, содержащихся в таблицах. Пример из исходного набора данных выглядит так:
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:
Затем ожидаемый результат - Bernard .
Первоначальный запрос из набора данных Big-Bench-это Answer questions about a table of penguins and their attributes. Начиная с такой обычной подсказки, resckagent будет стратегически выбирать ошибки модели (из базовой модели), генерировать обратную связь с ошибками (действия), моделировать будущие вознаграждения и искать пути с высокими вознаграждениями, ведущие к экспертным подсказкам. Оптимизированная подсказка для penguins_in_a_table будет выглядеть так (точные результаты могут варьироваться, так как это не детерминистично):
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.
...
Для проведения вышеуказанного эксперимента требуется около двух часов, который стоит около 5 долларов США с использованием API OpenaI (около 4 долларов за GPT-4 и 1 доллар за GPT-3,5). После завершения оптимизации все промежуточные узлы и пути будут храниться в файле JSON. Мы сохраним узлы вознаграждения Top-K, последний узел в самом высоком среднем пути вознаграждения и самый высокий узел вознаграждения в самом высоком среднем пути вознаграждения. В статье мы используем самый высокий узел вознаграждения в самом высоком среднем пути вознаграждения в качестве стратегии отбора.
Мы можем запустить test.py , чтобы проверить любую оперативную производительность со следующими командами:
Введите подсказку в командной строке:
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 " или
Поместите запрос в файл .txt, если подсказка очень длинная:
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 " Если вы используете модель TextGeneration HuggingFace, пожалуйста, измените BASE_MODEL_SETTING или OPTIME_MODEL_SETTING в файле .YAML. Если вы планируете использовать модели с открытым исходным кодом, мы рекомендуем использовать модели, настроенные на инструкции с умеренным размером, такие как Mistralai/Mistral-7B-Instruct-V0.2. Как мы упоминали в статье, подсказка на уровне экспертов готовится для относительно продвинутых LLMS.
Примечание . Вы можете изменить параметры модели HuggingFice (например, max_new_tokens), поскольку эти модели могут иметь разные входные окна или другие настройки.
Вот пример использования 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 Вы можете добавить новый файл .py, включая вашу новую модель. Класс модели требует двух функций: batch_forward_func: введите партию подсказок, выводит партию ответов модели.
def batch_forward_func(self, batch_prompts: List(str)):
...
return List(str)Создать: введите одну подсказку, выведите один ответ
def generate(self, input: str):
...
return strЗатем вы можете добавить имя Model_type и имя класса в папке init . Вы также можете связаться с нами, если вы встретите какую -либо проблему или хотите добавить в официальный rommeragent Repo.
Наш базовый класс задач можно увидеть в файле задач/base_task.py, где подробно объясняются конкретные функции задач. Наши текущие задачи включают задачи для выбора и задачи NER. Добавление новых задач выбора относительно просто. Пожалуйста, обратитесь к файлам .py в папке задач. Во -первых, создайте новый файл задачи.py и новый класс CustomTask. Затем есть несколько функций, конкретных для конкретных задач, которые будут реализованы в вашем файле usdized task.py:
После этого вы можете запустить resckeAgent в своем настроенном наборе данных!
Если вы найдете полезную бумагу и код, пожалуйста, обратите внимание на это репо и приведьте следующую статью. Не стесняйтесь обращаться к [email protected] и [email protected] или откройте проблему, если у вас есть какие -либо вопросы. Спасибо!
@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 }
}