
Este é o repositório oficial de "PromptAgent: Planejamento Estratégico com Modelos de Língua permite a otimização imediata no nível de especialistas". O PromptAgent é um novo método automático de otimização de otimização que cria autonomamente instruções equivalentes em qualidade aos artesanais por especialistas, ou seja, avisos de nível de especialista. [Arxiv]


git clone https://github.com/XinyuanWangCS/PromptAgent.git
cd PromptAgent
conda create -n prompt_agent
conda activate prompt_agent
pip install -r requirements.txtO seguinte comando execute o PromptAgent para criar um prompt de especialista para uma tarefa de grande banco, Penguins_in_a_table. A corrida pode levar algum tempo, dependendo da velocidade de inferência das APIs do OpenAI e do tamanho dos conjuntos de dados.
NOTA : Antes de executar este comando, adicione sua tecla API (OpenAI) ao arquivo exemplo_config.yaml (base_model_setting: api_key e otim_model_setting: api_key). Você também pode verificar todos os outros AUGUMENTOS no arquivo YAML.
python src/main.py --config_dir example_config.yaml penguins_in_a_table é uma tarefa de compreensão da tabela para responder a perguntas sobre animais contidos nas tabelas. Um exemplo do conjunto de dados original se parece com o seguinte:
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:
Então, o resultado esperado é Bernard .
A consulta inicial do conjunto de dados de grande parte do banco é de Answer questions about a table of penguins and their attributes. Começando com um prompt tão comum, o PromptAgent provará estrategicamente erros do modelo (do modelo básico), gerará feedbacks de erros (ações), simulará recompensas futuras e pesquisará os caminhos de alta recompensa levam a avisos de especialistas. O prompt otimizado para penguins_in_a_table ficará assim (os resultados exatos podem variar, pois isso não é determinístico):
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.
...
Demora cerca de duas horas para executar o experimento acima, que custa cerca de US $ 5 usando a API OpenAI (cerca de US $ 4 para GPT-4 e US $ 1 para o GPT-3,5). Depois de terminar a otimização, todos os nós e caminhos intermediários serão armazenados em um arquivo JSON. Manteremos os nós de recompensa mais alto, o último nó no caminho médio de recompensa mais alto e o nó de recompensa mais alto no caminho de recompensa média mais alto. No artigo, usamos o nó de recompensa mais alto no mais alto caminho de recompensa média como estratégia de seleção.
Podemos executar test.py para testar qualquer desempenho imediato com os seguintes comandos:
Digite o prompt na linha de comando:
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 " ou
Coloque o prompt em um arquivo .txt se o prompt for muito longo:
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 " Se você estiver usando o modelo HuggingFace TextGeneration, modifique o base_model_setting ou otim_model_setting no arquivo .yaml. Se você planeja usar modelos de código aberto, recomendamos o uso de modelos ajustados por instruções com tamanho moderado, como Mistralai/Mistral-7B-Instrut-V0.2. Como mencionamos no artigo, o prompt de nível de especialista é preparado para o LLMS relativamente avançado.
Nota : Você pode modificar os parâmetros do modelo Huggingface (como max_new_tokens), pois esses modelos podem ter janelas de entrada diferentes ou outras configurações.
Aqui está um exemplo de uso de 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 Você pode adicionar um novo arquivo .py, incluindo seu novo modelo. A classe do modelo requer duas funções: Batch_forward_func: Insira um lote de avisos, produza um lote das respostas do modelo.
def batch_forward_func(self, batch_prompts: List(str)):
...
return List(str)gerar: entrada um prompt, saída uma resposta
def generate(self, input: str):
...
return strEm seguida, você pode adicionar o nome Model_type e o nome da classe no init.py na pasta Language_model. Você também pode entrar em contato conosco, se encontrar algum problema ou quiser adicionar ao repositório oficial do PromptAgent.
Nossa classe de tarefa base pode ser vista no arquivo Tasks/Base_task.py, onde as tarefas específicas são explicadas em detalhes. Nossas tarefas atuais incluem tarefas de perguntas de seleção e tarefas NER. Adicionar novas tarefas de seleção é relativamente fácil. Consulte os arquivos .py na pasta Tarefas. Primeiro, crie um novo arquivo Task.py e uma nova classe CustomTask. Em seguida, existem várias funções específicas de tarefas a serem implementadas em seu arquivo Task.py personalizado:
Depois disso, você pode executar o PlessAgent no seu conjunto de dados personalizado!
Se você achar útil o papel e o código, por favor, por favor, estrela este repo e cite o documento a seguir. Sinta -se à vontade para entrar em contato com [email protected] e [email protected] ou abrir um problema se tiver alguma dúvida. Muito obrigado!
@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 }
}