پرش به محتوای اصلی
پرش به محتوای مقاله

درون چرخه پیش‌پُرکردن و رمزگشایی توکن‌ها در مدل Claude Code

·۲۳ مرداد ۱۴۰۵۱۰ دقیقه مطالعه
راهنما
بیشینه‌سازی ارزش جلسات Claude Code شما
بیشینه‌سازی ارزش جلسات Claude Code شما
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

افشای دقیق ساختار هزینه توکن‌های ورودی و خروجی در Claude Code و معرفی مکانیزم Prompt Caching برای کاهش هزینه خواندن بافت به ۰.۱ برابر.

اگر امروز از Claude Code برای مدیریت پروژه‌های بزرگ استفاده می‌کنید، احتمالاً متوجه شده‌اید که هر تغییر کوچک می‌تواند صورت‌حساب GPU شما را به سرعت بالا ببرد. طبق اعلام آنتروپیک (Anthropic) در ۱۴ اوت ۲۰۲۶، یک درخواست ساده برای رفع یک باگ کوچک ممکن است ۵ فراخوانی مجزا به GPU ایجاد کند، اما راهکاری برای مهار این هزینه‌ها وجود دارد. این رویکرد به این واقعیت پاسخ می‌دهد که مدیریت بافت (Context Management) اکنون به محرک اصلی هزینه‌های شما تبدیل شده است.

مدیریت بافت، اکنون به عامل تعیین‌کننده در صورت‌حساب نهایی شما تبدیل شده است. همان‌طور که در تحلیل قبلی ما درباره‌ی ادغام ۴۶ درصدی اصلاحات نگهداری توسط Claude Code اشاره کردیم، موفقیت این ابزار در گرو معماری هزینه‌ای است که اکنون جزئیات آن فاش شده است. برای اکثر توسعه‌دهندگان، کار با یک عامل (Agent) شبیه به یک گفتگوی مستمر است؛ گویی دستیاری دارید که تمام تاریخچه را به خاطر می‌سپارد. اما در واقعیت و در لایه‌های زیرین، مدل با هر بار فشردن کلید Enter، کل تاریخچه گفتگو را از ابتدا می‌خواند. این ساختار می‌تواند منجر به پدیده‌ای شود که ما آن را «رشد درجه دوم هزینه‌ها» نامیدیم، جایی که طول جلسه تأثیری مخرب بر مصرف توکن‌ها می‌گذارد.

اقتصاد توکن‌ها

هر درخواست در دو مرحله متمایز از واحد پردازش گرافیکی (GPU) عبور می‌کند. مرحله اول پیش‌پُرکردن (Prefill) است. در این مرحله، مدل پرامپت سیستمی، فایل CLAUDE.md و کل تاریخچه گفتگو را می‌خواند. این تاریخچه شامل پیام شما، هر فایلی که Claude تا به حال خوانده است و خروجی دستوراتی است که مدل اجرا کرده است. این‌ها توکن‌های ورودی شما هستند.

سپس مرحله رمزگشایی (Decoding) آغاز می‌شود و مدل توکن‌های خروجی را تولید می‌کند. این خروجی‌ها شامل فرآیند تفکر داخلی مدل، فراخوانی ابزارها (Tool Calls) و در نهایت متنی است که شما مشاهده می‌کنید. این فرآیند توکن به توکن پیش می‌رود؛ به این معنا که یک پاسخ ۲۰۰ توکنی، نیازمند ۲۰۰ اجرای متوالی و ترتیبی مدل است.

به دلیل اینکه مرحله رمزگشایی GPU را برای هر توکن به طور قابل توجهی بیشتر درگیر می‌کند، قیمت خروجی تقریباً ۵ برابر ورودی است. بخش بزرگی از این توکن‌های خروجی، «توکن‌های تفکر» (Thinking Tokens) هستند. میزان تفکری که مدل در هر نوبت انجام می‌دهد توسط تنظیم /effort کنترل می‌شود. این تنظیم به عنوان پیش‌فرض برای جلسات بعدی شما باقی می‌ماند.

برای اطمینان از اینکه از تنظیمات مورد نظر استفاده می‌کنید، توسعه‌دهندگان می‌توانند در یک جلسه تازه دستورات /model و /effort را اجرا کنند تا پیش‌فرض‌های فعلی خود را ببینند. برای کارهایی که صرفاً «کارهای یدی و ساده» (Grunt Work) هستند، کاربران می‌توانند با استفاده از دستور MAX_THINKING_TOKENS=0 claude (به جز در مدل Fable 5)، تفکر مدل را برای یک جلسه کاملاً خاموش کنند. این حالت حتی از تنظیم /effort low نیز یک پله پایین‌تر است و هزینه را کاهش می‌دهد.

سازوکار حافظه موقت پرامپت

برای جلوگیری از پرداخت هزینه کامل برای تاریخچه تکراری در هر نوبت، Claude Code از حافظه موقت پرامپت (Prompt Caching) استفاده می‌کند. اگر یک درخواست دقیقاً با همان توکن‌هایی شروع شود که سرور در درخواست قبلی دیده است، سرور به جای محاسبه مجدد، وضعیت موجود را از حافظه بارگذاری می‌کند.

خواندن از این حافظه تنها ۰.۱ برابر قیمت استاندارد ورودی است. اگرچه نوشتن توکن‌ها در حافظه کمی گران‌تر است — تا ۲ برابر قیمت عادی ورودی، زیرا سرور باید وضعیت را نگه دارد — اما صرفه‌جویی عظیم در خواندن‌های بعدی، این سیستم را به مکانیسم اصلی برای مقرون‌به‌صرفه نگه داشتن جلسات طولانی تبدیل کرده است. عملیات نوشتن یک بار برای هر توکن اتفاق می‌افتد، در حالی که خواندن‌های ۰.۱ برابری در هر نوبت تکرار می‌شوند. پیش از این مشاهده کردیم که چگونه کاشهٔ پرامپت در کلود توانست هزینهٔ API یک عامل هوش مصنوعی را تا ۸۵٪ کاهش دهد، که نشان‌دهنده قدرت این تکنولوژی در مقیاس عملیاتی است.

Claude Code این حافظه را به‌صورت خودکار در هر درخواست مدیریت می‌کند. با این حال، این حافظه بسیار شکننده است؛ اگر پیشوند (Prefix) درخواست تغییر کند، حافظه می‌شکند و این امر منجر به جهش ناگهانی هزینه‌ها می‌شود.

بیشینه‌سازی ارزش جلسات کد Claude شما

چرخه حیات یک اصلاح کد

برای درک بهتر، درخواستی برای رفع یک تست شکست‌خورده در یک فایل خاص را در نظر بگیرید، مثلاً: «تست شکست‌خورده در utils.test.ts را اصلاح کن». این فرآیند معمولاً توالی زیر را طی می‌کند:

  • درخواست ۱: Claude Code پرامپت سیستمی (شامل تعاریف ابزارها)، فایل CLAUDE.md و پیام شما را جمع‌آوری می‌کند. چون هنوز چیزی در حافظه نیست، همه این‌ها با قیمت کامل پیش‌پُر شده و در حافظه نوشته می‌شوند.
  • درخواست ۲: مدل نمی‌تواند تستی را که ندیده اصلاح کند، بنابراین با یک فراخوانی Read برای فایل utils.test.ts پاسخ می‌دهد (توکن‌های خروجی). Claude Code فایل را می‌خواند، آن را به گفتگو اضافه می‌کند و کل مجموعه را دوباره می‌فرستد. در اینجا، هر آنچه در درخواست ۱ بود با هزینه ۰.۱ برابر از حافظه خوانده می‌شود و فقط فراخوانی Read و محتوای فایل با قیمت کامل پیش‌پُر می‌شوند.
  • درخواست ۳: مدل اکنون به فایلی که تست را اجرا می‌کند نیاز دارد. یک فراخوانی Read دیگر صادر می‌کند. باز هم درخواست‌های ۱ و ۲ از حافظه خوانده می‌شوند و فقط فایل دوم با قیمت کامل پرداخت می‌شود.
  • درخواست ۴: مدل با یک Edit (خروجی) پاسخ می‌دهد. Claude Code ویرایش را اعمال کرده، نتیجه را اضافه می‌کند و تاریخچه را می‌فرستد. در این مرحله، فقط Edit و نتیجه آن ورودی‌های جدید با قیمت کامل هستند.
  • درخواست ۵: مدل دستور npm test را اجرا می‌کند (خروجی). Claude Code خروجی تست را اضافه کرده و همه چیز را دوباره می‌فرستد. تنها بخش جدید و گران‌قیمت، خروجی تست است.

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

بیشینه‌سازی ارزش جلسات Claude Code شما

چه چیزهایی حافظه را می‌شکند؟

از آنجا که حافظه باید از اولین توکن به بعد دقیقاً مطابقت داشته باشد، هر تغییری در پیشوند باعث ابطال کل تاریخچه می‌شود. درخواست‌ها همیشه ترتیب سخت‌گیرانه‌ای دارند: ابتدا تعاریف ابزارها، سپس پرامپت سیستمی و در نهایت گفتگو (که CLAUDE.md در ابتدای آن است). اگر هر چیزی در این پیشوند تغییر کند، هر آنچه پشت آن است باید دوباره پیش‌پُر شود.

طبق راهنمای claude.com، چندین اقدام رایج باعث این «خطاهای حافظه» (Cache Miss) گران‌قیمت می‌شوند:

  • /model: هر مدل حافظه منحصر‌به‌خود دارد. تغییر مدل — از جمله استفاده از opusplan که هنگام ورود یا خروج از حالت برنامه‌ریزی مدل را تغییر می‌دهد — باعث پیش‌پُرکردن کامل کل گفتگو می‌شود.
  • /effort: سطح تلاش بخشی از کلید حافظه است. تغییر آن در میان گفتگو، حافظه را ریست می‌کند؛ به همین دلیل است که ابزار قبل از تغییر، تاییدیه می‌خواهد.
  • Fast Mode: این حالت نیز بخشی از کلید حافظه است. پیش‌پُرکردن‌ها در قیمت‌های Fast Mode اتفاق می‌افتند. به‌صرفه‌ترین روش این است که این حالت را در ابتدای جلسه فعال کنید؛ خاموش کردن آن در مراحل بعدی از نظر حافظه رایگان است.
  • /compact: این دستور گفتگو را با یک خلاصه کوتاه‌تر جایگزین می‌کند. چون محتوا دیگر مطابقت ندارد، حافظه از بین می‌رود (اگرچه پرامپت سیستمی در ابتدای آن باقی می‌ماند). نوشتن خلاصه زمانی ارزان‌ترین حالت است که گفتگوی قدیمی هنوز در حافظه باشد.
  • زمان: حافظه در اشتراک‌ها پس از یک ساعت و در API پس از ۵ دقیقه منقضی می‌شود. کاربران API می‌توانند با استفاده از ENABLE_PROMPT_CACHING_1H=1 این زمان را به یک ساعت افزایش دهند. بازگرداندن یک جلسه قدیمی تقریباً همیشه باعث پیش‌پُرکردن کامل می‌شود زیرا حافظه منقضی شده و پرامپت سیستمی در هنگام اجرا دوباره ساخته می‌شود.

بیشینه‌سازی ارزش جلسات کد Claude شما

مدیریت تورم بافت

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

روش‌های کاهش حجم ورودی

  • استفاده از @-mentions: هنگام ارجاع به یک فایل، به جای تایپ مسیر، از @-mention استفاده کنید. Claude Code فایل را به اولین درخواست ضمیمه می‌کند و نیاز به یک فراخوانی ابزار Read جداگانه را حذف می‌کند که باعث صرفه‌جویی در یک نوبت کامل تعامل می‌شود. یک بار اشاره کافی است؛ اشاره مجدد در نوبت‌های بعدی ممکن است نسخه دومی از فایل را ضمیمه کند.
  • بازبینی بافت شروع: در یک جلسه تازه دستور /context را اجرا کنید تا ببینید قبل از تایپ شما چه چیزهایی بارگذاری شده است. فایل CLAUDE.md را به دستورالعمل‌های خاص محدود کنید و موارد مربوط به گردش کار (Workflow) را به skills منتقل کنید که فقط هنگام استفاده بارگذاری می‌شوند. از /mcp برای خاموش کردن سرورهای MCP غیرضروری استفاده کنید.
  • دقت در درخواست: گفتن این جمله که «تست‌ها شکست خورده‌اند»، مدل را مجبور می‌کند از grep استفاده کرده و چندین فایل را باز کند تا خطا را بیابد، و همه این‌ها در بافت باقی می‌مانند. اما مشخص کردن اینکه «تست شکست‌خورده در utils.test.ts را اصلاح کن»، مرحله جست‌وجو را حذف کرده و تنها هزینه یک فراخوانی Read را دارد.

مدیریت خروجی دستورات

خروجی‌های دستورات حاصل از تست‌ها، بیلدها یا git log درست مانند فایل‌ها به گفتگو اضافه می‌شوند. در حالی که Claude Code خروجی‌های طولانی‌تر از ۳۰,۰۰۰ کاراکتر را در یک فایل می‌نویسد (که از طریق BASH_MAX_OUTPUT_LENGTH قابل تنظیم است) و فقط یک پیش‌نمایش را در چت نگه می‌دارد، خروجی‌های کوچک اما پرسرصدا مشکل‌سازتر هستند. برای مثال، یک تست‌رانر که ۴۰۰ تست پاس‌شده را خط به خط چاپ می‌کند، زیر حد مجاز می‌ماند و بخشی از هر نوبت باقی‌مانده می‌شود.

برای کاهش این اثر، توسعه‌دهندگان می‌توانند از یک hook در مستندات برای بازنویسی دستورات پرسرصدا استفاده کنند. علاوه بر این، قرار دادن دستورات رایج با فلگ‌های Quiet در CLAUDE.md (مثلاً «اجرای یک فایل تست واحد با npx vitest run --reporter=dot») هم در یک نوبت تعامل و هم در صدها خط خروجی صرفه‌جویی می‌کند.

بیشینه‌سازی ارزش جلسات Claude Code شما

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

آنتروپیک برای سبک نگه داشتن جلسات، توصیه می‌کند هنگام تغییر تسک از /clear و پس از اتمام یک زیر-تسک خاص از /compact استفاده کنید. اگر نیاز دارید چند نوبت اشتباه را حذف کنید، /rewind بر /compact برتری دارد زیرا فقط انتهای گفتگو را می‌برد و حافظه مربوط به تمام بخش‌های قبلی را حفظ می‌کند. در حالی که Compact کردن، کل گفتگو را بازنویسی کرده و همیشه هزینه ایجاد می‌کند.

برای کسانی که از مدل‌های ۱ میلیون توکنی استفاده می‌کنند و ترجیح می‌دهند از شبکه ایمنی auto-compact بهره‌مند شوند، دستور /autocompact 200k این قابلیت را بازمی‌گرداند (نیازمند نسخه v2.1.221+). کاربران همچنین باید مراقب دستورات /loop باشند؛ این دستورات به عنوان نوبت‌های کامل در جلسه اصلی اجرا می‌شوند و هر بار کل تاریخچه گفتگو را حمل می‌کنند. اگر بیش از یک ساعت گذشته باشد، این دستورات باعث خطای حافظه (Cache Miss) می‌شوند. بهتر است لوپ‌ها را از یک جلسه تازه در یک ترمینال جداگانه اجرا کنید.

عامل‌های فرعی (Subagents)

عامل‌های فرعی راهی برای ایزوله کردن کارهای پرسرصدا فراهم می‌کنند. یک subagent پنجره بافت، پرامپت سیستمی، ابزارها و CLAUDE.md مخصوص به خود را دارد، اما گفتگوی اصلی را به ارث نمی‌برد. این عامل نوبت‌های خود را اجرا می‌کند و تنها پاسخ نهایی به جلسه اصلی بازگردانده می‌شود؛ تمام مراحل میانی دور ریخته می‌شوند.

اگرچه subagentها ممکن است گاهی فایل‌هایی را بخوانند که جلسه اصلی قبلاً خوانده است، اما برای کارهایی که خروجی‌های عظیمی تولید می‌کنند (مانند تجزیه لاگ‌ها) بسیار به‌صرفه هستند. می‌توانید با درخواست از Claude برای اینکه «این لاگ را در یک subagent بررسی کن»، این قابلیت را فعال کنید. برای بهینه‌سازی بیشتر، می‌توانید به کارهای تکراری و پرسرصدا یک تعریف subagent خاص با استفاده از model: haiku یا sonnet بدهید تا از مدل گران‌تر جلسه اصلی استفاده نشود.

بیشینه‌سازی ارزش جلسات Claude Code شما

سلسله‌مراتب هزینه‌ها

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

این معماری، نقش توسعه‌دهنده را از صرفاً «پرامپت‌نویسی» به «مدیریت یک جلسه وضعیت‌دار» (Stateful Session) تغییر می‌دهد. هدف دیگر فقط یافتن کلمات درست نیست، بلکه یافتن توالی درست برای افزودن بافت است. برای بهینه‌سازی گردش کار فعلی خود، با بازبینی فایل CLAUDE.md شروع کنید تا مطمئن شوید فقط دستورالعمل‌های ضروری را شامل می‌شود و گردش‌های کاری خاص را به skills منتقل کنید که فقط هنگام نیاز بارگذاری شوند.

گام بعدی شما

  • فایل CLAUDE.md خود را بازبینی کنید و دستورات تکراری را به skills منتقل کنید.
  • برای کارهای ساده، از MAX_THINKING_TOKENS=0 استفاده کنید تا توکن‌های تفکر حذف شوند.
  • در کارهای حجیم (مثل تحلیل لاگ)، حتماً از Subagentها برای ایزوله کردن بافت استفاده کنید.

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

چرا این موضوع مهم است؟

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

تأثیر برای ایران

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

·نگاه ما
تحریریه دات‌هوش

این معماری نشان می‌دهد که در عصر عامل‌های هوش مصنوعی، مهندسی پرامپت جای خود را به «مدیریت وضعیت» (State Management) می‌دهد. دیگر بحث بر سر انتخاب کلمات نیست، بلکه ترتیب ورود داده‌ها به بافت تعیین می‌کند که شما ۱ دلار پرداخت کنید یا ۱۰۰ دلار. این یک چرخش از رویکرد Stateless به Stateful در تعامل با مدل‌هاست.

منابع

این گزارش با خط‌لولهٔ خودکار دات‌هوش از منابع معتبر جهانی تدوین و زیر نظر تحریریه منتشر شده است. روش کار ما

گفتگو

پنج‌شنبه‌های هوش‌محور

بسته‌ی هفتگی دات‌هوش

۵ خبر، ۲ ابزار، ۱ پرامپت در هر شماره. به‌زودی راه‌اندازی می‌شود — هر پنج‌شنبه صبح.

خبر کلیدی
ابزار کاربردی
پرامپت حرفه‌ای
تحلیل پژوهش
به‌زودی
زاویه‌ی ایرانی
به‌زودی
تمرین این هفته
به‌زودی

راهنماهای دات‌هوش

راهنماهای کاربردیِ دات‌هوش برای کار با هوش مصنوعی — از همین‌جا شروع کنید:

دات‌هوش

راهنمای فارسی هوش مصنوعی — با نگاه به ایران

اخبار روزانه، معرفی ابزارها و مدل‌ها، و آموزشِ کار با هوش مصنوعی؛ همیشه با این پرسش که از ایران چه چیزی کار می‌کند و چه چیزی نه.