API وSDKدليل
Vercel AI SDK مع base URL مخصص: CheapTokens في TypeScript
وجّه Vercel AI SDK إلى CheapTokens باستخدام createOpenAICompatible: مقتطف عامل لـ generateText وstreamText، واستخدام الرموز وإصلاحات للأخطاء الشائعة.

في هذه الصفحة
لتشغيل Vercel AI SDK على CheapTokens، ثبّت @ai-، وأنشئ مزوّدًا باستخدام baseURL: 'https:/ ومفتاحك، ومرّر provider('deepseek- كـ model. كل شيء آخر في تطبيقك، generateText، streamText، ومطالباتك، يبقى كما هو.
لذا إذا كان لديك بالفعل مسار Next.js أو سكربت Node يتحدث إلى نموذج مستضاف عبر AI SDK، فأنت تغيّر ثلاثة أشياء: عنوان URL الأساسي، والمفتاح، ومعرّف النموذج. تتحقق هذا الدليل من الإعداد مقابل صفحة المزوّدين المتوافقين مع OpenAI في AI SDK (29 أكتوبر 2026). ويستخدم واجهة Chat Completions من واجهة CheapTokens API، وهي ما يتحدثه ذلك المزوّد.
التثبيت وإنشاء المزوّد#
حزمتان: حزمة ai الأساسية والمزوّد المتوافق مع OpenAI.
npm install ai @ai-sdk/openai-compatible
export CHEAPTOKENS_API_KEY=ct_your_key_hereترتيب العمل قصير:
رتّب بالترتيب
رتّب الإعداد
اسحب العناصر أو استخدم الأسهم
- اشحن الرصيد وأنشئ مفتاح API
- ضع المفتاح في متغير بيئة
- أنشئ المزوّد باستخدام baseURL الخاص بـ CheapTokens
- مرّر معرّف النموذج الكامل إلى generateText
المزوّد نفسه هو استدعاء واحد لـ createOpenAICompatible:
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
export const cheaptokens = createOpenAICompatible({
name: 'cheaptokens',
apiKey: process.env.CHEAPTOKENS_API_KEY,
baseURL: 'https://api.cheaptokens.dev/v1',
includeUsage: true,
});name مجرد تسمية لسجلاتك الخاصة. يطلب includeUsage: true عدد الرموز في استجابات البث أيضًا؛ وبدونه يتصرف الافتراضي مثل false. استدعاء cheaptokens('model- يمنحك نموذج محادثة؛ وcheaptokens. وcheaptokens. يفعلان الشيء نفسه.

يجب أن يكون معرّف النموذج كاملًا: deepseek-. الاسم القصير مثل deepseek- هو ما تراه في جداول الأسعار، ولن تقبله الواجهة. إذا لم تكن متأكدًا مما تكتبه، اعرض النماذج باستخدام GET /v1/models وانسخ المعرّف من هناك.
generateText: إجابة واحدة وعدد رموزها#
إليك سكربتًا كاملًا. يطلب إجابة قصيرة ويطبع النص وكائن الاستخدام معًا.
import { generateText } from 'ai';
import { cheaptokens } from './provider';
const result = await generateText({
model: cheaptokens('deepseek-ai/DeepSeek-V4-Flash-0731'),
prompt: 'Explain in two sentences what a base URL is.',
});
console.log(result.text);
console.log(result.usage);شغّله باستخدام npx tsx index.ts. تحصل على الإجابة كنص في result.text، ويحمل result.usage عدد رموز الإدخال والإخراج لذلك الاستدعاء. نطبع الكائن كاملًا لترى كل ما فيه. في مرجع AI SDK لـ streamText (تم التحقق في 29 أكتوبر 2026) يحتوي usage على inputTokens وoutputTokens وtotalTokens؛ تحقق من أنواع نسختك المثبتة قبل ربطها بلوحة تحكم.
لماذا تهتم بقراءة الاستخدام أصلًا؟ لأن هذا هو الرقم الذي تدفع مقابله. لنفترض أن تطبيقك يرسل مطالبة من 1,500 رمز ويحصل على إجابة من 600 رمز. يكلف ذلك الطلب $0.000083 بالأسعار الحالية، وألف منها تبدو هكذا:
| النموذج | الإدخال $/1M | الإخراج $/1M | لكل طلب | 1,000 طلبات | OpenRouter، 1,000 طلبات |
|---|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.000054 | $0.054 | $0.107 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.000083 | $0.0825 | $0.165 |
| MiniMax-M2.7 | $0.05 | $0.15 | $0.00017 | $0.165 | $1.17 |
1,500 رمز إدخال و600 رمز إخراج لكل طلب. الأسعار لكل مليون رمز حالية وتتغير مع تعريفاتنا؛ يعرض عمود OpenRouter أسعارًا مرجعية لنفس حجم العمل.
عمود CheapTokens إجمالي، الإدخال والإخراج معًا، وأرخص من OpenRouter لكل نموذج في الجدول. إذا أردت تحويل usage إلى ميزانية جارية، فإن تتبع تكلفة رموز الوكيل يعرض الفكرة في Python؛ والحساب نفسه في TypeScript.
streamText: اطبع الكلمات أثناء وصولها#
لواجهة محادثة تريد ظهور النص بينما لا يزال النموذج يكتب. يمنحك streamText متكررًا غير متزامن من أجزاء النص.
import { streamText } from 'ai';
import { cheaptokens } from './provider';
const result = streamText({
model: cheaptokens('deepseek-ai/DeepSeek-V4-Flash-0731'),
prompt: 'Write a 100-word product description for a pocket notebook.',
});
for await (const chunk of result.textStream) {
process.stdout.write(chunk);
}
console.log('\n', await result.usage);لاحظ عدم وجود await قبل streamText(...): فهو يعود فورًا وتستهلك البث. usage وعد يُحسم عند انتهاء البث، لذا تنتظره بعد الحلقة. في معالج مسار Next.js ستعيد البث إلى المتصفح بدلًا من الكتابة إلى stdout؛ وجزء المزوّد متطابق. إذا أردت الشيء نفسه باستخدام OpenAI SDK العادي، راجع بث استجابات المحادثة في Node.js.
الإجابات الطويلة لا مشكلة هنا: يمكن لـ DeepSeek-V4-Flash على CheapTokens كتابة ما يصل إلى 32,768 رمزًا في إجابة واحدة، ولديه نافذة سياق 380K وسعر واحد في أي ساعة. صفحة النموذج على /en/cheap-deepseek/، والأسعار الحالية على صفحة الأسعار.
بدّل النموذج دون لمس الباقي#
لأن معرّف النموذج فقط هو ما يتغير، فإن تجربة نموذج آخر تعديل سطر واحد. يمتلك GLM-5.3-Flash نافذة سياق 390K ويجيب بما يصل إلى 8,192 رمزًا؛ وبالأسعار الحالية يكلف $0.02 لكل 1M رمز إدخال و$0.04 لكل 1M رمز إخراج.
جرّب بنفسكجرّب: أي سطر تغيّره لتشغيل السكربت نفسه على GLM-5.3-Flash؟إظهار الإجابة
معرّف النموذج فقط: cheaptokens('zai-. يبقى المزوّد والمفتاح وbaseURL وبقية السكربت كما هي.
نمط مفيد هو إبقاء المعرّف في متغير بيئة (process.) حتى تقارن نموذجين على المطالبة نفسها دون إعادة بناء. تساعدك مقارنة DeepSeek مقابل GLM مقابل MiniMax على اختيار أيها يستحق التجربة.
إذا لم يعمل#
معظم الإخفاقات هي أحد ثلاثة أشياء: المفتاح أو عنوان URL أو معرّف النموذج.
- 401 يعني أن المفتاح مفقود أو خاطئ. تحقق من تعيين
CHEAPTOKENS_في الصدفة التي تشغّل السكربت (يحتاج خادم Next.js إليه فيAPI_ KEY .env.localوإعادة تشغيل). - 404 يعني عادة أن baseURL فقد
/v1أو أن معرّف النموذج هو الاسم القصير. استخدمhttps:/والمعرّف الكامل./ api. cheaptokens. dev/ v1 - تتوقف الإجابة في منتصف الجملة. وصل النموذج إلى حد الإخراج؛ يشرح إصلاح finish_reason "length" ذلك.
الشرح الأطول للأولين موجود في API 401 أو 404: مفتاح أو عنوان URL أساسي أو معرّف نموذج خاطئ.
قائمة التحقق
قبل تشغيل السكربت
لربط أدوات أخرى وإجراء الطلب الأول يدويًا، ابدأ من وثائق CheapTokens.



