الكتابات/blog/2026/06
Blog10 يونيو 2026·6 دقيقة

Vercel AI SDK 6: بناء وكلاء ذكاء اصطناعي بـ TypeScript

الإصدار 6 من AI SDK يحوّل أشهر أدوات الذكاء الاصطناعي بـ TypeScript إلى إطار عمل للوكلاء. تعرّف على تجريد Agent والموافقة على الأدوات و MCP والمخرجات المنظّمة.

على مدى عامين كانت Vercel AI SDK هي الخيار الافتراضي الصامت لتطوير الذكاء الاصطناعي بلغة TypeScript. إذا قمت ببث استجابة نموذج لغوي إلى تطبيق React في 2024 أو 2025 فمن شبه المؤكد أنك استخدمت streamText و useChat. كانت مجموعة أدوات لا إطار عمل — طبقة رفيعة محايدة تجاه المزوّد فوق واجهات النماذج.

الإصدار 6 من AI SDK يغيّر هذا الوضع. فهو يحتفظ بالدوال منخفضة المستوى لكنه يضيف تجريد Agent كمواطن من الدرجة الأولى، ودعمًا مستقرًا لـ MCP، وموافقة بشرية على تنفيذ الأدوات، ومخرجات منظّمة موحّدة. باختصار، نضجت مجموعة الأدوات لتصبح شيئًا يمكنك بناء أنظمة مستقلة عليه دون التخلّي عن العناصر الأساسية التي جعلتها شائعة.

يستعرض هذا الدليل ما تغيّر فعليًا ولماذا يهمّ الفرق التي تطلق منتجات ذكاء اصطناعي اليوم.

طبقتان: الدوال والوكلاء

تقدّم المكتبة الآن مستويين من الواجهات، واختيار المناسب منهما هو أول قرار تصميمي.

في المستوى المنخفض لا يزال لديك generateText و streamText. هذه الدوال غير متحيّزة. تمرّر نموذجًا ومطالبة ومجموعة أدوات، وتتحكّم بالحلقة بنفسك عبر stopWhen:

import { generateText, tool, stepCountIs } from 'ai';
import { z } from 'zod';
 
const { text } = await generateText({
  model: 'openai/gpt-5',
  prompt: 'ماذا أفعل في عطلة نهاية الأسبوع في تونس؟',
  stopWhen: stepCountIs(5),
  tools: { weather, activities },
});

تتولّى المكتبة العمل الميكانيكي في كل خطوة: تستخرج استدعاءات الأدوات التي يريدها النموذج، وتتحقّق من صحّة الوسائط مقابل مخطّطك، وتشغّل دالتك، وتضيف النتيجة إلى المحادثة، ثم تسأل النموذج مجددًا — حتى يتحقّق شرط التوقّف. ملاحظة مهمة في الإصدار 6: تم توحيد generateObject و generateText، فيمكنك تشغيل حلقة أدوات متعددة الخطوات والحصول على كائن منظّم مكتمل النوع في النهاية.

في المستوى الأعلى تقع واجهة Agent الجديدة. بدلًا من توصيل الحلقة يدويًا في كل مرة، تُعرّف الوكيل مرة واحدة بنموذجه وتعليماته وأدواته ثم تعيد استخدامه في كل مكان.

تعريف أداة

الأدوات هي قلب أي وكيل، ونمط التعريف نظيف ولم يتغيّر. كل أداة لها وصف للنموذج، ومخطّط inputSchema بـ Zod، ودالة execute:

import { tool } from 'ai';
import { z } from 'zod';
 
export const weatherTool = tool({
  description: 'الحصول على حالة الطقس الحالية في موقع ما',
  inputSchema: z.object({
    location: z.string().describe('المدينة المطلوب معرفة طقسها'),
  }),
  execute: async ({ location }) => ({
    temperature: 72,
  }),
});

يؤدّي مخطّط Zod دورين. فهو يخبر النموذج بالشكل الدقيق للوسائط التي يجب إنتاجها، ويتحقّق ممّا يعيده النموذج قبل أن تعمل دالة execute على الإطلاق. لن تصل الوسائط الخاطئة إلى شيفرتك أبدًا.

ToolLoopAgent: الخيار الافتراضي للإنتاج

أبرز إضافة هي ToolLoopAgent، وهو تطبيق جاهز لواجهة Agent يتولّى عنك حلقة تنفيذ الأدوات بالكامل:

import { ToolLoopAgent } from 'ai';
import { weatherTool } from '@/tools/weather';
 
export const weatherAgent = new ToolLoopAgent({
  model: 'anthropic/claude-sonnet-4.5',
  instructions: 'أنت مساعد طقس مفيد.',
  tools: { weather: weatherTool },
});
 
const result = await weatherAgent.generate({
  prompt: 'ما حالة الطقس في سان فرانسيسكو؟',
});

افتراضيًا تعمل الحلقة حتى 20 خطوة — stopWhen: stepCountIs(20) — وهو هامش كافٍ لمعظم المهام الحقيقية مع ضبط السلوك الجامح. والأهم أن Agent في الإصدار 6 واجهة لا فئة مغلقة. فـ ToolLoopAgent هو الخيار الافتراضي المعقول، لكن إن احتاج منتجك تدفّق تحكّم مختلفًا فيمكنك تطبيق الواجهة بنفسك مع البقاء متصلًا ببقية المنظومة.

الموافقة البشرية على تنفيذ الأدوات

هذه هي الميزة التي تجعل الإصدار 6 صالحًا للعمليات الحسّاسة. علامة needsApproval واحدة توقف التنفيذ حتى يؤكّد إنسان. يمكنك ضبطها على true مباشرة أو تمرير دالة تقرّر بناءً على الوسائط:

export const runCommand = tool({
  description: 'تشغيل أمر في الصدفة',
  inputSchema: z.object({
    command: z.string(),
  }),
  needsApproval: async ({ command }) => command.includes('rm -rf'),
  execute: async ({ command }) => {
    // لا يُبلغ إلا بعد الموافقة
  },
});

هذا النمط الشرطي هو المستوى الصحيح للإنتاج: عمليات القراءة الروتينية تعمل تلقائيًا، ولا يُعرض على إنسان سوى الاستدعاءات الخطيرة فعلًا — حذف الملفات أو إرسال الأموال أو تعديل قاعدة بيانات. إنه الفرق بين عرض تجريبي وشيء تسمح له بلمس نظام حقيقي.

المخرجات المنظّمة والأدوات معًا

كانت الإصدارات السابقة تفرض خيارًا: إمّا استدعاء الأدوات أو الحصول على كائن منظّم. الإصدار 6 يتيح للوكيل القيام بالأمرين. تُرفق مخطّط Output.object فيستدعي الوكيل الأدوات عند الحاجة ثم يعيد نتيجة منظّمة مكتملة النوع في النهاية:

import { Output, ToolLoopAgent } from 'ai';
import { z } from 'zod';
 
const agent = new ToolLoopAgent({
  model: 'anthropic/claude-sonnet-4.5',
  tools: { weather: weatherTool },
  output: Output.object({
    schema: z.object({
      summary: z.string(),
      temperature: z.number(),
      recommendation: z.string(),
    }),
  }),
});
 
const { output } = await agent.generate({
  prompt: 'ما الطقس في سان فرانسيسكو وماذا ألبس؟',
});

قيمة output التي تستردّها مكتملة النوع تمامًا. لا تحليل ولا فحوص دفاعية ضدّ JSON معطوب — تضمن المكتبة الشكل.

دعم MCP، مستقر الآن

بروتوكول سياق النموذج (MCP) هو الطريقة المعيارية التي يصل بها الوكلاء إلى الأدوات والبيانات الخارجية. في الإصدار 6 ارتقى دعم MCP إلى مستقر وانتقل إلى حزمة مخصّصة @ai-sdk/mcp. وهو يغطّي الآن مصادقة OAuth والموارد والمطالبات والاستنباط — العناصر التي تحتاجها لربط وكيل بأنظمة حقيقية ذات صلاحيات لا بنقاط نهاية تجريبية.

أمان أنواع من الطرف إلى الطرف حتى الواجهة

لأن الوكلاء كائنات معرّفة، تستطيع المكتبة استنتاج أنواع رسائلها وحمل ذلك التحقّق حتى الواجهة الأمامية:

export type WeatherAgentUIMessage = InferAgentUIMessage<typeof weatherAgent>;

هذا السطر الواحد يعني أن مكوّنات React تعرف بدقّة ما يمكن أن تحتويه الرسالة المبثوثة. استدعاءات الأدوات والنتائج والنص كلها مكتملة النوع عبر حدود الشبكة — ضمان نادر ومفيد فعلًا في أدوات الذكاء الاصطناعي.

الترقية من الإصدار 5

إن كنت على الإصدار 5 فالترقية ليست إعادة كتابة. تطلق Vercel أداة codemod:

npx @ai-sdk/codemod v6

تتولّى الأداة الجزء الأكبر من إعادة التسمية الميكانيكية تلقائيًا. خصّص وقتًا لاختبار حلقات أدواتك وأي بثّ مخصّص، لكن الترقية مصمّمة لتُقاس بالساعات لا الأسابيع.

لماذا يهمّ هذا لفرق منطقة الشرق الأوسط وشمال أفريقيا

أكثر خصائص AI SDK استراتيجية لا علاقة لها بالوكلاء — بل أن المكتبة محايدة تجاه المزوّد. الاستدعاء نفسه لـ generateText يعمل مع Claude أو GPT أو Gemini أو نموذج مفتوح خلف بوّابة بتغيير سلسلة نصّية واحدة. بالنسبة للفرق في تونس والسعودية والمنطقة عمومًا، هذا تحوّط: ضد انقطاعات المزوّدين، وضد تقلّبات الأسعار، وضد قيود سيادة البيانات التي تجعل الاعتماد على مزوّد أجنبي واحد غير وارد لبعض الأعباء. اكتب وكيلك مرة واحدة، ووجّهه إلى نموذج يلبّي متطلبات زمن الاستجابة والتكلفة والامتثال، وبدّله حين يتغيّر الواقع.

يأخذ الإصدار 6 ذلك الأساس المرن ويضيف آلية الوكلاء فوقه — دون أن يحبسك. هذا المزيج، أكثر من أي ميزة منفردة، هو سبب جدارته بالتبنّي الآن.


تبني وكلاء ذكاء اصطناعي أو منتجات لأعمالك؟ نقطة تساعد فرق المنطقة على إطلاق ذكاء اصطناعي إنتاجي على أساس محايد تجاه المزوّد. تواصل معنا.