فريق أسترو (Astro Team) يبني سراً أفضل إطار عمل لوكلاء الذكاء الاصطناعي

BBetter Stack
Computing/SoftwareSmall Business/StartupsInternet Technology

Transcript

00:00:00هذا هو Flu، إطار عمل مفتوح المصدر لبناء وكلاء ذكاء اصطناعي من قِبل الفريق المسؤول عن Astro،
00:00:04والذي يأخذ أساساً ما يفعله Cloud Code كحزمة (harness) ويجعله قابلاً للبرمجة بنسبة 100%.
00:00:09لذا فإن أشياء مثل المهارات، الأدوات، والبيئات المعزولة (sandboxes) مدعومة جاهزة للاستخدام،
00:00:13حتى تتمكن من إنشاء حزمة وكيل متكاملة الميزات ونشرها في أي مكان ببضعة أسطر فقط من TypeScript.
00:00:19لكن لماذا قرر فريق Astro بناء إطار عمل لحزمة وكلاء في المقام الأول؟
00:00:23وما هي هذه الحيلة الرائعة التي يمكنك القيام بها مع البيئات المعزولة والتي تسمح لك بتشغيل الوكلاء بتكلفة أقل بكثير؟
00:00:28اضغط على زر الاشتراك ولنكتشف ذلك.
00:00:33تم بناء Flu بواسطة المؤسس المشارك لـ Astro، ومن المثير للسخرية،
00:00:36أنهم لم يخططوا لبناء إطار عمل لحزمة وكلاء.
00:00:39بنى فريد وفريقه Flu لتشغيل مهام سير عمل الذكاء الاصطناعي داخل مستودع GitHub الخاص بـ Astro.
00:00:44ولكن عندما حصل مهندس آخر من Amplitude عليه،
00:00:47أدرك الفريق أن هذه أداة يمكن لأي وكلاء الوصول إليها،
00:00:51وهو أمر منطقي في الواقع إذا فكرت في الأمر.
00:00:53أعني، لنلقِ نظرة على Cloud Code، على سبيل المثال.
00:00:55تحت واجهة الدردشة في الجهاز الطرفي أو واجهة المستخدم، توجد حزمة (harness)،
00:00:58لذا فهي تدعم أدوات مخصصة من خوادم MCP، وتقرأ ملفات Cloud MD،
00:01:02وتحتوي على دعم للبيئة المعزولة ودعم للمهارات القابلة لإعادة الاستخدام.
00:01:05هذا وأكثر بكثير يُمكّن النموذج من القيام بعمل حقيقي،
00:01:08وهو ما يمكن لـ Flu أن يمنحك إياه في بضعة أسطر فقط من الكود.
00:01:11إنه يفعل ذلك من خلال بنائه فوق Pi، وهو بحد ذاته حزمة وكيل بسيطة،
00:01:16نفس الشيء الذي بني عليه OpenClaw،
00:01:18ويغلف إطار عمل حقيقي حول نواة وكيل Pi.
00:01:21يقوم Flu في الواقع بشيء ذكي مع البيئات المعزولة لمساعدتك على تشغيلها بتكلفة أقل بكثير،
00:01:25وهو ما سأتحدث عنه قليلاً لاحقاً.
00:01:26ولكن إذا عدت إلى مثال Cloud Code،
00:01:28فهو يفترض وجود إنسان خلف المقود يقود الوكيل،
00:01:31وهو الحال عادة.
00:01:33لكن Flu لا يملك نفس هذا القيد.
00:01:35مع Flu، يمكنك بناء وكلاء مثل Cloud Code يتطلبون تدخلاً بشرياً،
00:01:38ولكن يمكنك أيضاً بناء مهام سير عمل لا تتطلب تدخلاً بشرياً على الإطلاق،
00:01:42وهو أمر مفيد لعمليات الوكلاء المحددة جداً
00:01:44والتي لا تحتاج إلى تغيير كبير.
00:01:46الآن، قد تفكر،
00:01:47هذا يبدو مشابهاً جداً لشيء مثل Mastra أو Vercel AI SDK،
00:01:52وسأتحدث عن الاختلافات قليلاً لاحقاً.
00:01:54في الواقع، ستكون الاختلافات أكثر وضوحاً إذا قمنا بتجربة عملية بسيطة.
00:01:57لذا دعونا نمضي قدماً ونفعل ذلك.
00:01:58للبدء، سيتعين عليك تثبيت وقت تشغيل Flu (Flu runtime)،
00:02:01وهو ما يستورده وكيلك ويعمل عليه،
00:02:04ثم سيتعين عليك تثبيت Flu CLI،
00:02:06الذي يقوم بتجميع وتقديم وكيلك.
00:02:08سيتعين عليك أيضاً إعداد مفتاح API من أحد المزودين العديدين الذين يدعمهم Pi.
00:02:13لهذه التجربة، سأستخدم Anthropic،
00:02:15ثم سيتعين عليك تشغيل flu init مع الأهداف (targets)،
00:02:18مما يؤدي إلى إنشاء ملف تهيئة Flu حتى يعرف CLI كيفية حزم مشروعك.
00:02:22يمكنك الاختيار بين Node أو Cloudflare،
00:02:24وسأتحدث عن الاختلافات في ثانية واحدة.
00:02:26لكنني قمت بهذه الخطوات بالفعل،
00:02:27لذا دعونا نلقي نظرة على شكل هذه الملفات.
00:02:30هنا الملفات النموذجية التي تحصل عليها من مشروع bun فارغ،
00:02:33وبعض هذه الملفات لا يتم استخدامها حتى.
00:02:35إذا ألقينا نظرة على index.ts، فلن يتم استخدامه لأي شيء.
00:02:38ولا ملف readme،
00:02:39ولكن ما سيتم استخدامه بالفعل هو ملف flu config.ts هذا،
00:02:42الذي يستخدم V خلف الكواليس،
00:02:45الـ CI لاستخدام Node بدلاً من Cloudflare.
00:02:47والفرق هو أن Node يستخدم خادم HTTP فوق HONO،
00:02:51وسيقوم Cloudflare بنشر مشروعك إلى عامل (worker)
00:02:53مع كائن متين (durable object) للاستمرارية.
00:02:55الآن، بعد القيام بتلك الخطوات،
00:02:56سيتعين عليك إنشاء دليل جديد،
00:02:57إما وكلاء (agents) أو مهام سير عمل (workflows).
00:03:00سنمر عبر مهام سير العمل قليلاً لاحقاً،
00:03:01لكن في الوقت الحالي، بدأت بوكيل بسيط،
00:03:03يحتوي على الكود الموجود في التوثيق.
00:03:05وهذا يحدد النموذج أساساً
00:03:06ويضيف بعض التعليمات،
00:03:08التي تضاف إلى موجه النظام (system prompt).
00:03:09وهذا كل شيء.
00:03:10هذا كل ما تحتاجه لإنشاء وكيل Flu أساسي.
00:03:13دعونا نراه قيد العمل.
00:03:14لتشغيله، يمكننا استخدام flu connect،
00:03:15الذي يقوم ببناء وتشغيل الوكيل.
00:03:17ونحن نطابق اسم ملف TS الخاص بنا،
00:03:20وهو hello world،
00:03:21قبل إعطائه معرف مثيل (instance ID)،
00:03:22والذي يمكن أن يكون أي شيء.
00:03:24لذا يمكن أن يكون حتى واحداً محلياً، اثنين، ثلاثة.
00:03:25لكن هذا مفيد إذا كان لديك الكثير من الوكلاء قيد التشغيل
00:03:27ويمكن أن يكون لكل وكيل معرف فريد خاص به.
00:03:29هذا مفيد أيضاً للنشر على Cloudflare
00:03:31لأن هذا المعرف يطابق مثيل كائنه المتين الخاص به.
00:03:35لذا الآن إذا ضغطنا على Enter،
00:03:36يمكننا رؤية أنه يقوم بتحميل التهيئة،
00:03:38وقراءة الهدف وتشغيل الوكيل الذي تم العثور عليه.
00:03:40الآن نحن لا نملك ملف وكيل MD،
00:03:42ولكن إذا فعلنا، فسيستخدم ذلك.
00:03:43والآن قام ببناء الوكيل في ملف server.mjs هذا
00:03:46وقد أعطانا القدرة على إدخال موجه.
00:03:48لذا يمكنني قول شيء مثل، أعطني نكتة عشوائية.
00:03:50وهنا يمكننا رؤية الوكيل يبدأ في التفكير،
00:03:52إنه يستجيب، لذا يقوم ببث دورة حياته.
00:03:54ثم يعطيني نكتة، ويطلب مني واحدة أخرى.
00:03:57ولكن بعد ذلك هنا أدناه، يطبع JSON النهائي،
00:03:59والذي يتكون من النص،
00:04:00بالإضافة إلى بعض رموز الإدخال والإخراج،
00:04:02تكلفة الموجه بالكامل
00:04:03والنموذج الذي تم استخدامه.
00:04:05بالطبع، يمكننا الاستمرار في التحدث إلى هذا الوكيل،
00:04:06لكن في الوقت الحالي، سأقوم بإيقافه.
00:04:08وهذا مثال على بناء وكيل أساسي مع Flu.
00:04:11دعونا نفعل شيئاً أكثر تعقيداً.
00:04:13دعونا نبني سير عمل للمساعدة في إنشاء بعض العناوين
00:04:15لفيديو YouTube هذا.
00:04:16وللقيام بذلك، مرة أخرى، نقوم بإنشاء وكيل
00:04:18مع بعض التعليمات الأكثر تعقيداً.
00:04:20وهذه المرة لدينا مهارة فعلية.
00:04:23لذا يتم استيراد المهارة هنا مع سمة استيراد مهارة (skill import).
00:04:26وهنا، لاحظ أننا لم نعد نصدر الوكيل نفسه،
00:04:29ولكن هذه المرة نقوم بتصدير دالة تسمى run.
00:04:31وما تفعله هو تهيئة الوكيل
00:04:34لسير العمل ثم تفتح جلسة في الحزمة (harness).
00:04:36الآن، ما يحدث بعد ذلك مثير للاهتمام للغاية.
00:04:38لذا هنا، ما يحدث هو أننا نحصل على المسار
00:04:41من الحمولة (payload)، التي تم تعيينها هنا
00:04:43في نوع سياق flux هذا.
00:04:44لذا إذا قمنا بتغيير الاسم هنا إلى file،
00:04:46سنحصل على خطأ في النوع (type error).
00:04:47وهنا يحصل على الملف،
00:04:49الذي أسميته نصاً (script)،
00:04:50وتمرير ذلك كموجه.
00:04:52لذا كل هذا سيكون منطقياً
00:04:53إذا ألقينا نظرة على التعليمات هنا،
00:04:55التي نخبره فيها بدراسة النص
00:04:57وإعطائي 10 عناوين YouTube مثيرة (clickbait)
00:04:59باستخدام مهارة تقييم العنوان (title score skill) لترتيبها.
00:05:01لذا دعونا نرى ما إذا كان هذا يعمل.
00:05:02ولكن قبل أن نقوم بذلك،
00:05:03أريد أن أجعل من الواضح أن مهام سير العمل
00:05:04موجودة في دليل مهام سير العمل (workflow directory)
00:05:06والمهارات موجودة في دليل المهارات (skills directory)
00:05:08من جذر المشروع.
00:05:09ولتشغيل سير العمل هذا،
00:05:10نحتاج إلى تشغيل flu run مع اسم سير العمل الخاص بنا.
00:05:13في حالتي، هو YT titles،
00:05:14متبوعاً بالهدف وحمولة JSON،
00:05:16وهو المسار لهذا النص.
00:05:18لذا إذا ضغطنا على Enter،
00:05:19سنرى أننا حصلنا على معرف سير عمل.
00:05:21وهنا يفعل شيئاً غريباً بعض الشيء.
00:05:23إنه يبحث في الواقع عن المهارة،
00:05:25على الرغم من أنني حددتها سابقاً.
00:05:27والآن في هذا الاستدلال،
00:05:27يخبرني أنه لا توجد أي ملفات في نظام الملفات.
00:05:30لماذا يفعل ذلك؟
00:05:31لذا افتراضياً،
00:05:32يقوم Flu بتشغيل الوكلاء في بيئة معزولة باستخدام bash فقط.
00:05:35كل ما يمكنه الوصول إليه هو وصف المهارات،
00:05:37الذي تم تسجيله هنا،
00:05:39لكنه لا يملك الوصول إلى أي من هذه الملفات
00:05:42المتعلقة بالمهارة.
00:05:43والمهارة بحد ذاتها، إذا ألقينا نظرة عليها،
00:05:44فهي تقوم في الواقع بتشغيل نص Python باستخدام bash
00:05:47من أجل التوصل إلى نتيجة دقيقة بنمط vidIQ
00:05:50لعنوان YouTube.
00:05:51لذا لإصلاح ذلك،
00:05:52سأقوم باستيراد local من flu runtime node،
00:05:54الذي يخبر flu بتشغيل الوكيل على نظامي المحلي
00:05:57بحيث يكون لديه وصول إلى جميع ملفاتي
00:05:59ويمكنه تشغيل نصوص Python.
00:06:01إذا كنت مهتماً بالأمن،
00:06:02سأشرح كيف يمكنك تجاوز هذا
00:06:03لاحقاً في الفيديو.
00:06:04لكننا سنقوم أيضاً بتغيير
00:06:05دليل العمل الحالي إلى المهارة
00:06:07داخل دليل المهارات في هذا المشروع.
00:06:10بحيث لا يضطر flu للبحث في الأنحاء
00:06:11للعثور على الملفات الدقيقة التي يحتاجها.
00:06:13والآن عندما أقوم بتشغيل سير العمل هذا،
00:06:15يمكننا رؤية أن flu يقرأ فوراً ملف المهارة MD
00:06:17ويتمكن من إنشاء العناوين الـ 10 المثيرة
00:06:20مع نتيجة لكل منها.
00:06:21الآن، إذا كنت لا ترغب في منح وكيلك
00:06:22أو سير عمل وصولاً إلى نظامك المحلي،
00:06:25ما يمكنك فعله بدلاً من ذلك
00:06:26هو إنشاء أداة مخصصة من ملف Python.
00:06:28لذا هنا أقوم بتحميل ملف Python في المهارة
00:06:30وإنشاء أداة تسمى score title،
00:06:33التي تستخدم value bots للتحقق من المعلمات
00:06:35ثم تشغيل نص Python.
00:06:37ثم يمكننا تسجيل هذه الأداة داخل وكيلنا
00:06:40ويجب أن يعمل كل شيء كما هو متوقع.
00:06:42ولكن الآن دعونا نعود إلى المشروع السابق
00:06:44ونقول إننا نريد تشغيله بناءً على استدعاء HTTP post.
00:06:47حسناً، هناك شيء واحد فقط نحتاج إلى القيام به لتمكين ذلك.
00:06:50وهو ببساطة إضافة البرمجيات الوسيطة للجذر (root middleware).
00:06:52الآن، كل ما علينا فعله هو بناء مشروع flu،
00:06:54وتحديد هدفنا، ومنفذ اختياري،
00:06:56ثم تشغيل ملف الخادم الخاص بنا.
00:06:58والآن هو يستمع على المنفذ الذي حددناه.
00:07:00لاحظ أن ملف server.js
00:07:01يضمن أي وكلاء أو مهام سير عمل لدينا.
00:07:03لذا نحن نحتاج فقط إلى هذا الملف
00:07:05إذا أردنا نشره في أي مكان يدعم Node.js.
00:07:07الآن يمكنني تشغيل curl مع أسلوب post
00:07:09إلى المنفذ الذي تم تحديده،
00:07:11واختيار سير عمل وإعطائه بعض البيانات،
00:07:13مما يعطينا معرف سير عمل.
00:07:14ثم إذا قمنا بـ curl لمهام سير العمل،
00:07:16مع تحديد معرف سير العمل الخاص بنا
00:07:18والتوجيه إلى JQ فقط لجعل قراءته أسهل،
00:07:21يمكننا رؤية معلومات حول سير العمل الخاص بنا
00:07:23وملخص للنتائج.
00:07:25بالطبع، يدعم Flu الـ WebSockets بدلاً من HTTP
00:07:27إذا كنت ترغب في بث معلومات سير العمل.
00:07:29الآن، كالمعتاد، هناك العديد من الميزات التي يمتلكها Flu
00:07:31التي لم يتسع الوقت لتغطيتها،
00:07:33مثل ملفات تعريف الوكيل (agent profiles) للوكلاء القابلين لإعادة الاستخدام،
00:07:35دعم Daytona، بيئات Cloudflare المعزولة،
00:07:37أو أي بيئة معزولة أخرى بمجرد استخدام URL،
00:07:40إضافة مسارات مخصصة للمصادقة أو فحوصات الصحة،
00:07:42وحتى دعم الوكلاء الفرعيين.
00:07:44ولكن كيف يقارن هذا
00:07:45بإطار عمل وكيل ذكاء اصطناعي آخر مفتوح المصدر مثل Mastra؟
00:07:48حسناً، المرة الأخيرة التي استخدمت فيها Mastra
00:07:49كانت عندما قمت بهذا الفيديو،
00:07:50الذي يمكنك إيقاف هذا الفيديو مؤقتاً والذهاب لمشاهدته
00:07:52إذا كنت ترغب في تذكير بماهية ذلك.
00:07:54ولكن عندما استخدمته،
00:07:55كان لا يزال عليك إعداد الجلسات يدوياً،
00:07:58الذاكرة، البيئة المعزولة، وتحميل الأدوات بنفسك.
00:08:01لقد كانت عملية أكثر دقة خطوة بخطوة،
00:08:03ولست متأكداً مما إذا كان ذلك قد تغير
00:08:05ليصبح أكثر بساطة،
00:08:06لكنني أعتقد أن النهج الذي يتخذه Flu
00:08:08مختلف تماماً.
00:08:10إنه نهج يعتمد على الحزمة أولاً (harness-first)
00:08:11ويفترض أنك ستستخدم
00:08:13هذه الميزات منذ البداية.
00:08:14بالحديث عن البيئات المعزولة،
00:08:16يقوم Flu في الواقع بشيء ذكي جداً بها.
00:08:18لذا يحصل كل وكيل على بيئته المعزولة الخاصة افتراضياً،
00:08:21وهو ما شرحته سابقاً في التجربة،
00:08:22لكن هذه البيئة المعزولة مدعومة بـ just Bash الخاصة بـ Vercel،
00:08:25التي تعيد تنفيذ Bash في TypeScript.
00:08:27لذا فهي تشغل هذه البيئة المعزولة في الذاكرة
00:08:29بدلاً من حاوية حقيقية،
00:08:31مما يعني أنك تحصل على وصول إلى أدوات grep و glob و read
00:08:34دون الدفع مقابل حاوية في كل مرة،
00:08:35والتي يجب أن تقوم بتمهيد جهاز Linux كامل
00:08:38قبل أن تتمكن من فعل أي شيء.
00:08:40مما يعني أن Flu يشغل آلاف الوكلاء
00:08:41مقابل لا شيء تقريباً،
00:08:43ويمكنك اختيار استخدام حاوية حقيقية
00:08:44فقط عندما تحتاج إلى واحدة.

Key Takeaway

يوفر إطار العمل Flu وسيلة فعالة لبناء وكلاء ذكاء اصطناعي بنظام TypeScript من خلال تقليل تكاليف البيئات المعزولة عبر محاكاتها في الذاكرة وتوفير دعم جاهز للمهارات والعمليات المؤتمتة.

Highlights

  • يُعد Flu إطار عمل مفتوح المصدر يعتمد على TypeScript لبناء وكلاء ذكاء اصطناعي قابلين للبرمجة بنسبة 100%.

  • يعتمد Flu تقنياً على Pi كنواة لوكيل بسيط، ويُغلفها بإطار عمل يدعم مهارات وأدوات مخصصة.

  • يعمل Flu على تقليل تكاليف التشغيل من خلال محاكاة بيئات Bash المعزولة في الذاكرة باستخدام تقنية TypeScript بدلاً من تشغيل حاويات Linux كاملة.

  • يدعم الإطار خيارات نشر متنوعة مثل Node.js باستخدام خادم HTTP فوق Hono، أو Cloudflare مع كائنات متينة للاستمرارية.

  • يتيح الإطار بناء وكلاء يتطلبون تدخلاً بشرياً، ومهام سير عمل آلية بالكامل لا تحتاج إلى تدخل بشري.

  • يُمكن تشغيل الوكلاء محلياً مع وصول كامل لنظام الملفات، أو عزلهم داخل بيئات محددة باستخدام أدوات مخصصة.

Timeline

مقدمة حول إطار عمل Flu

  • يُحول Flu قدرات Cloud Code إلى حزمة برمجية قابلة للبرمجة بالكامل.
  • يُدعم الإطار مهارات، أدوات، وبيئات معزولة جاهزة للاستخدام.
  • يستند بناء الإطار إلى نواة الوكيل البسيطة Pi.

صُمم Flu لتمكين المطورين من إنشاء حزم وكلاء متكاملة باستخدام TypeScript فقط. يعالج الإطار الحاجة إلى أدوات مخصصة وبيئات معزولة ومهارات قابلة لإعادة الاستخدام، مما يسمح للنموذج بأداء مهام حقيقية. يغلف Flu نواة Pi لتقديم إطار عمل متكامل يتجاوز القيود التقليدية التي تتطلب تدخلاً بشرياً مستمراً.

إعداد وتجربة بناء وكيل بسيط

  • يتطلب البدء تثبيت Flu runtime و Flu CLI.
  • يُحدد ملف flu config.ts هدف المشروع سواء كان Node أو Cloudflare.
  • يُمكن تشغيل الوكيل محلياً باستخدام الأمر flu connect مع معرف مثيل فريد.

تتضمن عملية البدء إعداد مفتاح API واختيار بيئة النشر المفضلة. عند بناء وكيل أساسي، يُستخدم ملف التهيئة لضبط الإعدادات، ويُستخدم معرف المثيل (instance ID) لتمييز الوكلاء قيد التشغيل. توفر المخرجات معلومات مفصلة مثل JSON النهائي، تكلفة الموجه، والنموذج المستخدم.

سير العمل المتقدم والبيئات المعزولة

  • يُمكن دمج مهارات مخصصة عبر دليل المهارات في جذر المشروع.
  • يُوفر Flu وصولاً اختيارياً للنظام المحلي لتشغيل نصوص Python أو ملفات خارجية.
  • يُمكن تجنب الوصول للنظام المحلي بإنشاء أدوات مخصصة تعتمد على ملفات Python.

يُتيح Flu بناء مهام سير عمل معقدة من خلال دمج مهارات خاصة تُنفذ داخل بيئة الوكيل. افتراضياً، يعمل Flu في بيئة معزولة محدودة، ولكن يمكن للمطورين منح الوكيل وصولاً محلياً عند الحاجة. تضمن أدوات مخصصة عبر Value Bots التحقق من المعلمات وتشغيل نصوص برمجية معينة بأمان.

النشر، التكامل، ومقارنة التقنيات

  • يُدعم النشر عبر HTTP باستخدام Node.js أو WebSockets للبث المباشر.
  • يُشغل Flu بيئات Bash معزولة في الذاكرة لتوفير التكاليف.
  • يختلف Flu عن الأطر الأخرى بتركيزه على نهج 'الحزمة أولاً' (harness-first).

يسمح الإطار بنشر المشاريع في أي مكان يدعم Node.js عبر البرمجيات الوسيطة للجذر. يتميز Flu بكفاءته في إدارة الموارد من خلال تنفيذ بيئات Bash باستخدام TypeScript، مما يغني عن تشغيل حاويات ثقيلة. هذا النهج يقلل التكاليف بشكل كبير ويسمح بتشغيل آلاف الوكلاء في وقت واحد.

Community Posts

No posts yet. Be the first to write about this video!

Write about this video