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

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

خلاصه آنچه در این نوشتار می‌خوانید

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

آناتومی هزینه در پرامپت نویسی

هزینه استنتاج در مدل‌های زبانی معمولاً از سه جزء تشکیل می‌شود:

  1. هزینه توکن ورودی (Input Tokens)
  2. هزینه توکن خروجی (Output Tokens)
  3. هزینه‌های پنهان مثل retry، بازیابی، و پردازش‌های جانبی

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

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

اقتصاد توکن و نقش زبان در هزینه

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

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

کش پرامپت و کش معنایی

کش کردن، ساده‌ترین و مؤثرترین تکنیک کاهش هزینه است. سه نوع کش وجود دارد:

کش پرامپت (Prompt Cache)

اگر بخشی از پرامپت ثابت است — مثلاً دستورالعمل سیستمی — می‌توانید آن را کش کنید و در درخواست‌های بعدی، فقط با یک شناسه به آن ارجاع دهید. این کار می‌تواند هزینه ورودی را تا ۹۰٪ کاهش دهد.

کش معنایی (Semantic Cache)

اگر پرسش‌های مشابه مکرراً ارسال می‌شوند، می‌توانید پرسش‌ها را با embedding جستجو کنید و اگر پرسش مشابهی در کش بود، پاسخ ذخیره‌شده را برگردانید بدون تماس با مدل. این تکنیک در سیستم‌های پشتیبانی مشتری نتایج چشمگیری داشته است.

کش نتیجه ابزار (Tool Result Cache)

در سیستم‌های Agent-based، نتایج فراخوانی ابزارها می‌توانند کش شوند. اگر یک ابزار نتیجه ثابتی برگرداند، نیازی به فراخوانی مکرر نیست.

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

مسیریابی مدل بر اساس هزینه و کیفیت

یکی از کارآمدترین راهبردها این است که همه درخواست‌ها را به یک مدل ندهید. برخی درخواست‌ها به یک مدل کوچک و سریع نیاز دارند و برخی نیازمند مدل بزرگ هستند. این تکنیک با نام LLM Routing شناخته می‌شود.

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

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

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

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

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

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

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

بازنویسی پرامپت، بدون تغییر معنا، می‌تواند مصرف توکن را کاهش دهد. مثال‌های عملی:

پیش از بازنویسی:

Please carefully analyze the following text and provide a detailed response that covers all possible aspects you can think of.

پس از بازنویسی:

Analyze the text. List key issues in 5 bullets.

تفاوت مصرف توکن بین این دو نمونه می‌تواند تا ۷۰٪ باشد. اگر این پرامپت روزی هزار بار ارسال شود، این تفاوت معنادار می‌شود.

نکته دیگر: دستورالعمل‌های کوتاه را می‌توان در پرامپت سیستمی قرار داد، نه در پرامپت کاربر. این کار باعث می‌شود در بخش cacheable قرار بگیرند. برای درک بهتر ساختار پرامپت سیستمی، به نقش پرامپت سیستمی در پرامپت نویسی مراجعه کنید.

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

در برخی کاربردها می‌توان چند درخواست را در یک درخواست ترکیب کرد. این تکنیک به‌خصوص در پردازش‌های دسته‌ای مؤثر است:

  • طبقه‌بندی چند متن به‌جای چند درخواست جداگانه
  • خلاصه‌سازی چند سند در یک درخواست با ساختار مشخص
  • استخراج چند میدان اطلاعاتی از یک متن در یک درخواست

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

اشتباهات رایج در بهینه‌سازی هزینه

  • انتخاب مدل بزرگ‌تر از نیاز واقعی
  • ارسال کل تاریخچه گفت‌وگو در هر نوبت
  • نداشتن کش معنایی در سیستم‌های پرسش تکراری
  • نادیده گرفتن تفاوت هزینه توکن ورودی و خروجی
  • توضیحات طولانی در پرامپت سیستمی بدون دلیل
  • بازیابی همه اسناد مشابه بدون فیلتر
  • نداشتن پایش هزینه به‌ازای هر کاربر یا هر قابلیت
  • عدم استفاده از کش پرامپت وقتی API آن را پشتیبانی می‌کند

سنجش و پایش هزینه

برای بهینه‌سازی واقعی، باید هزینه را بسنجید. حداقل سه شاخص را پایش کنید:

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

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

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

بیشترین صرفه‌جویی در کجا اتفاق می‌افتد؟

در تجربه پروژه‌ها، معمولاً کش معنایی و مسیریابی مدل، بیشترین اثر را دارند. اگر این دو را جدی بگیرید، می‌توانید هزینه را تا ۵۰٪ کاهش دهید.

آیا کاهش هزینه کیفیت را پایین می‌آورد؟

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

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

نه لزوماً. اگر مدل کوچک‌تر مجبور باشد چند بار تلاش کند یا خطا بدهد، هزینه نهایی می‌تواند بیشتر از مدل بزرگ‌تر باشد. همیشه هزینه نهایی، نه هزینه هر توکن، را بسنجید.

چطور بفهمم هزینه‌ام کجاست؟

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

نگاه معمارانه به کنترل هزینه

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

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

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

تجربه شما

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