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

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

·۱ مرداد ۱۴۰۵۶ دقیقه مطالعه۲ بازدید
راهنما
تجزیه مستقیم فایل transcript.jsonl برای مشاهده فراخوانی‌های واقعی
تجزیه مستقیم فایل transcript.jsonl برای مشاهده فراخوانی‌های واقعی
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

جایگزینی گزارشات کلی `/usage` با تحلیل دانه‌به‌دانه‌ی فایل‌های JSONL برای شناسایی دقیق‌ترین مقصرین مصرف توکن (از سرورهای MCP گرفته تا مهارت‌های خاص).

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

به گزارش منابع توسعه‌دهندگان، دستور /usage در Claude Code صرفاً یک جعبه سیاه است که هزینه را گزارش می‌کند اما ابزارهای محرک آن را مخفی می‌دارد. این دستور نرخ مصرف را در بازه‌های ۵ ساعته یا ۷ روزه در کنار تعداد توکن‌های هر جلسه گزارش می‌دهد، اما نمی‌تواند به سؤال ساده‌ای مثل «کدام مهارت (Skill) بیشترین توکن را در این هفته مصرف کرده است؟» پاسخ دهد. حالا یک اسکریپت پایتونی می‌تواند دقیقاً جایگاه هر توکن در بودجه شما را مشخص کند.

در ۲۳ ژوئیه ۲۰۲۴، توسعه‌دهنده‌ای به نام لی (Lily) روشی را برای افشای این هزینه‌ها از طریق تحلیل مستقیم فایل‌های transcript.jsonl در مسیر ~/.claude/projects/ معرفی کرد. این رویکرد، تمرکز را از «میزان کل توکن‌های مصرف‌شده» به «تجزیه مصرف به تفکیک هر آیتم» از رفتار عامل (Agent) تغییر می‌دهد. با خواندن مستقیم رکوردهای JSONL، کاربران می‌توانند میزان مصرف را در لایه‌ای مشاهده کنند که دستور /usage هرگز آن را فاش نمی‌کند. همان‌طور که در تحلیل‌های قبلی ما درباره‌ی بهینه‌سازی هزینه‌های استنتاج اشاره کردیم، شفافیت در لایه‌ی ابزارها تنها راه کاهش هزینه‌های عملیاتی در مقیاس بزرگ است. از سوی دیگر، مدیریت این حجم از داده‌های ترنسکریپت چالش‌های خاص خود را دارد؛ چنان‌که برخی تحلیل‌ها نشان می‌دهند دسترسی بیش از حد به متن جلسات پیشین می‌تواند عملکرد عامل‌های کدنویسی را تخریب کند.

فرض کنید در حال مدیریت یک محیط پیچیده هوش مصنوعی هستید و با جهشی در هزینه‌ها مواجه می‌شوید. ابزار استاندارد به شما می‌گوید که این هفته ۱۰ دلار بیشتر هزینه کرده‌اید، اما نمی‌تواند بگوید آیا یک «مهارت» (Skill) آزمایشی خاص دچار حلقه تکرار (Looping) شده است، یا اینکه عامل-همه-منظوره (General-purpose Agent) نیمی از تمام فراخوانی‌های عامل‌ها را به خود اختصاص داده، و یا اینکه یک سرور MCP خاص بیش از حد فراخوانی می‌شود. با خواندن رکوردهای JSONL، شما بالاخره می‌توانید لیست دقیقی از موارد مصرف توکن‌ها داشته باشید و ببینید «توکن‌ها دقیقاً صرف چه چیزی شده‌اند».

ساختار داده‌های ترنسکریپت

هر جلسه در Claude Code در مسیر ~/.claude/projects/ و در قالب JSONL ذخیره می‌شود؛ به این معنی که هر خط یک رکورد مجزا است. هر Turn (نوبت) ارسال شده یا دریافت‌شده به یک رکورد تبدیل می‌شود. طبق مستندات این روش، یک رکورد معمولی شامل موارد زیر است:

  • شناسه مدل: برای مثال claude-sonnet-4-6.
  • بلاک‌های ابزار: آرایه‌ای در message.content که شامل بلاک‌های استفاده از ابزار (tool_use) با شناسه‌های منحصربه‌فرد است (مثلاً toolu_01M5Rw...).
  • معیارهای مصرف: مقدار دقیق توکن (Token) در ورودی (مثلاً ۱۲,۰۴۳ توکن) و خروجی (مثلاً ۴۲۱ توکن) به ازای هر Turn.
  • جزئیات ابزار: نام ابزار (مانند Read) و آرگومان‌های ورودی (مانند file_path).

سازوکار فنی و منطق شمارش

قلب این راهکار، یک اسکریپت Bash به نام usage-breakdown.sh در مسیر ~/.claude/scripts/ است که یک کد پایتون را در قالب heredoc در دل خود جای داده است. Bash دایرکتوری و بازه زمانی (که به صورت پیش‌فرض روی 7d یا ۷ روز است) را دریافت می‌کند و سپس پایتون یک اسکن کامل روی فایل‌ها انجام می‌دهد.

اسکریپت به‌طور مشخص به دنبال بلاک‌هایی می‌گردد که در آرایه message.content دارای مقدار type == "tool_use" باشند. شمارش مصرف بر اساس مکانیزم‌های زیر انجام می‌شود:

  • مهارت‌ها (Skills): داده‌ها از فیلد input.skill استخراج می‌شوند. اسکریپت همچنین متن را بر اساس کاراکتر : تجزیه می‌کند تا فضای نام (Namespace) را به‌طور جداگانه بشمارد (مثلاً hookify:configure). این کار به کاربران اجازه می‌دهد بفهمند کدام پکیج افزونه سنگین‌ترین مصرف را دارد.
  • عامل‌ها (Agents): از طریق فیلد input.subagent_type رصد می‌شوند. اگر این فیلد موجود نباشد، اسکریپت به صورت پیش‌فرض مقدار ? را جایگزین می‌کند.
  • سرورهای MCP: با تجزیه فیلد name شناسایی می‌شوند. از آنجایی که ابزارهای MCP از فرمت mcp__<server>__<tool> پیروی می‌کنند، اسکریپت بخش دوم (اندیس [1]) را برمی‌دارد تا نام سرور را ایزوله کند و مشخص شود کدام سرور پروتکل زمینه مدل (MCP) فعال‌تر است.

تحلیل داده‌های واقعی

در یک تست عملی روی ۵۱ ترنسکریپت در بازه ۷ روزه، این اسکریپت ۴۲۳۰ فراخوانی ابزار (tool_use) را پردازش کرد. نتایج نشان‌دهنده وابستگی شدید به ابزارهای خاص بود:

  • ابزارهای برتر: Bash با ۶۱٪ فراخوانی‌ها (۲۵۸۳ مورد) در صدر بود و پس از آن Read (۵۶۷ مورد)، Edit (۴۰۲ مورد) و Write (۱۵۱ مورد) قرار داشتند.
  • اکوسیستم MCP: سرور claude-in-chrome با ۲۶۱ فراخوانی، به‌سراسر دیگران پیشی گرفت، در حالی که سرور claude_ai_Google_Calendar تنها ۳ فراخوانی و claude_ai_Gmail تنها ۲ فراخوانی داشت.
  • تیپ عامل‌ها: عامل general-purpose با ۲۰ مورد، رایج‌ترین نوع بود و پس از آن Explore (۷ مورد) و reviewer (۲ مورد) قرار داشتند.
  • مهارت‌ها و افزونه‌ها: تنها ۲ مهارت منحصربه‌فرد فراخوانی شده بود: harness-audit و superpowers:brainstorming (که متعلق به فضای نام superpowers است).

لی اشاره کرد که یک مورد خاص (Edge Case) در رابطه با مهارت‌های «AutoTrigger» وجود دارد. چون این مهارت‌ها به جای فراخوانی دستی، از طریق تطبیق کلمات کلیدی در فایل CLAUDE.md فعال می‌شوند، اغلب تعداد فراخوانی دستی کمتری نشان می‌دهند؛ اما چون همچنان به عنوان بلاک‌های tool_use در ترنسکریپت ظاهر می‌شوند، تعداد کم آن‌ها به‌دقت منعکس شده و ثبت می‌گردد.

علاوه بر این، ظهور نوع عامل ? نشان‌دهنده فراخوانی‌هایی است که subagent_type آن‌ها مشخص نشده است. لی پیشنهاد می‌کند وقتی تعداد این موارد افزایش می‌یابد، محدود کردن جست‌وجو به جلسات (Sessions) خاص می‌تواند برای کشف مشخصات گم‌شده‌ی subagentها مفید باشد.

چالش‌های پیاده‌سازی

این روش بدون نقص نیست و دارای چهار نقطه ضعف فنی است:

۱. دقت زمانی: فیلتر mtime در سطح فایل عمل می‌کند. اگر یک جلسه چندین روز طول بکشد، تمام Turnهای قدیمی آن فایل به عنوان بخشی از یک «فایل اخیر» محاسبه می‌شوند. برای دقت سخت‌گیرانه، نیاز به فیلترینگ در سطح خط از طریق rec.get("timestamp") است.
۲. عمق دایرکتوری: اسکریپت از glob.glob(f"{tr_dir}/*.jsonl") استفاده می‌کند و فقط یک سطح تخت را جست‌وجو می‌کند. این یعنی ترنسکریپت‌های زیرمجموعه که در مسیر <session-uuid>/subagents/agent-*.jsonl ذخیره شده‌اند را نادیده می‌گیرد. یک اسکن بازگشتی (Recursive) با **/*.jsonl این مشکل را حل می‌کند اما به دلیل مسائل مربوط به سرعت (Performance) حذف شده است.
۳. تداخل نام‌گذاری: استفاده از بخش دوم در تجزیه __ برای مواردی مثل mcp__claude-in-chrome__computer درست کار می‌کند، اما اگر نام خود سرور شامل __ باشد، استخراج نام دچار خطا می‌شود.
۴. عملکرد: اسکن یک پنجره ۳۰ روزه می‌تواند چندین دقیقه زمان ببرد چون باید بیش از ۸۹۰ فایل را به‌طور کامل اسکن کند. لی توصیه می‌کند برای مانیتورینگ روزانه از بازه 7d یا پرچم --short استفاده کنید.

یکپارچه‌سازی عملیاتی

برای کاربردی‌تر شدن این داده‌ها، لی پرچم --short را اضافه کرد. این پرچم گزارش مفصل را به یک خط خلاصه تبدیل می‌کند؛ مثلاً: 4235 tool_use across 51 sessions (7d).

با لوله‌کشی (Piping) این خروجی به یک خط وضعیت سفارشی در کنار یک اسکریپت مشاور بودجه توکن (token-budget-advisor.sh)، توسعه‌دهندگان می‌توانند سلامت بودجه خود را به‌صورت لحظه‌ای رصد کنند. یک نمونه از این هوک (Hook) به این شکل است:

BUDGET=$(~/.claude/scripts/token-budget-advisor.sh --short)
USAGE=$(~/.claude/scripts/usage-breakdown.sh --short)
echo "💰 $BUDGET | 🔧 $USAGE"

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

گام بعدی شما

  • فایل‌های transcript.jsonl خود را در مسیر ~/.claude/projects/ بررسی کنید تا حجم داده‌های ذخیره‌شده را ببینید.
  • اگر از ابزارهای MCP استفاده می‌کنید، نام سرورهای فعال را با یک دستور grep ساده در این فایل‌ها جست‌وجو کنید.
  • اسکریپت‌های تحلیل مصرف را با ابزارهای مانیتورینگ سیستم خود (مانند zsh status line) ادغام کنید تا از شوک صورت‌حساب توکن‌ها جلوگیری کنید.

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

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

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

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

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

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

این تلاش برای دور زدن ابزارهای رسمی، نشان‌دهنده یک شکاف جدی میان «قابلیت‌های ابزاری» و «شفافیت مالی» در محصولات AI است. وقتی توسعه‌دهندگان مجبور شوند برای رصد هزینه‌ها اسکریپت‌های شخصی بنویسند، یعنی ابزارهای مدیریت هزینه فعلاً در سطح دمو هستند و برای محیط‌های عملیاتی (Production) قابل اعتماد نیستند. احتمالاً در آینده نزدیک، شاهد ظهور استانداردهای جدیدی برای «حسابرسی توکنی» در لایه‌ی پروتکل خواهیم بود.

منابع

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

گفتگو

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

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

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

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

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

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

دات‌هوش

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

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