چیتشیت
مهندسی پرامپت
Prompt Engineering
نوشتن پرامپت، افزودن مثال و استدلال، رأیگیری و بودجهبندی پنجرهی بافتار. پایتون برگرفته از درسها.
فهرست مطالب
چه چیزهایی در پنجره قرار میگیرد
معماریچینش بافتار به ازای هر پرسش
گامبهگام- ContextBudgetتوکنهای در دسترس برابر است با
max_tokensمنهایgeneration_reserve. - پرامپت سیستماول از همه تخصیص دهید، تا 1000 توکن.
- select_toolsتابع
classify_intentنیتها را انتخاب میکند. ابزارهای منطبق را تا سقف 2000 توکن نگه دارید. - score_relevanceاسناد با همپوشانی کلمات 0.05 یا بیشتر را نگه دارید.
- reorder_lost_in_middleبهترین اسناد در ابتدا و انتها. تخصیص تا سقف 3000 توکن.
- ConversationManagerخلاصهی نوبتهای قدیمی بهعلاوهی نوبتهای اخیر، تا سقف 5000 توکن.
- پرسش کاربرآخرین بخش تخصیصیافته، تا 500 توکن.
وظایف در کد
کار و کد| وظیفه | کد |
|---|---|
| ساخت پرامپت از روی الگو | build_prompt("persona", <variables>) |
| ساخت لیست پیام چندنوبتی | build_multi_turn(<pattern>, <turns>) |
| امتیازدهی به یک خروجی | score_response(<text>, <criteria>) |
| پرامپت Few-shot CoT | build_cot_prompt(question, examples, num_examples=3) |
| رأیگیری اکثریتی روی نمونهها | self_consistency_solve(question, examples, client, model, n_samples=5) |
| ابتدا CoT، سپس رأیگیری، سپس ToT | solve_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 code | 0.0 | مقدار 1.0 برای Top-p. مناسب برای تست پرامپت |
Temperature, summarization | 0.3 | مقدار 0.9 برای Top-p |
Temperature, general Q&A | 0.7 | مقدار 0.95 برای Top-p |
Few-shot examples | 3-5 | یک مورد به ازای هر برچسب در صورت تعدد برچسبها |
n_samples | 5 | در دمای 0.7. حداقل تعداد رأی N=3 است |
Vote confidence to accept | 0.8 | کمتر از آن، ارتقا به Tree-of-Thought |
generation_reserve | 4000 | توکنهای خالی نگهداشتهشده برای پاسخ |
System prompt size | under 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 توکن) خلاصه کنید.
- برای کش کردن پرامپت، بخشهای ثابت را در بالا و بخشهای متغیر را در پایین بگذارید.