
هذا هو الريبو الرسمي لـ "المطالبة: التخطيط الاستراتيجي مع نماذج اللغة يتيح تحسين موجه على مستوى الخبراء". Prompragent هي طريقة تحسين موجه أوتوماتيكي جديد تطلب من الحرف اليدوية بشكل مستقل ما يعادلها في الجودة لأولئك الذين صممهم الخبراء ، أي مطالبات على مستوى الخبراء. [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يقوم الأمر التالي بتشغيل Promsagent لصياغة موجه خبير لمهمة كبيرة على المقعد ، penguins_in_a_table. قد يستغرق التشغيل بعض الوقت اعتمادًا على سرعة استنتاج واجهات برمجة تطبيقات Openai وحجم مجموعات البيانات.
ملاحظة : قبل تشغيل هذا الأمر ، يرجى إضافة مفتاح API (Openai) إلى ملف example_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 .
الاستعلام الأولي من مجموعة البيانات الكبيرة هو Answer questions about a table of penguins and their attributes. بدءًا من مثل هذه المطالبة العادية ، ستقوم المطالبة بتجربة أخطاء نموذجية بشكل استراتيجي (من النموذج الأساسي) ، وإنشاء ملاحظات خطأ (الإجراءات) ، ومحاكاة المكافآت المستقبلية ، والبحث عن مسارات عالية الاستنباط تؤدي إلى مطالبات الخبراء. ستبدو المطالبة المحسنة لـ 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 دولارات باستخدام Openai API (حوالي 4 دولارات لـ GPT-4 و 1 دولار لـ GPT-3.5). بعد الانتهاء من التحسين ، سيتم تخزين جميع العقد والمسارات الوسيطة في ملف JSON. سنحتفظ بعقد المكافآت العليا 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 " إذا كنت تستخدم نموذج HuggingFace TextGeneration ، فيرجى تعديل base_model_setting أو Optim_Model_setting في ملف .yaml. إذا كنت تخطط لاستخدام نماذج مفتوحة المصدر ، فإننا نتوصى باستخدام النماذج التي تم ضبطها على التعليمات ذات الحجم المعتدل ، مثل Mistralai/Mistral-7B-instruct-V0.2. كما ذكرنا في الورقة ، يتم إعداد مطالبة على مستوى الخبراء ل LLMs متقدمة نسبيا.
ملاحظة : يمكنك تعديل معلمات نموذج LuggingFace (مثل 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 .py في مجلد language_model. يمكنك أيضًا الاتصال بنا ، إذا واجهت أي مشكلة أو ترغب في إضافتها إلى Reportagent Repo الرسمي.
يمكن رؤية فئة المهام الأساسية الخاصة بنا في ملف المهام/base_task.py ، حيث يتم شرح وظائف محددة المهام بالتفصيل. تتضمن مهامنا الحالية مهام أسئلة الاختيار ومهام NER. إضافة مهام اختيار جديدة أمر سهل نسبيا. يرجى الرجوع إلى ملفات .py في مجلد المهام. أولاً ، قم بإنشاء ملف Task.py جديد وفئة CustomTask جديدة. ثم ، هناك العديد من الوظائف الخاصة بالمهمة التي يجب تنفيذها في ملف Task.py المخصص:
بعد ذلك ، يمكنك تشغيل Promsagent على مجموعة البيانات المخصصة الخاصة بك!
إذا وجدت الورقة والرمز مفيدة ، فيرجى تفضل ببطولة هذا الريبو واستشهد بالورقة التالية. لا تتردد في الاتصال بـ [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 }
}