جدول المحتويات
- 1. ما هو AI SDK — "OpenAI/Anthropic/Gemini عبر واجهة API واحدة"
- 2. لماذا تستخدم AI SDK — 3 أسباب عملية
- 3. التشغيل في 5 دقائق — من generateText إلى streamText
- 4. الإخراج المنظّم — JSON آمن النوع مع generateObject
- 5. Tool calling والوكلاء — قلب AI SDK 6
- 6. التكامل مع React — واجهة دردشة في 10 أسطر مع useChat
- 7. تبديل المزوّدين — Claude ↔ GPT ↔ Gemini في 3 أسطر
- 8. ثلاثة فخاخ في الإنتاج
- الخلاصة
- الأسئلة الشائعة
"أطلقت المنتج على OpenAI API، لكنني أريد تجربة Claude وGemini أيضًا" — وفجأة تقضي ساعتين في إعادة كتابة المنطق نفسه أمام ثلاث SDK مختلفة، وتترجم أشكال الطلب والاستجابة يدويًا. Vercel AI SDK (يُسمّى ببساطة "AI SDK" منذ 2026) يطوي كل ذلك في "استيراد واحد، دالة واحدة، كل المزوّدين." مكتبة TypeScript مفتوحة المصدر بأكثر من 20 مليون تنزيل شهريًا، ويأتي AI SDK 6 بـ الوكلاء وMCP وموافقة الأدوات وDevTools، وحتى مايو 2026 يُعدّ المعيار الفعلي للواجهة الموحدة لـ LLM.
بصراحة من البداية: إن كنت تستدعي LLM من تطبيق ويب أو مشروع Node.js في 2026، فإن AI SDK هو الخيار الافتراضي الصحيح — نقطة. الأسباب الوحيدة للكتابة مباشرةً مقابل OpenAI أو Anthropic SDK هي "قاعدة كود قائمة" أو "ميزات مزوّد طازجة جدًا (Anthropic computer use وغيرها)". خلاف ذلك، يمنحك AI SDK "تبديلًا سهلًا، وثلث حجم التنفيذ، وأمان النوع، والتكامل مع React" بأفضلية ساحقة.
الرأي الشخصي أولًا: القيمة الحقيقية لـ AI SDK هي التحرّر من القفل التقني للمزوّد. رفعت OpenAI الأسعار؟ ثلاثة أسطر للانتقال إلى Anthropic. أصدرت Gemini نموذجًا جديدًا؟ جرّبه في مكان واحد. كل ذلك في قاعدة كود واحدة. كما تناولناه في ما هي AI API، فإن واقع 2026 هو أن "استخدام نماذج متعددة لأعمال مختلفة" هو الافتراضي الآن — وAI SDK يدفع تكلفة التبديل نحو الصفر تقاربيًّا. تغطي هذه المقالة ما هو AI SDK، ولماذا تستخدمه، وبدء سريع في 5 دقائق، والإخراج المنظّم، وtool calling والوكلاء، والتكامل مع React، وتبديل المزوّدين، وثلاثة فخاخ إنتاجية — كلها مستندة إلى AI SDK 6 حتى مايو 2026.
ثلاثة مزوّدين، واجهة API واحدة — اهرب من القفل
— كتابة ثلاث SDK منفصلة انتهى عصرها في 2025
مايو 2026: أكثر من 20 مليون تنزيل شهري، AI SDK 6 يأتي بـ الوكلاء، MCP، موافقة الأدوات.
TypeScript، رخصة Apache 2.0، يعمل في أي مكان (Cloudflare Workers / AWS Lambda / Node.js الخاص بك).
1. ما هو AI SDK — "OpenAI/Anthropic/Gemini عبر واجهة API واحدة"
AI SDK هو مكتبة TypeScript مفتوحة المصدر بنتها Vercel. GitHub: vercel/ai، الترخيص Apache 2.0، أكثر من 20 مليون تنزيل شهري حتى مايو 2026. بناها فريق Vercel، لكنها لا تتطلب Vercel للتشغيل — Cloudflare Workers، AWS Lambda، Deno، Node.js الخاص بك، والمتصفح: كلها تعمل.
الفكرة الأساسية هي "طبقة محوّل لتبديل مزوّدي LLM." على سبيل المثال:
import { generateText } from 'ai';
import { openai } from '@ai-sdk/openai';
const { text } = await generateText({
model: openai('gpt-5'),
prompt: 'Tell me today\'s weather',
});
التبديل إلى Anthropic يعني تغيير ثلاثة أسطر:
import { generateText } from 'ai';
import { anthropic } from '@ai-sdk/anthropic'; // ← changed
const { text } = await generateText({
model: anthropic('claude-opus-4-7'), // ← changed
prompt: 'Tell me today\'s weather',
});
كود الاستدعاء لا يتغيّر إطلاقًا. هذا ما تعنيه عبارة "API واحدة لكل المزوّدين" عمليًا. لكل مزوّد صيغة الرسائل الخاصة به، وstop sequences، ومخططات الأدوات، وموضع system prompt، وشكل JSON للاستجابة — وAI SDK يمتص كل ذلك تحت الغطاء.
2. لماذا تستخدم AI SDK — 3 أسباب عملية
ثلاثة أسباب ملموسة: "تبديل سهل، وثلث حجم التنفيذ، وأمان النوع."
ثلاثة أسباب عملية
مكافأة: React وVue وSvelte وNode.js مدعومة كلها؛ صيانة شهرية من Vercel؛ أكبر منظومة بـ 20 مليون تنزيل/شهر.
متى لا يناسبك AI SDK: ① عندما تحتاج إلى دفع ميزة طازجة جدًا من مزوّد (Anthropic computer use وغيرها) فور إصدارها، قبل أن يلفّها AI SDK؛ ② عندما تعمل بـ Python فقط (AI SDK خاص بـ TypeScript)؛ ③ عندما تكون قاعدة كود OpenAI-SDK قائمة وتعمل ولا داعي لإعادة الكتابة. خارج ذلك، الافتراضي في 2026 هو AI SDK.
3. التشغيل في 5 دقائق — من generateText إلى streamText
الإعداد الأدنى هو ثلاث خطوات. عرض على Node.js / Next.js.
# Step 1: install
npm install ai @ai-sdk/openai
# env: OPENAI_API_KEY=sk-...
# Step 2: create a file (app/api/chat/route.ts or index.ts)
// Step 3: code
import { generateText } from 'ai';
import { openai } from '@ai-sdk/openai';
const { text, usage } = await generateText({
model: openai('gpt-5'),
system: 'You are a careful, helpful assistant.',
prompt: 'List three benefits of the AI SDK.',
});
console.log(text);
console.log(`tokens: ${usage.totalTokens}`);
هذا دون بث، يعيد النص الكامل. شغّله ويصل الرد إلى text خلال ثوانٍ. usage يعطيك عدد الرموز تلقائيًا — انضباط التكلفة من مقالة توفير الرموز ينطبق مباشرةً.
التحويل إلى البث (تجربة آلة كاتبة) هو ببساطة إعادة تسمية الدالة إلى streamText:
import { streamText } from 'ai';
import { openai } from '@ai-sdk/openai';
const result = streamText({
model: openai('gpt-5'),
prompt: 'List three benefits of the AI SDK.',
});
for await (const chunk of result.textStream) {
process.stdout.write(chunk); // emit token by token
}
مع OpenAI SDK الخام كنت ستكتب تحليل SSE، وتسلسل الأجزاء، واكتشاف نهاية البث يدويًا (30–50 سطرًا). AI SDK هو حلقة for-await واحدة. الكود نفسه يعمل مع Anthropic وGemini دون تغيير.
4. الإخراج المنظّم — JSON آمن النوع مع generateObject
اطلب من LLM "JSON" وستحصل عليه أحيانًا ملفوفًا في كتلة كود Markdown، أو بتعليقات مُدرجة، أو ببنية انزاحت بهدوء. generateObject يعالج هذا من الجذور: عرّف الشكل بمخطط Zod، وAI SDK يتولّى التحليل والتحقق وإعادة المحاولة تلقائيًا.
import { generateObject } from 'ai';
import { openai } from '@ai-sdk/openai';
import { z } from 'zod';
const { object } = await generateObject({
model: openai('gpt-5'),
schema: z.object({
title: z.string(),
tags: z.array(z.string()).max(5),
sentiment: z.enum(['positive', 'neutral', 'negative']),
summary: z.string().max(200),
}),
prompt: 'Analyze the article: "AI SDK 6 has..." [body]',
});
// object.title, object.tags etc are typed
console.log(object.tags); // string[]
المكسب الحقيقي: "نوع object يُحدَّد بـ `z.infer<typeof schema>`." TypeScript يستنتجه، فكتابة object. في محرّرك تكمل تلقائيًا title / tags / sentiment / summary. التحقق وقت التشغيل يجري داخل SDK — انتهاكات المخطط تستدعي إعادة محاولة تلقائية. صنف الحوادث "أعاد AI JSON سيئًا، فشل التحليل" يختفي عمليًا.
5. Tool calling والوكلاء — قلب AI SDK 6
حدود تطوير AI في 2026 هي "وكلاء tool-calling،" وأكبر قفزة في AI SDK 6 هنا. مع tools وstopWhen، تحصل على حلقات "استدعِ أداة ← يقرر AI ← استدعِ الأداة التالية" مباشرةً.
import { generateText, tool, stepCountIs } from 'ai';
import { anthropic } from '@ai-sdk/anthropic';
import { z } from 'zod';
const { text, steps } = await generateText({
model: anthropic('claude-opus-4-7'),
tools: {
weather: tool({
description: 'Get the weather for a city',
inputSchema: z.object({ city: z.string() }),
execute: async ({ city }) => {
// real API call
return { temp: 22, condition: 'sunny' };
},
}),
convertToFahrenheit: tool({
description: 'Convert Celsius to Fahrenheit',
inputSchema: z.object({ celsius: z.number() }),
execute: async ({ celsius }) => celsius * 9/5 + 32,
}),
},
stopWhen: stepCountIs(5), // cap the loop at 5 steps
prompt: 'What is the weather in Tokyo, in Fahrenheit?',
});
يقوم AI الآن تلقائيًا بترتيب "weather('Tokyo') ← convertToFahrenheit(22)"، ويشغّلهما، ويدمج النتائج. steps يكشف سجل التنفيذ خطوة بخطوة.
يقدّم AI SDK 6 أيضًا صنف ToolLoopAgent لأسلوب كائني التوجّه (مكافئ لـ generateText + stopWhen). يضيف موافقة على تنفيذ الأدوات (يؤكّد إنسان تشغيل الأدوات قبل تنفيذها) وتكاملًا كاملًا مع MCP (Model Context Protocol). الاتصال بخادم MCP (انظر ما هو MCP) أصبح ثلاثة أسطر في مايو 2026.
6. التكامل مع React — واجهة دردشة في 10 أسطر مع useChat
النجم الآخر لـ AI SDK هو React Hooks. مع useChat، واجهة شبيهة بـ ChatGPT تكتب في 10 أسطر.
'use client';
import { useChat } from '@ai-sdk/react';
export default function Chat() {
const { messages, input, handleInputChange, handleSubmit } = useChat();
return (
<div>
{messages.map(m => (
<div key={m.id}>{m.role}: {m.content}</div>
))}
<form onSubmit={handleSubmit}>
<input value={input} onChange={handleInputChange} />
</form>
</div>
);
}
جانب الخادم (Next.js API Route):
// app/api/chat/route.ts
import { streamText, convertToModelMessages } from 'ai';
import { openai } from '@ai-sdk/openai';
export async function POST(req: Request) {
const { messages } = await req.json();
const result = streamText({
model: openai('gpt-5'),
messages: convertToModelMessages(messages),
});
return result.toUIMessageStreamResponse();
}
هذا وحده يمنحك اتصال SSE، وإدارة حالة الرسائل، والتحميل، ومعالجة الأخطاء — كلها تلقائية. useChat في AI SDK 6 يتعامل أيضًا أصليًّا مع واجهة الموافقة على الأدوات (ينقر المستخدم للموافقة على "هل ينبغي تشغيل هذه الأداة؟"). Vue (useChat من @ai-sdk/vue) وSvelte وSolid hooks مشحونة أيضًا.
7. تبديل المزوّدين — Claude ↔ GPT ↔ Gemini في 3 أسطر
المزوّدون الرئيسيون المدعومون رسميًا من AI SDK حتى مايو 2026:
| المزوّد | الحزمة | النماذج الرئيسية | نقاط القوة |
|---|---|---|---|
| OpenAI | @ai-sdk/openai | gpt-5, gpt-5-mini, o4 | كود، عام، توليد صور |
| Anthropic | @ai-sdk/anthropic | claude-opus-4-7, claude-sonnet-4 | نصوص طويلة، استنتاج، أمان |
@ai-sdk/google | gemini-3, gemini-2.5-flash | متعدد الوسائط، كفاءة التكلفة | |
| Mistral | @ai-sdk/mistral | mistral-large, codestral | إقامة بيانات في الاتحاد الأوروبي، كود |
| xAI | @ai-sdk/xai | grok-3 | المعلومات الفورية |
| متوافق | @ai-sdk/openai-compatible | Ollama, LM Studio, مستضاف ذاتيًا | LLM محلي / خاص |
التبديل: سطر استيراد واحد + سطر موديل واحد. AI SDK 5 أضاف ميزة المزوّد العام حيث يمكنك تحديد نموذج بمعرّف نصّي (مثل 'openai/gpt-5'). اقرنها بـ مقارنة تواريخ قطع المعرفة لـ LLM ومقارنة أسعار Claude مقابل ChatGPT لاختيار النماذج بحسب "التكلفة والأداء والمتطلبات الإقليمية" بثقة.
8. ثلاثة فخاخ في الإنتاج
AI SDK مريح، لكن هناك ثلاثة فخاخ يصطدم بها كل فريق في الإنتاج. معرفتها مسبقًا تتفادى 80% من الحوادث.
ثلاثة فخاخ في الإنتاج
tools نفسه يتصرّف مختلفًا — دعم التنفيذ المتوازي يختلف بين OpenAI وAnthropic.العلاج: اختبارات e2e لكل مزوّد، استخدم
providerOptions للإعدادات الخاصة بالمزوّد.العلاج: مرّر
req.signal كـ abortSignal؛ اكتشف انفصال العميل على الخادم.العلاج: قسّم المخططات، استخدم
z.lazy، الجأ إلى z.any() + تحقق وقت التشغيل للأجزاء الفوضوية.معرفة هذه الثلاثة تمنع نحو 80% من حوادث "يعمل على Claude، ينكسر على GPT"، و"فوترة بعد انفصال المستخدم"، و"محرر متجمّد".
ملاحظة إضافية: AI SDK هو "محوّل LLM،" وليس "بائعًا بالتجزئة لتكاليف LLM." مفتاح API لكل مزوّد هو مسؤوليتك، والفوترة تذهب إليك مباشرةً. كما هو مغطى في ما هي AI API، التكاليف تُفوتر من OpenAI/Anthropic/Google مباشرةً. AI SDK نفسه مجاني؛ لا تدفع إلا لـ LLM التي تستخدمها.
الخلاصة
"كيف يجب أن أستدعي LLM من تطبيق ويب؟" — حتى مايو 2026، تقاربت قرارات التصميم على "AI SDK، نقطة." أكثر من 20 مليون تنزيل شهري، وAI SDK 6 يأتي بـ الوكلاء وMCP وموافقة الأدوات وDevTools، ويمكنك استدعاء OpenAI/Anthropic/Google/Mistral/xAI/LLM المحلية من قاعدة كود واحدة. هذا يجمع ثلاثة أشياء معًا: "التحرّر من القفل التقني،" و"ثلث تكلفة التنفيذ،" و"إخراج منظّم آمن النوع."
البدء بسيط: ① npm install ai @ai-sdk/openai، ② عيّن مفتاح API، ③ سطر واحد generateText({ model, prompt }). حالما يعمل، أضف طبقات streamText للبث، وgenerateObject لـ JSON، وtools للوكلاء، وuseChat للواجهة. قبل الإنتاج، استوعب الفخاخ الثلاثة (فجوات ميزات المزوّدين، فوترة إلغاء البث، إثقال استنتاج الأنواع).
ذو صلة: ما هي AI API (الأساسيات)، الذكاء الاصطناعي يوصي بـ Vercel، ما هو MCP، توفير الرموز.
الأسئلة الشائعة
س. هل يجب أن أنشر على Vercel لاستخدامه؟
ج. لا. AI SDK مكتبة TypeScript خالصة — Cloudflare Workers، AWS Lambda، Deno، خادم Node.js الخاص بك، المتصفح كلها تعمل. "بنته Vercel" لا تعني "Vercel فقط."
س. هل يكلّف شيئًا؟
ج. AI SDK نفسه مجاني تمامًا، برخصة من نوع MIT. التكلفة هي فقط استخدام API لمزوّد LLM الذي تستدعيه (OpenAI/Anthropic/إلخ). لا يضيف SDK أي هامش.
س. كيف يختلف عن LangChain أو LlamaIndex؟
ج. أدوار مختلفة. AI SDK "محوّل استدعاء LLM رفيع" مُحسَّن للتكامل مع تطبيقات الويب. LangChain إطار كامل الميزات لـ "RAG وسير عمل الوكلاء." القسمة العملية: "TypeScript + التكامل في واجهة Web" ← AI SDK؛ "Python + خطوط أنابيب وكلاء معقدة" ← LangChain.
س. هل من الصعب الترحيل من كود OpenAI SDK القائم؟
ج. لاستدعاءات openai.chat.completions.create البسيطة، نحو 10 دقائق من إعادة الكتابة — استبدل بـ generateText ومرّر messages. الميزات المعقّدة (function calling، vision) تحتاج تحويل صيغة بسيطًا، لكن الوثائق تتضمّن أدلة ترحيل.
س. هل يعمل مع LLM المحلية (Ollama)؟
ج. نعم. حزمة @ai-sdk/openai-compatible تتيح لك ضرب أي نقطة طرفية API متوافقة مع OpenAI — Ollama، LM Studio، vLLM، خادمك الخاص. سير عمل "طوّر على LLM محلية، أطلِق على السحابة" يصبح تغيير baseURL واحد.