فشرده‌سازی پرامپت (Prompt Compression) فرایندی است که در آن، حجم یک پرامپت بدون افت معنادار در کیفیت خروجی مدل زبانی کاهش می‌یابد.
این تکنیک، برای کاهش هزینه توکن، بهبود سرعت و مدیریت پنجره زمینه به کار می‌رود.
فشرده‌سازی می‌تواند در سطح کلمات، جملات یا ساختار پرامپت انجام شود.
در سامانه‌های پرترافیک، فشرده‌سازی می‌تواند هزینه عملیاتی را به‌طور چشمگیری کاهش دهد.
این راهنما تکنیک‌ها، مزایا و ملاحظات عملی فشرده‌سازی پرامپت را به‌صورت فنی بررسی می‌کند.

فشرده‌سازی پرامپت (Prompt Compression) یکی از تکنیک‌های کلیدی در بهینه‌سازی سامانه‌های مبتنی بر مدل‌های زبانی بزرگ (Large Language Models یا LLM) است که برای کاهش هزینه و بهبود کارایی طراحی شده است. با رشد استفاده از این مدل‌ها در سامانه‌های تولیدی، هزینه توکن و محدودیت پنجره زمینه به چالش‌های جدی تبدیل شده‌اند و فشرده‌سازی، پاسخی فنی به این چالش‌هاست. برای درک این مفهوم، ابتدا باید با نقش زمینه و بافت در پرامپت نویسی و پرامپت نویسی چیست آشنا باشیم.

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

فشرده‌سازی پرامپت را می‌توان با فشرده‌سازی یک فایل ZIP مقایسه کرد: هدف، کاهش حجم بدون از دست دادن اطلاعات ضروری است. در سامانه‌های LLM، این کاهش حجم به معنای کاهش هزینه و افزایش سرعت است. برای مطالعه بیشتر درباره مفاهیم فشرده‌سازی، می‌توانید صفحه Data Compression را در ویکی‌پدیا ببینید.

فشرده‌سازی پرامپت دقیقاً چیست؟

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

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

فشرده‌سازی در سطح توکن

در سطح فنی، فشرده‌سازی به کاهش تعداد توکن‌های پرامپت منجر می‌شود. از آنجا که هزینه سرویس‌های LLM بر اساس تعداد توکن محاسبه می‌شود، این کاهش، مستقیماً بر هزینه اثر می‌گذارد.

فشرده‌سازی در سطح معنایی

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

فشرده‌سازی پرامپت، حذف حجم نیست؛ حذف آن بخش‌هایی است که تأثیر محدودی بر خروجی دارند.

چرا فشرده‌سازی اهمیت دارد؟

فشرده‌سازی پرامپت به چند دلیل اهمیت دارد:

کاهش هزینه توکن

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

کاهش تأخیر

پرامپت طولانی‌تر، زمان پردازش بیشتری نیاز دارد. در سامانه‌های Real-Time، این تأخیر می‌تواند تجربه کاربر را مختل کند. فشرده‌سازی، تأخیر را کاهش می‌دهد.

مدیریت پنجره زمینه

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

افزایش ظرفیت

با فشرده‌سازی، فضای بیشتری برای اطلاعات دیگر مانند زمینه یا مثال‌ها فراهم می‌شود.

بهبود پایداری

پرامپت‌های فشرده‌تر، معمولاً پایداری خروجی بالاتری دارند، زیرا فضای تفسیر کمتری برای مدل ایجاد می‌کنند.

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

تفاوت با تقطیر و بهینه‌سازی

فشرده‌سازی پرامپت با تقطیر و بهینه‌سازی، شباهت‌هایی دارد اما در چند محور متفاوت است:

فشرده‌سازی در مقابل تقطیر

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

فشرده‌سازی در مقابل بهینه‌سازی

بهینه‌سازی، بهبود کیفیت خروجی با تغییر ساختار پرامپت است. فشرده‌سازی، کاهش حجم با حفظ کیفیت است. این دو، اهداف متفاوتی دارند.

رویکردهدف اصلیروش
فشرده‌سازیکاهش حجمبازنویسی متنی یا معنایی
تقطیرانتقال دانشاستخراج و آموزش
بهینه‌سازیبهبود کیفیتتغییر ساختار

سطوح فشرده‌سازی

فشرده‌سازی پرامپت را می‌توان در چند سطح انجام داد:

  1. واژگانی: حذف کلمات غیرضروری.
  2. نحوی: ساده‌سازی ساختار جمله.
  3. معنایی: حفظ معنا در حجم کمتر.
  4. ساختاری: تغییر چیدمان بخش‌ها.

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

فشرده‌سازی واژگانی

ساده‌ترین سطح فشرده‌سازی، حذف کلمات غیرضروری است.

تکنیک‌های فشرده‌سازی واژگانی

  • حذف حروف اضافه: در جملات کوتاه، حذف حروف اضافه غیرضروری.
  • حذف قیدهای تأکیدی: حذف قیدهایی مانند «بسیار» یا «خیلی».
  • جایگزینی عبارات بلند: جایگزینی عبارات بلند با معادل کوتاه.
  • حذف تکرارها: حذف کلمات یا عبارات تکراری.
  • استفاده از اصطلاحات فنی: جایگزینی توضیحات با اصطلاحات کوتاه.

نمونه‌ای از فشرده‌سازی واژگانی

پرامپت اصلی:

You are a very experienced and highly skilled senior WordPress developer
who has been working in the industry for many years. Please provide a
comprehensive and detailed analysis of the following plugin code.

پرامپت فشرده:

As a senior WordPress developer, analyze this plugin code in detail.

نسخه دوم، حدود ۷۰ درصد کوتاه‌تر است، اما همان معنا را منتقل می‌کند.

فشرده‌سازی نحوی

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

تکنیک‌های فشرده‌سازی نحوی

  • جملات کوتاه: تقسیم جملات بلند به کوتاه.
  • حذف ساختارهای پیچیده: پرهیز از جملات شرطی پیچیده.
  • استفاده از لیست: تبدیل جملات به لیست.
  • حذف جمله‌های توضیحی: حذف توضیحاتی که تأثیر محدودی دارند.

نمونه‌ای از فشرده‌سازی نحوی

پرامپت اصلی:

When you analyze the code, please make sure that you focus on
three important aspects which are security, performance, and
maintainability, and provide specific examples for each aspect.

پرامپت فشرده:

Analyze the code for:
- Security
- Performance
- Maintainability
Provide examples for each.

ساختار لیستی، خواندن را ساده‌تر و حجم را کمتر می‌کند.

فشرده‌سازی معنایی

فشرده‌سازی معنایی، پیچیده‌ترین سطح فشرده‌سازی است. در این سطح، تلاش می‌شود همان معنا در حجم کمتری منتقل شود.

تکنیک‌های فشرده‌سازی معنایی

  • خلاصه‌سازی: خلاصه کردن بخش‌های طولانی.
  • استفاده از استعاره: جایگزینی توضیحات طولانی با استعاره‌های کوتاه.
  • استخراج هسته: شناسایی و حفظ هسته معنایی.
  • حذف زمینه غیرضروری: حذف زمینه‌هایی که تأثیر محدودی دارند.

نمونه‌ای از فشرده‌سازی معنایی

پرامپت اصلی (۲۰۰ توکن):

Context: The website is a Persian-language WooCommerce store
with over 10,000 products. It uses a shared hosting plan with
4GB RAM and 2 vCPU. The client is concerned about performance
issues during checkout, particularly on mobile devices. The
average page load time on mobile is currently 5 seconds, which
is above the recommended 2.5 seconds for LCP.

پرامپت فشرده (۶۰ توکن):

Context: Persian WooCommerce store, 10K products, shared hosting
(4GB RAM). Slow checkout on mobile (5s LCP, target 2.5s).

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

خطر افت دقت

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

فشرده‌سازی ساختاری

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

تکنیک‌های فشرده‌سازی ساختاری

  • ادغام بخش‌ها: ادغام بخش‌های مشابه.
  • حذف برچسب‌ها: حذف برچسب‌های غیرضروری.
  • تغییر قالب: استفاده از قالب کوتاه‌تر مانند YAML.
  • حذف توضیحات متا: حذف توضیحاتی که رفتار مدل را تغییر نمی‌دهند.

نمونه‌ای از فشرده‌سازی ساختاری

پرامپت اصلی (ساختار طولانی):

Role: You are a senior WordPress developer.
Context: Persian WooCommerce store.
Task: Analyze performance.
Format: List of 5 items.
Constraints: Focus on mobile.

پرامپت فشرده (ساختار YAML):

role: senior_wp_dev
context: persian_woo_store
task: analyze_performance
format: list_5_items
constraints: mobile_focus

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

پیاده‌سازی گام‌به‌گام

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

مرحله اول: تعریف خط پایه

پرامپت اصلی را روی یک مجموعه تست اجرا کنید و کیفیت خروجی را به‌عنوان خط پایه ثبت کنید. برای معیارهای ارزیابی، پست معیارهای ارزیابی پرامپت را ببینید.

مرحله دوم: تقسیم پرامپت

پرامپت را به بخش‌های منطقی تقسیم کنید: نقش، زمینه، دستور، قالب، محدودیت‌ها.

مرحله سوم: فشرده‌سازی هر بخش

هر بخش را به‌صورت جداگانه فشرده کنید. برای هر بخش، تصمیم بگیرید که از کدام سطح فشرده‌سازی استفاده کنید.

مرحله چهارم: ارزیابی هر تغییر

پس از فشرده‌سازی هر بخش، نسخه جدید را روی مجموعه تست اجرا کنید و اثر آن را اندازه‌گیری کنید. اگر افت کیفیت بیش از آستانه پذیرش بود، بازگردانید.

مرحله پنجم: تثبیت نسخه نهایی

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

نمونه‌ای از پیاده‌سازی

def compress_prompt(prompt, target_reduction=0.4):
    # Step 1: Remove filler words
    prompt = remove_filler_words(prompt)

    # Step 2: Simplify sentence structure
    prompt = simplify_structure(prompt)

    # Step 3: Convert to compact format if applicable
    prompt = use_compact_format(prompt)

    # Step 4: Validate reduction
    reduction = 1 - (count_tokens(prompt) / count_tokens(original))
    if reduction < target_reduction:
        # Apply more aggressive compression
        prompt = semantic_compression(prompt)

    return prompt

ارزیابی کیفیت پس از فشرده‌سازی

ارزیابی کیفیت، بخش حیاتی فشرده‌سازی است. بدون ارزیابی دقیق، نمی‌توان مطمئن شد که فشرده‌سازی به افت کیفیت منجر نشده است.

معیارهای ارزیابی

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

روش‌های ارزیابی

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

تعیین آستانه پذیرش

قبل از شروع فشرده‌سازی، باید آستانه پذیرش افت کیفیت را تعیین کنید. مثلاً، اگر افت دقت بیش از ۵ درصد باشد، نسخه فشرده پذیرفته نمی‌شود.

تعادل بین فشرده‌سازی و کیفیت

فشرده‌سازی، همیشه به بهبود کیفیت منجر نمی‌شود. در برخی موارد، فشرده‌سازی بیش از حد می‌تواند به افت دقت منجر شود.

پدیده نقطه بهینه

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

عوامل مؤثر بر نقطه بهینه

  • نوع وظیفه: وظایف ساده، تحمل فشرده‌سازی بیشتری دارند.
  • مدل: مدل‌های بزرگ‌تر، تحمل فشرده‌سازی بیشتری دارند.
  • سطح فشرده‌سازی: فشرده‌سازی واژگانی کمترین افت را دارد؛ معنایی بیشترین.
  • کیفیت اصلی: پرامپت‌های اولیه باکیفیت، تحمل کمتری برای فشرده‌سازی دارند.

استراتژی فشرده‌سازی تدریجی

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

پرسش‌های پرتکرار درباره فشرده‌سازی پرامپت

فشرده‌سازی پرامپت چه تفاوتی با تقطیر دارد؟

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

چقدر می‌توان پرامپت را فشرده کرد؟

به‌طور معمول، ۳۰ تا ۵۰ درصد کاهش حجم با افت محدود کیفیت امکان‌پذیر است. بیش از این، معمولاً به افت معنادار دقت منجر می‌شود.

آیا فشرده‌سازی همیشه کیفیت را حفظ می‌کند؟

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

آیا فشرده‌سازی بر امنیت اثر دارد؟

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

آیا فشرده‌سازی برای همه پرامپت‌ها کاربرد دارد؟

در پرامپت‌های طولانی و پیچیده بیشترین اثر را دارد. در پرامپت‌های کوتاه، فشرده‌سازی ممکن است ضروری نباشد.

آیا فشرده‌سازی بر پایداری خروجی اثر دارد؟

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

چطور فشرده‌سازی را خودکار کنیم؟

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

آیا فشرده‌سازی با تقطیر قابل ترکیب است؟

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

آیا فشرده‌سازی بر حریم خصوصی اثر دارد؟

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

آیا فشرده‌سازی برای همه مدل‌ها یکسان است؟

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

چطور می‌توان نقطه بهینه فشرده‌سازی را پیدا کرد؟

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

نتیجه‌گیری کاربردی

فشرده‌سازی پرامپت، یکی از مؤثرترین تکنیک‌ها برای کاهش هزینه و بهبود کارایی سامانه‌های LLM است. این تکنیک، با کاهش حجم پرامپت بدون افت معنادار کیفیت، به کاهش هزینه توکن، کاهش تأخیر و مدیریت بهتر پنجره زمینه کمک می‌کند. فشرده‌سازی می‌تواند در سطوح واژگانی، نحوی، معنایی و ساختاری انجام شود و بهترین نتایج از ترکیب این سطوح به دست می‌آید.

فشرده‌سازی پرامپت، حذف حجم نیست؛ حذف آن بخش‌هایی است که تأثیر محدودی بر خروجی دارند.

در پروژه‌هایی که با محدودیت بودجه یا تأخیر مواجه بودیم، فشرده‌سازی پرامپت ابزار اصلی برای بهبود کارایی بوده است. توصیه می‌کنم این تکنیک را با ارزیابی دقیق و مجموعه تست جامع اجرا کنید و بخش‌های امنیتی را به‌عنوان بخش‌های غیرقابل‌حذف علامت‌گذاری کنید. اگر تجربه‌ای در فشرده‌سازی پرامپت در پروژه‌های واقعی دارید، برای ما جالب است بدانید کدام سطح فشرده‌سازی در دامنه شما بیشترین تأثیر را داشته است.