مهندسی پرامپت به‌ندرت یک فرآیند یک‌مرحله‌ای است. بهترین پرامپت‌ها از طریق تکرار پدید می‌آیند—آزمایش، مشاهده و اصلاح تا زمانی که به نتایج مطلوب برسید.

<Callout type="info" title="پیش‌نویس اول، نه نسخه نهایی">
پرامپت اول خود را به عنوان یک پیش‌نویس اولیه در نظر بگیرید. حتی مهندسان پرامپت باتجربه نیز به‌ندرت در اولین تلاش به نتیجه مطلوب می‌رسند.
</Callout>

## چرخه تکرار

اصلاح مؤثر پرامپت از یک چرخه قابل پیش‌بینی پیروی می‌کند: نوشتن، آزمایش، تحلیل و بهبود. هر تکرار شما را به پرامپتی نزدیک‌تر می‌کند که به‌طور قابل اعتماد نتایج مورد نیاز شما را تولید می‌کند.

<IterativeRefinementDemo />

## الگوهای رایج اصلاح

بیشتر شکست‌های پرامپت در چند دسته مشخص قرار می‌گیرند. یادگیری تشخیص این الگوها به شما امکان می‌دهد مشکلات را سریعاً تشخیص داده و بدون شروع از ابتدا برطرف کنید.

### مشکل: خروجی بیش از حد طولانی

یکی از رایج‌ترین مشکلات. بدون محدودیت‌های صریح، مدل‌ها تمایل دارند جامع باشند نه مختصر.

<DiffView 
  before="Explain how photosynthesis works."
  after={`Explain how photosynthesis works in 3-4 sentences suitable for a 10-year-old.`}
  beforeLabel="اصلی"
  afterLabel="اصلاح‌شده"
/>

### مشکل: خروجی بیش از حد مبهم

پرامپت‌های مبهم، خروجی‌های مبهم تولید می‌کنند. مدل نمی‌تواند ذهن شما را بخواند که منظور شما از «بهتر» چیست یا کدام جنبه‌ها برای شما اهمیت بیشتری دارند.

<DiffView 
  before="Give me tips for better presentations."
  after={`Give me 5 specific, actionable tips for improving technical presentations to non-technical stakeholders. For each tip, include a concrete example.`}
  beforeLabel="اصلی"
  afterLabel="اصلاح‌شده"
/>

### مشکل: لحن نامناسب

لحن ذهنی است و بر اساس زمینه متفاوت است. آنچه برای مدل «حرفه‌ای» به نظر می‌رسد ممکن است با صدای سازمان شما یا رابطه شما با مخاطب مطابقت نداشته باشد.

<DiffView 
  before="Write an apology email for missing a deadline."
  after={`Write a professional but warm apology email for missing a project deadline. The tone should be accountable without being overly apologetic. Include a concrete plan to prevent future delays.`}
  beforeLabel="اصلی"
  afterLabel="اصلاح‌شده"
/>

### مشکل: فقدان اطلاعات کلیدی

درخواست‌های باز، پاسخ‌های باز دریافت می‌کنند. اگر به انواع خاصی از بازخورد نیاز دارید، باید صراحتاً آن‌ها را بخواهید.

<DiffView 
  before="Review this code."
  after={`Review this Python code for:
1. Bugs and logical errors
2. Performance issues
3. Security vulnerabilities
4. Code style (PEP 8)

For each issue found, explain the problem and suggest a fix.

[code]`}
  beforeLabel="اصلی"
  afterLabel="اصلاح‌شده"
/>

### مشکل: قالب ناهماهنگ

بدون یک الگو، مدل هر پاسخ را به شکل متفاوتی ساختار می‌دهد که مقایسه را دشوار و اتوماسیون را غیرممکن می‌سازد.

<DiffView 
  before="Analyze these three products."
  after={`Analyze these three products using this exact format for each:

## [Product Name]
**Price:** $X
**Pros:** [bullet list]
**Cons:** [bullet list]
**Best For:** [one sentence]
**Rating:** X/10

[products]`}
  beforeLabel="اصلی"
  afterLabel="اصلاح‌شده"
/>

## رویکرد اصلاح سیستماتیک

تغییرات تصادفی وقت را هدر می‌دهند. یک رویکرد سیستماتیک به شما کمک می‌کند مشکلات را سریعاً شناسایی کرده و به‌طور کارآمد برطرف کنید.

### مرحله ۱: تشخیص مشکل

قبل از تغییر هر چیزی، مشخص کنید که واقعاً چه چیزی اشتباه است. از این جدول تشخیصی برای نگاشت علائم به راه‌حل‌ها استفاده کنید:

<div className="my-4 grid gap-2">
  <div className="grid grid-cols-3 gap-2 p-3 bg-muted/50 rounded-lg text-sm">
    <span className="font-semibold">علامت</span>
    <span className="font-semibold">علت احتمالی</span>
    <span className="font-semibold">راه‌حل</span>
  </div>
  <div className="grid grid-cols-3 gap-2 p-3 bg-red-50 dark:bg-red-950/20 rounded-lg text-sm">
    <span>بیش از حد طولانی</span>
    <span className="text-muted-foreground">بدون محدودیت طول</span>
    <span className="text-green-600 dark:text-green-400">افزودن محدودیت کلمه/جمله</span>
  </div>
  <div className="grid grid-cols-3 gap-2 p-3 bg-red-50 dark:bg-red-950/20 rounded-lg text-sm">
    <span>بیش از حد کوتاه</span>
    <span className="text-muted-foreground">فاقد درخواست جزئیات</span>
    <span className="text-green-600 dark:text-green-400">درخواست توضیح بیشتر</span>
  </div>
  <div className="grid grid-cols-3 gap-2 p-3 bg-red-50 dark:bg-red-950/20 rounded-lg text-sm">
    <span>خارج از موضوع</span>
    <span className="text-muted-foreground">دستورالعمل‌های مبهم</span>
    <span className="text-green-600 dark:text-green-400">دقیق‌تر باشید</span>
  </div>
  <div className="grid grid-cols-3 gap-2 p-3 bg-red-50 dark:bg-red-950/20 rounded-lg text-sm">
    <span>قالب نادرست</span>
    <span className="text-muted-foreground">قالب مشخص نشده</span>
    <span className="text-green-600 dark:text-green-400">ساختار دقیق را تعریف کنید</span>
  </div>
  <div className="grid grid-cols-3 gap-2 p-3 bg-red-50 dark:bg-red-950/20 rounded-lg text-sm">
    <span>لحن نادرست</span>
    <span className="text-muted-foreground">مخاطب مشخص نیست</span>
    <span className="text-green-600 dark:text-green-400">مخاطب/سبک را مشخص کنید</span>
  </div>
  <div className="grid grid-cols-3 gap-2 p-3 bg-red-50 dark:bg-red-950/20 rounded-lg text-sm">
    <span>ناهماهنگ</span>
    <span className="text-muted-foreground">بدون مثال</span>
    <span className="text-green-600 dark:text-green-400">مثال‌های few-shot اضافه کنید</span>
  </div>
</div>

### مرحله ۲: اعمال تغییرات هدفمند

از وسوسه بازنویسی همه چیز مقاومت کنید. تغییر چندین متغیر همزمان غیرممکن می‌سازد که بدانید چه چیزی کمک کرد و چه چیزی آسیب رساند. یک تغییر انجام دهید، آن را آزمایش کنید، سپس ادامه دهید:

```
Iteration 1: Add length constraint
Iteration 2: Specify format
Iteration 3: Add example
Iteration 4: Refine tone instructions
```

### مرحله ۳: مستندسازی آنچه کار می‌کند

دانش مهندسی پرامپت به راحتی از دست می‌رود. گزارشی از آنچه امتحان کردید و چرا نگه دارید. این کار زمانی که بعداً به پرامپت برگردید یا با چالش‌های مشابه روبرو شوید، در وقت صرفه‌جویی می‌کند:

```markdown
## Prompt: Customer Email Response

### Version 1 (too formal)
"Write a response to this customer complaint."

### Version 2 (better tone, still missing structure)
"Write a friendly but professional response to this complaint. 
Show empathy first."

### Version 3 (final - good results)
"Write a response to this customer complaint. Structure:
1. Acknowledge their frustration (1 sentence)
2. Apologize specifically (1 sentence)  
3. Explain solution (2-3 sentences)
4. Offer additional help (1 sentence)

Tone: Friendly, professional, empathetic but not groveling."
```

## مثال تکرار در دنیای واقعی

بیایید یک چرخه تکرار کامل را مرور کنیم تا ببینیم چگونه هر اصلاح بر اساس قبلی ساخته می‌شود. توجه کنید که چگونه هر نسخه نقاط ضعف خاص نسخه قبلی را برطرف می‌کند.

### وظیفه: تولید نام‌های محصول

<VersionDiff versions={[
  {
    label: "نسخه ۱",
    content: "Generate names for a new productivity app.",
    note: "بیش از حد عمومی، بدون زمینه"
  },
  {
    label: "نسخه ۲",
    content: `Generate names for a new productivity app. The app uses AI to automatically schedule your tasks based on energy levels and calendar availability.`,
    note: "زمینه اضافه شد، هنوز عمومی است"
  },
  {
    label: "نسخه ۳",
    content: `Generate 10 unique, memorable names for a productivity app with these characteristics:
- Uses AI to schedule tasks based on energy levels
- Target audience: busy professionals aged 25-40
- Brand tone: modern, smart, slightly playful
- Avoid: generic words like "pro", "smart", "AI", "task"

For each name, explain why it works.`,
    note: "محدودیت‌ها و استدلال اضافه شد"
  },
  {
    label: "نسخه ۴ (نهایی)",
    content: `Generate 10 unique, memorable names for a productivity app.

Context:
- Uses AI to schedule tasks based on energy levels
- Target: busy professionals, 25-40
- Tone: modern, smart, slightly playful

Requirements:
- 2-3 syllables maximum
- Easy to spell and pronounce
- Available as .com domain (check if plausible)
- Avoid: generic words (pro, smart, AI, task, flow)

Format:
Name | Pronunciation | Why It Works | Domain Availability Guess`,
    note: "قالب ساختارمند، الزامات مشخص"
  }
]} />

## استراتژی‌های اصلاح بر اساس نوع وظیفه

وظایف مختلف به شیوه‌های قابل پیش‌بینی شکست می‌خورند. دانستن حالات شکست رایج به شما کمک می‌کند مشکلات را سریع‌تر تشخیص داده و برطرف کنید.

### برای تولید محتوا

تولید محتوا اغلب خروجی عمومی، خارج از هدف یا با قالب ضعیف تولید می‌کند. راه‌حل معمولاً شامل دقیق‌تر بودن در مورد محدودیت‌ها، ارائه مثال‌های ملموس یا تعریف صریح صدای برند شماست.

<InfoGrid items={[
  { icon: "target", title: "بیش از حد عمومی", description: "محدودیت‌ها و زمینه خاص اضافه کنید", example: "\"Write about dogs\" → \"Write about golden retrievers for first-time owners, focusing on training and exercise needs\"" },
  { icon: "scissors", title: "بیش از حد طولانی", description: "محدودیت کلمه/پاراگراف تعیین کنید", example: "Add: \"Keep response under 150 words\" or \"Maximum 3 paragraphs\"" },
  { icon: "palette", title: "سبک نادرست", description: "مثال‌های سبک ارائه دهید", example: "\"Write in the style of this example: [paste sample text]\"" },
  { icon: "megaphone", title: "خارج از برند", description: "راهنمای صدای برند را شامل کنید", example: "\"Use friendly, casual tone. Avoid jargon. Address reader as 'you'.\"" }
]} />

### برای تولید کد

خروجی کد می‌تواند از نظر فنی (خطاهای نحوی، ویژگی‌های زبان نادرست) یا از نظر معماری (الگوهای ضعیف، موارد از قلم‌افتاده) شکست بخورد. مشکلات فنی نیاز به مشخصات نسخه/محیط دارند؛ مشکلات معماری نیاز به راهنمای طراحی دارند.

<InfoGrid items={[
  { icon: "code", title: "خطاهای نحوی", description: "نسخه زبان را مشخص کنید", example: "\"Use Python 3.11+ syntax with type hints\" or \"ES2022 JavaScript\"" },
  { icon: "git-branch", title: "رویکرد نادرست", description: "الگوهای ترجیحی را توصیف کنید", example: "\"Use functional approach, avoid classes\" or \"Follow repository pattern\"" },
  { icon: "shield", title: "موارد لبه از قلم‌افتاده", description: "سناریوهای قابل مدیریت را فهرست کنید", example: "\"Handle: empty input, null values, network timeouts, invalid formats\"" },
  { icon: "tag", title: "نام‌گذاری ضعیف", description: "قراردادهای نام‌گذاری را شامل کنید", example: "\"Use camelCase for variables, PascalCase for classes, UPPER_SNAKE for constants\"" }
]} />

### برای تحلیل

وظایف تحلیلی اغلب نتایج سطحی یا بدون ساختار تولید می‌کنند. مدل را با چارچوب‌های خاص (SWOT، پنج نیروی پورتر) هدایت کنید، چندین دیدگاه درخواست کنید، یا یک الگو برای ساختار خروجی ارائه دهید.

<InfoGrid items={[
  { icon: "layers", title: "بیش از حد سطحی", description: "چارچوب‌های خاص بخواهید", example: "\"Analyze using SWOT framework\" or \"Apply Porter's Five Forces\"" },
  { icon: "scale", title: "جانبدارانه", description: "چندین دیدگاه درخواست کنید", example: "\"Present arguments for and against\" or \"Include skeptic's viewpoint\"" },
  { icon: "database", title: "داده‌های مفقود", description: "مشخص کنید چه چیزی باید تحلیل شود", example: "\"Focus on: market size, growth rate, key players, entry barriers\"" },
  { icon: "layout", title: "بدون ساختار", description: "الگوی تحلیل ارائه دهید", example: "\"Format as: Summary → Key Findings → Implications → Recommendations\"" }
]} />

### برای پرسش و پاسخ

پاسخ به سؤال می‌تواند بیش از حد مختصر یا بیش از حد طولانی باشد، و ممکن است فاقد نشانگرهای اطمینان یا منابع باشد. سطح جزئیات مورد نیاز خود را مشخص کنید و اینکه آیا می‌خواهید ارجاعات یا عدم قطعیت بیان شود.

<InfoGrid items={[
  { icon: "plus", title: "بیش از حد کوتاه", description: "توضیح بیشتر بخواهید", example: "\"Explain in detail with examples\" or \"Elaborate on each point\"" },
  { icon: "minus", title: "بیش از حد طولانی", description: "پاسخ مختصر درخواست کنید", example: "\"Answer in 2-3 sentences\" or \"Give me the TL;DR\"" },
  { icon: "help-circle", title: "نامطمئن", description: "سطح اطمینان بخواهید", example: "\"Rate your confidence 1-10\" or \"Note any assumptions made\"" },
  { icon: "link", title: "بدون منبع", description: "ارجاعات درخواست کنید", example: "\"Cite sources for claims\" or \"Include references where possible\"" }
]} />

## تکنیک حلقه بازخورد

در اینجا یک تکنیک فرا وجود دارد: از خود مدل برای کمک به بهبود پرامپت‌های خود استفاده کنید. آنچه امتحان کردید، آنچه دریافت کردید و آنچه می‌خواستید را به اشتراک بگذارید. مدل اغلب می‌تواند بهبودهایی را پیشنهاد دهد که شما به آن‌ها فکر نکرده بودید.

```
I used this prompt:
"[your prompt]"

And got this output:
"[model output]"

I wanted something more [describe gap]. How should I modify 
my prompt to get better results?
```

## تست A/B پرامپت‌ها

برای پرامپت‌هایی که به‌طور مکرر یا در مقیاس استفاده می‌شوند، فقط اولین موردی که کار می‌کند را انتخاب نکنید. تغییرات را آزمایش کنید تا قابل‌اعتمادترین و باکیفیت‌ترین رویکرد را پیدا کنید.

```
Prompt A: "Summarize this article in 3 bullet points."
Prompt B: "Extract the 3 most important insights from this article."
Prompt C: "What are the key takeaways from this article? List 3."
```

هر کدام را چندین بار اجرا کنید، مقایسه کنید:
- هماهنگی خروجی
- کیفیت اطلاعات
- ارتباط با نیازهای شما

## چه زمانی تکرار را متوقف کنیم

کمال دشمن کافی خوب است. بدانید چه زمانی پرامپت شما آماده استفاده است و چه زمانی فقط برای بازده کاهشی صیقل می‌دهید.

<div className="my-6 grid md:grid-cols-2 gap-4">
  <div className="border rounded-lg bg-green-50/50 dark:bg-green-950/20 border-green-200 dark:border-green-900">
    <p className="text-sm font-semibold text-green-700 dark:text-green-400 px-4 pt-3 flex items-center gap-2 m-0!"><IconCheck className="h-4 w-4" /> آماده انتشار</p>
    <div className="text-sm p-4 pt-2 space-y-1">
      <p className="m-0!">خروجی به‌طور مداوم الزامات را برآورده می‌کند</p>
      <p className="m-0!">موارد لبه به‌درستی مدیریت می‌شوند</p>
      <p className="m-0!">قالب قابل اعتماد و قابل تجزیه است</p>
      <p className="m-0!">بهبودهای بیشتر بازده کاهشی نشان می‌دهند</p>
    </div>
  </div>
  <div className="border rounded-lg bg-red-50/50 dark:bg-red-950/20 border-red-200 dark:border-red-900">
    <p className="text-sm font-semibold text-red-700 dark:text-red-400 px-4 pt-3 flex items-center gap-2 m-0!"><IconX className="h-4 w-4" /> به تکرار ادامه دهید</p>
    <div className="text-sm p-4 pt-2 space-y-1">
      <p className="m-0!">خروجی در اجراهای مختلف ناهماهنگ است</p>
      <p className="m-0!">موارد لبه باعث شکست می‌شوند</p>
      <p className="m-0!">الزامات حیاتی از قلم افتاده‌اند</p>
      <p className="m-0!">تغییرات کافی آزمایش نکرده‌اید</p>
    </div>
  </div>
</div>

## کنترل نسخه برای پرامپت‌ها

پرامپت‌ها کد هستند. برای هر پرامپتی که در تولید استفاده می‌شود، با همان دقت برخورد کنید: کنترل نسخه، گزارش تغییرات، و امکان بازگشت اگر چیزی خراب شد.

<Callout type="tip" title="نسخه‌بندی داخلی">
prompts.chat شامل تاریخچه نسخه خودکار برای پرامپت‌های شماست. هر ویرایش ذخیره می‌شود، بنابراین می‌توانید نسخه‌ها را مقایسه کرده و تکرارهای قبلی را با یک کلیک بازیابی کنید.
</Callout>

برای پرامپت‌های خودمدیریت، از ساختار پوشه استفاده کنید:

```
prompts/
├── customer-response/
│   ├── v1.0.txt    # Initial version
│   ├── v1.1.txt    # Fixed tone issue
│   ├── v2.0.txt    # Major restructure
│   └── current.txt # Symlink to active version
└── changelog.md    # Document changes
```

## خلاصه

<Callout type="tip" title="نکات کلیدی">
ساده شروع کنید، با دقت مشاهده کنید، یک چیز را در هر بار تغییر دهید، آنچه کار می‌کند را مستند کنید، و بدانید چه زمانی متوقف شوید. بهترین پرامپت‌ها نوشته نمی‌شوند—از طریق تکرار سیستماتیک کشف می‌شوند.
</Callout>

<Quiz 
  question="بهترین رویکرد هنگام اصلاح پرامپتی که نتایج نادرست تولید می‌کند چیست؟"
  options={[
    "بازنویسی کامل پرامپت از ابتدا",
    "افزودن مثال‌های بیشتر تا کار کند",
    "تغییر یک چیز در هر بار و آزمایش هر تغییر",
    "تا حد امکان طولانی کردن پرامپت"
  ]}
  correctIndex={2}
  explanation="تغییر یک چیز در هر بار به شما امکان می‌دهد آنچه کار می‌کند و آنچه کار نمی‌کند را جدا کنید. اگر چندین چیز را همزمان تغییر دهید، نخواهید دانست کدام تغییر مشکل را برطرف کرد یا کدام آن را بدتر کرد."
/>

## تمرین: این پرامپت را بهبود دهید

سعی کنید خودتان این پرامپت ضعیف را بهبود دهید. آن را ویرایش کنید، سپس از هوش مصنوعی برای مقایسه نسخه خود با نسخه اصلی استفاده کنید:

<BeforeAfterEditor
  title="اصلاح این پرامپت ایمیل"
  badPrompt="Write an email."
  idealPrompt={`You are a professional business writer.

Task: Write a follow-up email to a potential client after a sales meeting.

Context:
- Met with Sarah Chen, VP of Marketing at TechCorp
- Discussed our analytics platform
- She expressed interest in the reporting features
- Meeting was yesterday

Requirements:
- Professional but warm tone
- Reference specific points from our meeting
- Include a clear next step (schedule a demo)
- Keep under 150 words

Format: Subject line + email body`}
  task="این پرامپت ایمیل مبهم را به چیزی تبدیل کنید که نتیجه‌ای حرفه‌ای و مؤثر تولید کند."
/>

در فصل بعد، پرامپت‌نویسی با JSON و YAML را برای کاربردهای داده‌های ساختاریافته بررسی خواهیم کرد.
