چیت‌شیت

مهندسی پرامپت

Prompt Engineering

نوشتن پرامپت، افزودن مثال و استدلال، رأی‌گیری و بودجه‌بندی پنجره‌ی بافتار. پایتون برگرفته از درس‌ها.

  • ۱۱ بخش
  • ۴ درس مرتبط
  • کد و دستورها عیناً از دوره‌ی اصلی
فهرست مطالب
  1. چه چیزهایی در پنجره قرار می‌گیرد
  2. چینش بافتار به ازای هر پرسش
  3. وظایف در کد
  4. رأی‌گیری خودسازگاری
  5. انتخاب روش استدلال
  6. کالبدشناسی و الگوهای پرامپت
  7. پیش‌فرض‌ها و ارقام
  8. عیب‌یابی
  9. کوته‌نوشت‌ها
  10. پرسش‌ها
  11. نکات

چه چیزهایی در پنجره قرار می‌گیرد

معماری
مجموعپرامپت سیستمحدود 500 توکنتعریف ابزارها2K تا 8K توکنبافتار بازیابی‌شده2K تا 10K توکنتاریخچه‌ی گفت‌وگو2K تا 20K توکنمثال‌های Few-shot1K تا 3K توکنپرسش کاربر100 تا 500 توکنبودجه‌ی تولید2K تا 8K توکنپنجره‌ی بافتارورودی به‌علاوه‌ی خروجی

چینش بافتار به ازای هر پرسش

گام‌به‌گام
  1. ContextBudgetتوکن‌های در دسترس برابر است با max_tokens منهای generation_reserve.
  2. پرامپت سیستماول از همه تخصیص دهید، تا 1000 توکن.
  3. select_toolsتابع classify_intent نیت‌ها را انتخاب می‌کند. ابزارهای منطبق را تا سقف 2000 توکن نگه دارید.
  4. score_relevanceاسناد با همپوشانی کلمات 0.05 یا بیشتر را نگه دارید.
  5. reorder_lost_in_middleبهترین اسناد در ابتدا و انتها. تخصیص تا سقف 3000 توکن.
  6. ConversationManagerخلاصه‌ی نوبت‌های قدیمی به‌علاوه‌ی نوبت‌های اخیر، تا سقف 5000 توکن.
  7. پرسش کاربرآخرین بخش تخصیص‌یافته، تا 500 توکن.

وظایف در کد

کار و کد
وظیفهکد
ساخت پرامپت از روی الگوbuild_prompt("persona", <variables>)
ساخت لیست پیام چندنوبتیbuild_multi_turn(<pattern>, <turns>)
امتیازدهی به یک خروجیscore_response(<text>, <criteria>)
پرامپت Few-shot CoTbuild_cot_prompt(question, examples, num_examples=3)
رأی‌گیری اکثریتی روی نمونه‌هاself_consistency_solve(question, examples, client, model, n_samples=5)
ابتدا CoT، سپس رأی‌گیری، سپس ToTsolve_with_escalation(question, examples, client, model)
بودجه‌بندی پنجرهContextBudget(max_tokens=128000, generation_reserve=4000)
هرس ابزارها بر اساس نیتselect_tools(query, token_budget=2000)

رأی‌گیری خودسازگاری

کد
python
system, user = build_cot_prompt(question, examples)                 # 3 مثال حل‌شده
answers = []
for _ in range(n_samples):                                          # n_samples=5
    text = call_llm(client, model, system, user, temperature=0.7)
    answer = extract_answer(text)                                   # «The answer is <n>» را می‌خواند
    if answer is not None:
        answers.append(answer)
vote_counts = Counter(answers)
best_answer = vote_counts.most_common(1)[0][0]                      # پاسخ اکثریت
confidence = vote_counts[best_answer] / len(answers)
if confidence >= 0.8 and single_answer == sc_answer:
    ...                                                             # پذیرش رأی
tree_of_thought_solve(question, client, model, breadth=3, depth=2)  # در غیر این صورت

انتخاب روش استدلال

دستورها
دستورکارکرد
Zero-shotوظایف ساده. 1 فراخوانی، بدون سرریز
Few-shotتطبیق فرمت. 200-500 توکن اضافه
Zero-shot CoTافزودن «Let's think step by step». بین 50-200 توکن
Few-shot CoTبهترین دقت در تک‌فراخوانی. 300-600 توکن
Self-consistency, N=5استدلال با حساسیت بالا. 5 برابر هزینه‌ی توکن
Tree-of-Thoughtجست‌وجو و برنامه‌ریزی. 10 تا بیش از 40 فراخوانی
ReActاستدلال مبتنی بر دانش. 3 تا بیش از 10 فراخوانی
Prompt chainingوظایف پیچیده‌ی چندمرحله‌ای. 2-5 فراخوانی

کالبدشناسی و الگوهای پرامپت

مفهوم‌ها
پیام سیستمی
هویت، قوانین و محدودیت‌ها. در سراسر نوبت‌های گفت‌وگو پایدار است.
پیام کاربر
وظیفه. در هر نوبت تغییر می‌کند.
پیش‌پاسخ دستیار
پاسخی جزئی مانند { که فرمت را تعیین می‌کند.
نقش
یک نقش دقیق، توزیع خروجی را متمرکز و محدود می‌کند.
محدودیت‌ها
منفی «هرگز نـ»، مثبت «همیشه»، شرطی «اگر X آنگاه Y».
جداکننده‌ها
تگ‌های XML مثل <analysis> بخش‌ها را مجزا نگه می‌دارند.
وضوح
ذکر فرمت، طول، مخاطب، موارد مجاز و غیرمجاز، یک مثال.
گم شدن در میانه
دقت 85-90% در ابتدا یا انتها، 60-70% در میانه.

پیش‌فرض‌ها و ارقام

پیش‌فرض‌ها
تنظیمپیش‌فرضنکته
Temperature, extraction and code0.0مقدار 1.0 برای Top-p. مناسب برای تست پرامپت
Temperature, summarization0.3مقدار 0.9 برای Top-p
Temperature, general Q&A0.7مقدار 0.95 برای Top-p
Few-shot examples3-5یک مورد به ازای هر برچسب در صورت تعدد برچسب‌ها
n_samples5در دمای 0.7. حداقل تعداد رأی N=3 است
Vote confidence to accept0.8کمتر از آن، ارتقا به Tree-of-Thought
generation_reserve4000توکن‌های خالی نگه‌داشته‌شده برای پاسخ
System prompt sizeunder 500 tokensبرای بیشتر وظایف

عیب‌یابی

عیب‌یابی
  • خروجی عمومی و با کیفیت متوسط

    علت
    وظیفه‌ی مبهم، نقش کلی
    راه‌حل
    تعیین نقش، فرمت، طول و مخاطبِ مشخص
  • مهملات با اعتمادبه‌نفس بالا

    علت
    نقش در داده‌های آموزشی بسیار نادر است
    راه‌حل
    استفاده از نقشی با گستردگی بیشتر
  • مدل یک قانون را رعایت و دیگری را رها می‌کند

    علت
    دستورالعمل‌های متناقض
    راه‌حل
    بررسی پرامپت برای یافتن تعارض‌ها
  • افت کیفیت انجام وظیفه

    علت
    2000 کلمه قانون و مقررات
    راه‌حل
    پرامپت سیستم را زیر 500 توکن نگه دارید
  • متن کاربر قوانین را دور می‌زند

    علت
    تزریق پرامپت
    راه‌حل
    اعتبارسنجی ورودی، استفاده از جداکننده‌ها، فیلتر خروجی
  • تمام آرا یکسان هستند

    علت
    نمونه‌ها در دمای 0.0 تولید شده‌اند
    راه‌حل
    نمونه‌گیری در دمای 0.7
  • آرا قابل مقایسه نیستند

    علت
    نبود فرمت پاسخ ثابت
    راه‌حل
    پایان با عبارت «The answer is [number]»
  • نادیده گرفته شدن یک فکت کلیدی

    علت
    قرار گرفتن فکت در میانه‌ی بافتار طولانی
    راه‌حل
    آن را در ابتدا یا انتها بگذارید، یا در انتها تکرار کنید

کوته‌نوشت‌ها

اصطلاح‌ها
CoT
زنجیره‌ی فکر (Chain-of-Thought). توکن‌های استدلال پیش از پاسخ نهایی.
ToT
درخت فکر (Tree-of-Thought). تولید، امتیازدهی و هرس branchهای استدلال.
ReAct
چرخه‌ی فکر، اقدام و مشاهده همراه با ابزارها.
خودسازگاری
N نمونه در دمای بالاتر از 0، رأی‌گیری اکثریتی.
Top-p
نمونه‌برداری هسته‌ای. کوچک‌ترین مجموعه‌ی توکن با احتمال تجمعی p.
Few-shot
بین 2 تا 10 مثال ورودی و خروجی درون پرامپت.
NIAH
سوزن در انبار کاه. آزمون بازخوانی بر اساس جایگاه در بافتار طولانی.

پرسش‌ها

پرسش و پاسخ
چرا CoT کمک می‌کند؟
هر توکن استدلال، بافتاری برای توکن بعدی است و عمق محاسبات را افزایش می‌دهد.
چه زمانی CoT آسیب می‌زند؟
بازخوانی‌های ساده و دسته‌بندی‌های تک‌مرحله‌ای. 50-200 توکن اضافه می‌کند.
استفاده از CoT روی مدل استدلالی؟
خیر. مدل درونی استدلال می‌کند؛ این عبارت زائد است.
چرا ابتدا در دمای 0 تست کنیم؟
کیفیت پرامپت را از نویز نمونه‌برداری جدا می‌کند.
استفاده‌ی هم‌زمان از دما و top-p؟
خیر. فقط از یکی استفاده کنید. برهم‌کنش غیرقابل پیش‌بینی دارند.

نکات

نکته‌ها
  • مثال‌هایی شبیه به ورودی انتخاب کنید. همه‌ی برچسب‌ها را پوشش دهید.
  • دستورالعمل‌های حیاتی را در ابتدا و پرسش را در انتها قرار دهید.
  • تکه‌های بازیابی‌شده‌ی زیر آستانه‌ی ارتباط را حذف کنید. بازیابی بد بدتر از بازیابی نکردن است.
  • تنها ابزارهای مورد نیاز نیت را بگنجانید. توکن‌های ابزار 60-80% کاهش می‌یابد.
  • تاریخچه را پس از عبور از یک آستانه (مثل 5000 توکن) خلاصه کنید.
  • برای کش کردن پرامپت، بخش‌های ثابت را در بالا و بخش‌های متغیر را در پایین بگذارید.
ترجمه‌ی فارسی چیت‌شیت Prompt Engineering از دوره‌ی AI Engineering from Scratch، نوشته‌ی Rohit Ghumare، تحت مجوز MIT. کد و دستورها عیناً از متن اصلی‌اند. همه‌ی چیت‌شیت‌ها