
Este es el repositorio oficial de "PractAgent: la planificación estratégica con modelos de idiomas permite la optimización de inmediato a nivel de experto". PractAgent es un nuevo método de optimización de inmediato automático que elabora autónomos de manera equivalente en calidad a aquellos hechos a mano por expertos, es decir, indicaciones a nivel de experto. [arxiv]


git clone https://github.com/XinyuanWangCS/PromptAgent.git
cd PromptAgent
conda create -n prompt_agent
conda activate prompt_agent
pip install -r requirements.txtEl siguiente comando se ejecuta PractAgent para elaborar una solicitud de experto para una tarea de Big Bench, Penguins_in_A_Table. La ejecución podría tomar algún tiempo dependiendo de la velocidad de inferencia de las API de OpenAI y el tamaño de los conjuntos de datos.
Nota : Antes de ejecutar este comando, agregue su tecla API (OpenAI) al archivo Ejemplo_Config.yaml (base_model_setting: API_KEY y OPTIM_MODEL_SETTING: API_KEY). También puede consultar todos los demás Aventos en el archivo YAML.
python src/main.py --config_dir example_config.yaml penguins_in_a_table es una tarea de comprensión de la tabla para responder preguntas sobre animales contenidos en las tablas. Un ejemplo del conjunto de datos original se ve así:
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:
Entonces, el resultado esperado es Bernard .
La consulta inicial del conjunto de datos de Big Bench es Answer questions about a table of penguins and their attributes. Comenzando con una solicitud tan ordinaria, PractAgent muestreará estratégicamente errores del modelo (del modelo base), generará comentarios de errores (acciones), simulará recompensas futuras y buscará rutas de alta recompensa que conducen a indicaciones de expertos. La solicitud optimizada para penguins_in_a_table se verá así (los resultados exactos pueden variar ya que esto no es determinista):
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.
...
Se necesitan alrededor de dos horas para ejecutar el experimento anterior, que cuesta alrededor de $ 5 usando API Operai (alrededor de $ 4 para GPT-4 y $ 1 para GPT-3.5). Después de terminar la optimización, todos los nodos y rutas intermedios se almacenarán en un archivo JSON. Mantendremos los nodos de recompensa Top-K, el último nodo en la ruta de recompensa promedio más alta y el nodo de recompensa más alto en la ruta de recompensa promedio más alta. En el documento, utilizamos el nodo de recompensa más alto en la ruta de recompensa promedio más alta como la estrategia de selección.
Podemos ejecutar test.py para probar cualquier rendimiento de inmediato con los siguientes comandos:
Ingrese la solicitud en la línea 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 " o
Coloque el mensaje en un archivo .txt si el mensaje es muy largo:
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 " Si está utilizando el modelo de Generación de textos Huggingface, modifique el base_model_setting o optim_model_setting en el archivo .yaml. Si planea usar modelos de código abierto, recomendamos usar modelos ajustados a instrucciones con un tamaño moderado, como MistraLai/Mistral-7B-InStruct-V0.2. Como mencionamos en el documento, se preparan un aviso de nivel experto para LLM relativamente avanzados.
Nota : Puede modificar los parámetros del modelo Huggingface (como Max_New_Tokens), ya que estos modelos pueden tener diferentes ventanas de entrada u otras configuraciones.
Aquí hay un ejemplo de uso de MistraLai/Mistral-7B-InNSTRUCT-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 Puede agregar un nuevo archivo .py que incluye su nuevo modelo. La clase del modelo requiere dos funciones: Batch_forward_func: ingrese un lote de indicaciones, emite un lote de respuestas del modelo.
def batch_forward_func(self, batch_prompts: List(str)):
...
return List(str)Generar: ingrese una solicitud, salida una respuesta
def generate(self, input: str):
...
return strLuego puede agregar el nombre Model_Type y el nombre de clase en la carpeta init .py en la carpeta Language_Model. También puede contactarnos, si se encuentra con algún problema o desea agregar al repositorio oficial de apertura.
Nuestra clase de tareas base se puede ver en el archivo tareas/base_task.py, donde las funciones específicas de las tareas se explican en detalle. Nuestras tareas actuales incluyen tareas de preguntas de selección y tareas NER. Agregar nuevas tareas de selección es relativamente fácil. Consulte los archivos .py en la carpeta de tareas. Primero, cree un nuevo archivo Task.py y una nueva clase CustomTask. Luego, hay varias funciones específicas de la tarea que se implementarán en su archivo Task.py personalizado.
Después de eso, ¡puede ejecutar apropedgent en su conjunto de datos personalizado!
Si encuentra útiles el documento y el código, establezca este repositorio y cita el siguiente documento. No dude en comunicarse con [email protected] y [email protected], o abrir un problema si tiene alguna pregunta. ¡Muchas gracias!
@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 }
}