UUID در prompt؛ هزینه‌ای ۴٫۸ برابر شماره‌های ۱ تا ۵۰ در یک آزمایش

چرا مهم است

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

قبل از خواندن، این‌ها را بدان۴ مفهوم
token

قطعه‌ای از متن که مدل آن را پردازش یا تولید می‌کند؛ ممکن است یک واژه، بخشی از واژه یا یک نشانه باشد. هزینهٔ بسیاری از API‌های مدل بر اساس تعداد آن محاسبه می‌شود.

بیشتر: token

tokenizer

بخشی که متن را به token تقسیم می‌کند. شیوهٔ این تقسیم‌بندی تعیین می‌کند یک متن یا شناسه چند token داشته باشد.

بیشتر: tokenizer

index

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

بیشتر: index

UUID

شناسه‌ای ۱۲۸ بیتی که معمولاً با ۳۶ نویسه شامل رقم‌های hexadecimal و خط تیره نمایش داده می‌شود و برای شناسایی رکوردها هم کاربرد دارد.

در حال نگارش: UUID

وقتی قرار است یک LLM از میان محصول‌های database چند مورد متناسب با درخواست کاربر انتخاب کند، فرستادن شناسهٔ واقعی هر محصول راهی مستقیم به نظر می‌رسد. اما آزمایش نویسنده نشان می‌دهد در چنین prompt‌ای، خود شناسه‌ها می‌توانند بخش عمدهٔ هزینه را تشکیل دهند؛ حتی وقتی اطلاعات محصول تغییری نمی‌کند.

نویسنده یک prompt با ۴۶ token دستور، فهرست ۵۰ محصول به‌شکل شناسه و نام، یک درخواست کوتاه و خروجی مورد انتظار شامل JSON array سه شناسه ساخت. سپس قالب شناسه‌ها را عوض کرد و تعداد token را با tiktoken،؜ ابزار open-source متعلق به OpenAI،؜ شمرد. هر UUID به‌طور میانگین حدود ۲۳ token مصرف کرد، درحالی‌که نام محصول کنار آن حدود ۴ token بود. در این نمونه، شناسه‌ها حدود ۸۰ درصد ورودی را تشکیل می‌دادند.

با UUID،؜ ورودی ۱۴۳۹ و خروجی ۷۲ token داشت؛ با index از ۱ تا ۵۰، این اعداد به ۳۳۶ و ۹ رسیدند. محاسبه با قیمت‌های اعلام‌شدهٔ GPT-5.6 و فرض ۳۰۰ هزار درخواست در ماه، هزینهٔ ماهانه را حدود ۱۱۲۳ دلار در برابر ۲۳۴ دلار نشان داد: نسبت ۴٫۸ برابر و اختلاف ۸۸۹ دلار. این ارقام به حجم درخواست و قیمت‌های استفاده‌شده در همان آزمایش وابسته‌اند.

دلیل این تفاوت به tokenizer برمی‌گردد: رشته‌های تصادفی UUID به قطعه‌های کوتاه تقسیم می‌شوند. خروجی هم اهمیت دارد، چون token خروجی گران‌تر است؛ در نمونهٔ UUID،؜ پاسخ فقط سه شناسه داشت، اما ۲۳ درصد هزینهٔ فراخوانی را تشکیل می‌داد.

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

این روش محدودیت دارد: index محلی برای ارجاع میان پیام‌های گفتگو، فراخوانی‌های tool در یک agent یا خروجی ذخیره‌شده کافی نیست؛ آنجا شناسهٔ ثابت لازم است. نویسنده همچنین دقت را اندازه نگرفته است: بررسی شماره‌ها فقط موردهای خارج از فهرست را تشخیص می‌دهد، نه انتخاب اشتباه را. اگر هر محصول توضیحی طولانی داشته باشد، سهم شناسه‌ها و میزان صرفه‌جویی کمتر می‌شود؛ بنابراین پیش از تغییر، باید token‌های prompt واقعی شمرده شوند.

نکته کلیدی

پیش از تغییر، token‌های prompt خودت را بشمار. برای انتخاب در یک درخواست، می‌توانی شماره‌های محلی بدهی و شناسه‌های واقعی را در برنامه نگه داری؛ اما برای ارجاع میان چند درخواست، به شناسهٔ ثابت نیاز داری.

خواندن مقاله اصلی (در زبانه‌ی جدید باز می‌شود)
برچسب‌ها (۴)