فريق أسترو (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فقط عندما تحتاج إلى واحدة.
Community Posts
No posts yet. Be the first to write about this video!
Write about this video