مدلهای زبانی بزرگ (LLMs) مانند GPT بر اساس توکنها کار میکنند؛ واحدهای کوچکی از متن که میتوانند یک کلمه، بخشی از کلمه یا حتی یک نشانه باشند. در واقع هر بار که ما متنی به یک مدل ارسال میکنیم، ابتدا آن متن به توکنها شکسته شده و سپس پردازش میشود. همین موضوع باعث میشود که درک سازوکار توکنها نهتنها برای فهم بهتر نحوه کارکرد مدلها ضروری باشد، بلکه در مدیریت توکن ها و بهینهسازی عملکرد آنها نیز نقشی کلیدی ایفا کند. به بیان ساده، هرچه تعداد توکنها بیشتر باشد، هزینه و زمان پردازش بالاتر میرود.
در این مقاله به بررسی دقیق مفهوم توکنها، نحوه محاسبه آنها در OpenAI API و ارتباط مستقیمشان با هزینهها و محدودیتهای فنی میپردازیم. سپس چالشهای مدیریت توکنها و راهکارهای عملی برای کاهش مصرف غیرضروری آنها را مرور میکنیم.
توکن چیست و چرا اهمیت دارد؟
توکنها در سادهترین تعریف، کوچکترین واحدهای متنی هستند که مدلهای زبانی آنها را پردازش میکنند. این واحدها میتوانند یک کلمه کامل باشند، مانند «کتاب»، یا بخشی از یک کلمه مثل «کتـ» و «ـاب». حتی علائم نگارشی مانند «؟» یا فاصله بین کلمات هم میتوانند بهعنوان توکن در نظر گرفته شوند. در واقع، هر بار که متنی به مدل وارد میشود یا خروجی از آن دریافت میکنیم، پشت صحنه همهچیز به توکنها شکسته و تحلیل میشود.
اهمیت توکنها از آنجا ناشی میشود که مدلهای AI مانند GPT متن ورودی و خروجی را نه بهعنوان جمله یا پاراگراف، بلکه بهصورت دنبالهای از توکنها میبینند. این یعنی هزینه و سرعت پردازش مستقیما به تعداد توکنها وابسته است. اگر ورودی طولانیتر باشد، مدل باید تعداد بیشتری توکن پردازش کند و این موضوع هم زمان پاسخگویی و هم هزینه استفاده از API را افزایش میدهد.
یکی دیگر از جنبههای مهم توکنها ارتباط آنها با مفهوم context window است؛ یعنی حداکثر تعداد توکنهایی که یک مدل میتواند در حافظه کوتاهمدت خود نگه دارد. برای مثال، برخی از مدلها فقط ۴۰۹۶ توکن را پشتیبانی میکنند، در حالی که نسخههای پیشرفتهتر ممکن است تا ۱۲۸هزار توکن را پردازش کنند. اگر ورودی شما بیش از این حد باشد، مدل بخشی از اطلاعات را کنار میگذارد و پاسخ ناقص خواهد شد.
برای درک بهتر، به یک مثال ساده نگاه کنیم. جملهی زیر را در نظر بگیرید:
«I love reading books»
این جمله توسط یک tokenizer به چند بخش شکسته میشود، مثلا:
[“I”, ” love”, ” reading”, ” books”, “.”]
در اینجا جملهی کامل تنها ۵ توکن دارد. اما اگر متن طولانیتری بدهید، تعداد توکنها به سرعت افزایش پیدا میکند و این مستقیما روی هزینه استفاده از OpenAI API اثر خواهد گذاشت.
ساختار توکنها در مدلهای AI
برای آنکه درک کنیم توکنها چگونه در مدلهای هوش مصنوعی عمل میکنند، باید به فرایند توکنسازی و نحوه مصرف آنها در ورودی و خروجی توجه کنیم. همچنین اندازه مدل نیز نقش مستقیمی در مدیریت و محدودیتهای مربوط به توکن دارد.
۱. توکنسازی و الگوریتمهای آن
مدلهای زبانی نمیتوانند متن خام را مستقیما پردازش کنند؛ آنها ابتدا متن را به توکنها میشکنند. یکی از رایجترین روشها برای این کار Byte Pair Encoding (BPE) است. در این روش، متن به قطعات کوچکتر بر اساس فراوانی تکرار شکسته میشود. یعنی ترکیبهایی از کاراکترها که بیشتر در زبان ظاهر میشوند بهعنوان یک توکن در نظر گرفته میشوند. همین موضوع باعث میشود که کلمات پرتکرار بهصورت یک توکن منفرد پردازش شوند، در حالیکه کلمات ناشناخته یا کمتر متداول به چندین توکن تقسیم میشوند. این کار باعث افزایش کارایی و کاهش حجم دادههای مورد نیاز برای مدل میشود.
۲. تفاوت مصرف توکن در ورودی و خروجی
زمانی که با OpenAI API یا سایر مدلهای مشابه کار میکنیم، باید بدانیم که هم prompt (ورودی) و هم completion (خروجی) توکن مصرف میکنند. بهعنوان مثال اگر ورودی شما ۵۰ توکن باشد و مدل پاسخی ۱۰۰ توکنی تولید کند، مجموعا ۱۵۰ توکن محاسبه خواهد شد. هزینه استفاده از API دقیقا بر همین اساس محاسبه میشود. بنابراین بهینهسازی در طراحی promptها اهمیت ویژهای دارد؛ چرا که ورودیهای طولانی و غیرضروری باعث افزایش چشمگیر مصرف توکن و هزینه میشوند.
۳. تاثیر اندازه مدل بر مصرف توکنها
مدلهای مختلف مانند GPT-3.5 و GPT-4 از نظر ظرفیت context window و نحوه پردازش توکنها تفاوت زیادی دارند. برای مثال، GPT-3.5 ممکن است تا ۴هزار توکن را پشتیبانی کند، در حالی که نسخههای جدیدتر GPT-4 ظرفیت بسیار بالاتری دارند (مثلا تا ۱۲۸هزار توکن). این تفاوت نهتنها روی میزان دادهای که میتوان در یک درخواست قرار داد تاثیر میگذارد، بلکه روی عملکرد مدل نیز موثر است. هرچه context window بزرگتر باشد، امکان پردازش متون طولانیتر و پاسخ دقیقتر به پرسشهای پیچیده فراهم میشود. اما در مقابل، هزینه پردازش چنین مدلهایی نیز معمولا بالاتر است.
مقایسه توکنها و هزینه در مدلهای بزرگ AI
برای درک بهتر نحوه مصرف توکنها و هزینه مرتبط با آن، ابتدا جدول زیر را مرور میکنیم که ظرفیت context window و تعرفه تقریبی مدلهای مختلف را نشان میدهد:
مدل | حداکثر توکن (Context Window) | تعرفه تقریبی | توضیحات کوتاه |
OpenAI GPT | |||
GPT-o1 | 200K | $0.01-0.03 / 1K tokens | مناسب پردازش متون طولانی و پروژههای پیشرفته |
GPT-4o | 128K | $0.01-0.03 / 1K tokens | نسخه بهینهشده برای کاربردهای تجاری |
GPT-4 | 8K / 32K | $0.01-0.03 / 1K tokens | دو گزینه حافظه کوتاه و میانمدت |
GPT-3.5 Turbo | 16K | $0.01-0.03 / 1K tokens | مدل سریع و اقتصادی برای کارهای معمولی |
Anthropic Claude | |||
Claude 3 Opus / Sonnet / Haiku | 200K | $0.015-0.03 / 1K tokens | طراحی شده برای مکالمات طولانی و دقیق |
Google Gemini | |||
Gemini 1.5 Flash | 1M | $0.00025-0.001 / 1K tokens | پشتیبانی از متون بسیار طولانی با هزینه کم |
Gemini 1.5 Pro | 2M | $0.00025-0.001 / 1K tokens | مناسب کاربردهای ابری و حجم بالا |
Mistral | |||
Mistral Large 24.11 | 128K | $0.0002-0.001 / 1K tokens | پردازش متن طولانی با کارایی بالا |
Mistral Small 24.09 | 32K | $0.0002-0.001 / 1K tokens | نسخه سبک و اقتصادی |
DeepSeek | |||
DeepSeek-Chat / Reasoner | 64K | $0.014-0.14 / 1M tokens | مناسب مکالمه و تحلیلهای پیچیده |
نحوه محاسبه هزینه توکنها با مثال
فرض کنید از GPT-4 با تعرفه $0.02 برای هر ۱۰۰۰ توکن استفاده میکنیم و ورودی ما ۳۰۰ توکن و خروجی مدل ۷۰۰ توکن است. مجموع مصرف توکن برابر است با:
۳۰۰+۷۰۰=۱۰۰۰ توکن
هزینه درخواست:
۱۰۰۰÷۱۰۰۰×۰.۰۲=$۰.۰۲
با همین روش میتوان هزینه هر درخواست را به سرعت محاسبه کرد و بودجه پروژه را مدیریت نمود.
نکات مدیریتی برای بهینهسازی مصرف توکن
- کوتاه کردن و هدفمند کردن پرامپتها: حذف اطلاعات اضافی باعث کاهش توکن مصرفی و کاهش هزینه میشود.
- تقسیمبندی خروجی طولانی به چند درخواست: به جای تولید یک پاسخ طولانی، خروجی را مرحلهای دریافت کنید تا کنترل بیشتری روی مصرف توکن داشته باشید.
- استفاده از context trimming: فقط دادههای ضروری را به مدل ارسال کنید تا مصرف توکن غیرضروری کاهش یابد.
- انتخاب مدل مناسب بر اساس نیاز پروژه: مدلهای با context window بزرگ امکان پردازش متون طولانیتر را میدهند اما هزینه بیشتری دارند؛ مدلهای کوچکتر برای متون کوتاهتر و بودجه محدود مناسب هستند.
چالشهای مدیریت توکنها
مدیریت توکنها در استفاده از مدلهای بزرگ زبانی با چندین چالش مهم همراه است. نخست، محدودیت context window در مدلها یکی از دغدغههای اصلی است؛ برای مثال برخی مدلها فقط تا ۴ هزار توکن را در حافظه کوتاهمدت خود نگه میدارند، در حالی که مدلهای پیشرفتهتر تا ۱۲۸ هزار توکن را پشتیبانی میکنند. این تفاوت باعث میشود که پردازش متون طولانی بدون تقسیمبندی مناسب دشوار شود و گاهی نیاز به انتخاب بین کاهش دقت یا تقسیم متن باشد.
چالش دوم به هزینههای پنهان استفاده از توکنهای زیاد مربوط میشود. هر توکن مصرفی در API دارای هزینه است و متون طولانی میتوانند به سرعت هزینهها را افزایش دهند، بهخصوص وقتی که پرامپتها شامل اطلاعات غیرضروری باشند. سومین نکته، تاثیر ورودیهای طولانی و غیرضروری بر کیفیت خروجی است؛ دادههای اضافه نهتنها هزینه را بالا میبرند، بلکه مدل ممکن است در تمرکز روی بخشهای مهم دچار مشکل شود. میتوان به اهمیت مدیریت مکالمات طولانی و استراتژیهایی برای کاهش توکن مصرفی اشاره کرد، از جمله خلاصهسازی دادهها، تقسیمبندی هوشمند مکالمه و استفاده از حافظه کوتاهمدت بهینه.
استراتژیهای بهینهسازی مصرف توکن
برای کاهش هزینه و افزایش کارایی در استفاده از OpenAI API، لازم است چندین راهکار عملی به کار گرفته شود. ابتدا پرامپتها باید مختصر و هدفمند باشند تا تنها اطلاعات مورد نیاز به مدل ارسال شود و توکنهای اضافی مصرف نشود. خلاصهسازی ورودیها و حذف دادههای غیرضروری نیز نقش مهمی در کاهش مصرف توکن دارد و به بهبود دقت مدل کمک میکند.
در مواردی که نیاز به حفظ context طولانی وجود دارد، بهتر است از حافظه بیرونی یا دیتابیس استفاده شود و تمام دادهها بهصورت مستقیم به مدل ارسال نشود. همچنین، تقسیم درخواستهای طولانی به چند API call کوچکتر، هم مدیریت توکن را ساده میکند و هم امکان کنترل بهتر بر پاسخها را فراهم میسازد. ابزارهایی مانند tiktoken در OpenAI به شما کمک میکنند تعداد توکنها را پیش از ارسال محاسبه و مدیریت کنید.
کاربردهای عملی مدیریت توکن در OpenAI API
برای درک بهتر اهمیت مدیریت توکنها و بهینهسازی مصرف آنها در OpenAI API، ابتدا لازم است بدانیم که هر درخواست به مدل شامل توکنهایی است که بر اساس تعداد آنها هزینه و عملکرد تعیین میشود. با استفاده از ابزارها و روشهای مناسب، میتوان مصرف توکن را کنترل کرد، هزینهها را کاهش داد و کیفیت پاسخها را حفظ کرد.
- محاسبه تعداد توکنها قبل از ارسال پرامپت: با استفاده از کتابخانه tiktoken میتوان تعداد توکنهای ورودی را پیش از ارسال به مدل برآورد کرد و از مصرف اضافی جلوگیری کرد.
- ارسال درخواست به Chat Completions API: پرامپت به مدل ارسال میشود و پاسخ دریافت میشود؛ مدل بر اساس تعداد توکنها و متن ورودی خروجی تولید میکند.
- بررسی مصرف توکنها از API: ویژگی response[‘usage’] نشان میدهد چند توکن در پرامپت، پاسخ و مجموع مصرف شده است.
- بهینهسازی پرامپتها: با کوتاه کردن یا خلاصهسازی پرامپت، تعداد توکنهای مصرفی کاهش مییابد و هزینهها پایین میآید.
- مقایسه قبل و بعد از بهینهسازی: میتوان اثر تغییرات در پرامپت بر مصرف توکن و کارایی مدل را به صورت عددی مشاهده کرد.
- کاربرد در پروژههای واقعی: این روشها در توسعه چتباتها و تحلیل دادههای متنی، بهینهسازی هزینه و افزایش عملکرد را فراهم میکنند.
مثال کاربردی توکن
در ادامه یک نمونه ساده کدنویسی Python برای مدیریت توکنها در OpenAI API آماده کردهایم که هم محاسبه مصرف توکن و هم بهینهسازی ساده پرامپتها را نشان میدهد. این مثال یعنی این که چگونه میتوان یک پرامپت طولانی را به یک پرامپت بهینهتر تبدیل کرد و مصرف توکن را کنترل کرد، بدون آنکه کیفیت پاسخ مدل کاهش پیدا کند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# نصب کتابخانههای مورد نیاز # pip install openai tiktoken import openai import tiktoken # تنظیم کلید API اختصاصی خودتان openai.api_key = “<YOUR_API_KEY_HERE>” # تابع کمکی برای محاسبه تعداد توکنها def count_tokens(text, model=“gpt-3.5-turbo”): enc = tiktoken.encoding_for_model(model) return len(enc.encode(text)) # نمونه پرامپت طولانی user_prompt = “”“ سلام، میخواهم یک چکیده کوتاه از این متن دریافت کنم. این متن شامل توضیحات مفصل درباره مدیریت توکنها در OpenAI API و روشهای بهینهسازی هزینه است… ““” # محاسبه تعداد توکنهای ورودی tokens_in_prompt = count_tokens(user_prompt) print(f“تعداد توکنهای ورودی: {tokens_in_prompt}”) # ارسال درخواست به Chat Completions API response = openai.ChatCompletion.create( model=“gpt-3.5-turbo”, messages=[ {“role”: “system”, “content”: “You are a helpful assistant.”}, {“role”: “user”, “content”: user_prompt} ] ) # نمایش پاسخ assistant_response = response[‘choices’][0][‘message’][‘content’] print(“پاسخ مدل:\n”, assistant_response) # مشاهده مصرف توکنها از API usage = response[‘usage’] print(f“تعداد توکنهای مصرف شده در پرامپت: {usage[‘prompt_tokens’]}”) print(f“تعداد توکنهای مصرف شده در پاسخ: {usage[‘completion_tokens’]}”) print(f“کل توکنهای مصرف شده: {usage[‘total_tokens’]}”) # مثال ساده برای بهینهسازی: کوتاه کردن پرامپت optimized_prompt = “خلاصه کوتاه درباره مدیریت توکنها بده.” tokens_optimized = count_tokens(optimized_prompt) print(f“تعداد توکنهای ورودی بعد از بهینهسازی: {tokens_optimized}”) |
توضیح کد:
۱. ابتدا با tiktoken تعداد توکنهای پرامپت محاسبه میشود تا پیش از ارسال به مدل، مصرف توکن را برآورد کنیم.
۲. پرامپت به Chat Completions API ارسال میشود و پاسخ مدل دریافت میشود.
۳. با استفاده از response[‘usage’] میتوان تعداد توکنهای مصرف شده در پرامپت، پاسخ و کل مصرف را مشاهده کرد.
۴. در انتها، یک پرامپت کوتاه شده نشان میدهد که چطور با بهینهسازی متن ورودی، مصرف توکن کاهش مییابد.
نتیجهگیری
درک مفهوم توکنها و نحوه مصرف آنها برای هر کسی که با AI و API کار میکند، اهمیت بالایی دارد. شناخت درست این موضوع به کاربران امکان میدهد که هزینهها را کنترل کنند و کیفیت خروجی مدل را بهبود ببخشند.
مدیریت بهینه توکنها شامل خلاصهسازی پرامپتها، تقسیمبندی مکالمههای طولانی و استفاده از ابزارهای اندازهگیری توکن است که مستقیما بر صرفهجویی در منابع و کارایی پروژهها تاثیر میگذارد. برای جزئیات بیشتر و بررسی ابزارهای رسمی، مراجعه به مستندات OpenAI توصیه میشود تا بهترین روشها و بهروزرسانیهای مربوط به مدیریت توکنها را دنبال کنید.
منابع
guptadeepak.com | blogs.nvidia.com | drlee.io
سوالات متداول
خلاصهسازی پرامپتها: متنهای طولانی را قبل از ارسال به مدل کوتاه و هدفمند کنید تا تعداد توکنها کاهش یابد.
حذف دادههای غیرضروری: اطلاعات تکراری یا اضافی را از ورودیها حذف کنید.
تقسیمبندی مکالمهها: به جای ارسال یک پرامپت بسیار طولانی، مکالمهها را به بخشهای کوچک تقسیم کنید.
استفاده از مدل مناسب: مدلهایی با نرخ مصرف توکن کمتر یا با پنجرهی context بزرگتر میتوانند کارایی بهتری داشته باشند و هزینهها را کاهش دهند.
برای مشاهده مصرف توکنها در OpenAI API میتوان:
از ویژگی response[‘usage’] در پاسخ API استفاده کرد که تعداد توکنهای مصرف شده در پرامپت (prompt_tokens)، پاسخ (completion_tokens) و مجموع کل (total_tokens) را نشان میدهد.
قبل از ارسال پرامپت، با استفاده از کتابخانه tiktoken میتوان تعداد توکنهای متن را محاسبه کرد و پیشبینی بهتری از مصرف داشت.
این اطلاعات به شما کمک میکند تا پرامپتها را بهینه کنید و هزینه را مدیریت نمایید.
ذخیرهسازی مکالمات قبلی: به جای ارسال دوبارهی کل تاریخچه، فقط بخشهای ضروری یا خلاصه را به مدل بدهید.
تقسیم مکالمه به چند API call: مکالمات طولانی را به بخشهای کوتاهتر تقسیم کنید تا مصرف توکن کاهش یابد و پاسخها دقیقتر باشند.
استفاده از حافظه بیرونی یا پایگاه داده: پاسخها و اطلاعات مهم را ذخیره کنید و تنها بخش جدید مکالمه را به مدل ارسال کنید.
بهینهسازی پرامپت و استفاده از قالبهای آماده: الگوهای پرسش کوتاه و هدفمند مصرف توکن را کاهش میدهد و به پاسخهای بهتر کمک میکند.
دیدگاهتان را بنویسید