GitHub لم يُصمم لوكلاء الذكاء الاصطناعي (لذا قامت Cloudflare ببناء خاصتها)

BBetter Stack
Computing/SoftwareSmall Business/StartupsInternet Technology

Transcript

00:00:00تعمل Cloudflow على شيء يسمى Artifacts، وهو نظام ملفات موزع
00:00:05متوافق مع Git ومصمم للوكلاء (agents) في المقام الأول، ويسمح لك بإنشاء أو نسخ
00:00:10أو حذف آلاف المستودعات برمجياً، بغض النظر عن حجمها، لمهام مثل
00:00:15مراجعات طلبات السحب (PR) المتوازية، وإعادة هيكلة قواعد الكود الكبيرة، ومساحات عمل الوكلاء لكل جلسة.
00:00:20ولكن بما أن هذا مبني فوق كائنات متينة (durable objects)، هل يعني ذلك أنه يجب عليك استخدام JavaScript
00:00:25وأنه لا يمكنك الوصول إلى أوامر shell لتشغيل Git؟
00:00:28اشترك في القناة لنكتشف ذلك!
00:00:33تم تصميم GitHub للبشر، وليس للوكلاء، مما يعني أنهم لا يحتاجون إلى أي من الجوانب
00:00:37الاجتماعية، مثل المتابعين وبدء النقاشات، لكن الوكلاء بارعون جداً في استخدام Git، فهو موجود في
00:00:42بيانات تدريبهم.
00:00:43لذا، قامت Cloudflare ببناء تطبيق Git أساسي بلغة Zig، وقامت بتجميعه إلى Wasm ووضعته على
00:00:49كائن متين (durable object) ليعمل كخادم Git.
00:00:52في هذه الأثناء، يمكن أن يكون العميل نفسه أي شيء تريده، مثل عامل (worker) يستخدم isomorphic Git
00:00:57داخل عامل أو باستخدام بروتوكول Git وحتى عميل HTTP حتى تتمكن من الاتصال
00:01:03به للأشياء التي لا تستخدم JavaScript.
00:01:05الآن للأسف في وقت تسجيل هذا الفيديو، ليس لدي حق الوصول إلى Artifacts لأنه
00:01:10في مرحلة تجريبية خاصة، ولكن هناك الكثير من الوثائق حوله، مما يعني أنني أستطيع إنشاء عرض توضيحي بـ
00:01:15كود من تلك الوثائق وربما عندما يتم إصداره في النسخة التجريبية العامة يمكنك التحقق
00:01:19مما إذا كان الكود الخاص بي يعمل بالفعل.
00:01:20لذا ما سنفعله هو بناء أداة تأخذ قائمة مهام لمستودع معين
00:01:24وتشغل كل هذه المهام بالتوازي عن طريق نسخ المستودع عدة مرات وتشغيل
00:01:29كل مهمة على ملف الأثر (artifact) الخاص بها في مستودع سحابي على كائن متين.
00:01:34لنرى كيف يعمل هذا.
00:01:35لقد بدأت باتباع الوثائق الخاصة بـ Artifacts في دليل البدء للعاملين (workers)،
00:01:39لذا استخدمت هذا الأمر، والنص هنا بعد هذا الأمر هو مجرد اسم المشروع
00:01:44ويمكن أن يكون أي شيء.
00:01:45لذا اتبعت كل هذه الخطوات، والتي انتهت بمنحي كود العامل الأساسي هذا.
00:01:49والعاملون (workers) لـ Artifacts أكثر كفاءة قليلاً من استخدام REST API لأنهم
00:01:53يقومون بعدد أقل من الرحلات ذهاباً وإياباً.
00:01:55بعد ذلك، ستحتاج إلى إضافة روابط Artifacts إلى ملف wrangle.jsonc أو toml الخاص بك،
00:02:00ثم أعد تشغيل الأنواع.
00:02:02تركز الوثائق هنا على إنشاء مستودع جديد، لذا فهي تستخدم رابط Artifacts
00:02:07مع طريقة الإنشاء واسم المستودع.
00:02:09إنه ينشئ الاسم، مما يمنحه الرمز (token) والبعيد (remote).
00:02:13لذا فالبعيد هو موقع الملف (artifact) والرمز أو رمز المصادقة مطلوب أيضاً
00:02:17لمنحك حق الوصول إليه.
00:02:18وبالطبع يمكنك استخدام بروتوكول git باستخدام البعيد والرمز للتفاعل
00:02:22مع ملف الأثر الخاص بك.
00:02:23لكننا سنفعل شيئاً مختلفاً.
00:02:25بدلاً من إنشاء مستودع جديد تماماً في كائن متين لـ Artifacts، سنقوم أولاً
00:02:29بالتحقق مما إذا كان هناك مستودع موجود يسمى baseline.
00:02:31ثم إذا لم يكن موجوداً، فسنقوم باستيراد مستودع git ثم أعطيته
00:02:35اسم baseline وأعدت تلك القيمة هنا.
00:02:39وبالطبع، إذا راجعت وثائق API الخاصة بربط العاملين، فسترى المزيد من
00:02:43المعلمات التي يمكن إضافتها إلى طريقة الاستيراد.
00:02:45ولكن بعد أن أعدنا المستودع الموجود، يمكننا القيام ببعض الأشياء الرائعة جداً
00:02:49به.
00:02:50إليك المهام التي أود القيام بها على المستودع، وبالطبع قمت بترميزها برمجياً (hard coded)
00:02:53ولكن يمكن إضافتها كمدخل أو نوع من واجهة المستخدم.
00:02:56وهنا داخل التصدير الافتراضي للعامل، لدي حزمة Anthropic SDK بالإضافة إلى
00:03:00مستودع baseline الخاص بي.
00:03:02وسأقوم بالدوران خلال جميع المهام وهنا، أقوم بنسخ المستودع بـ
00:03:06هذا الاسم.
00:03:07ثم لدينا هذه الوظيفة، التي سأمر عليها لاحقاً، لكن هذا يشغل المهمة داخل
00:03:10المستودع المنسوخ ويجعل الوكيل يقوم بإجراء التغيير مع إرجاع ملخص الوكيل.
00:03:15لذا آخر شيء قاله الوكيل، وبعد كل حلقة for، أقوم بإرجاع هذه
00:03:19المعلومات.
00:03:20سأقوم بإدراج اسم المهمة، واسم النسخة، والبعيد، والرمز
00:03:23حتى نتمكن من الوصول إليه وقتما نريد لمعرفة ما إذا كان التغيير جيداً وملخص
00:03:27ما تم إنجازه.
00:03:28لذا في الوقت الحالي، لا تمنحك روابط العاملين القدرة على السحب (pull) والالتزام (commit) والدفع (push).
00:03:33لذا في الكود الخاص بي، اضطررت للقيام بذلك باستخدام isomorphic FET ثم استخدام نظام تخزين في الذاكرة
00:03:38لتخزين التغييرات مؤقتاً.
00:03:39لذا بالعودة إلى كود الوكيل، نقوم بإنشاء نظام الملفات الخاص بنا في الذاكرة، ثم لدينا
00:03:43مطالبة نظام تخبر الوكيل بإجراء التغييرات ذات الصلة ثم الالتزام (commit) بـ
00:03:47الكود الخاص بهم.
00:03:48لذا سنقوم باستنساخ المستودع المنسوخ باستخدام البعيد الذي تم توفيره بالإضافة إلى
00:03:51الرمز.
00:03:52ثم نحدد بعض الأدوات، مثل القراءة والكتابة والالتزام (commit).
00:03:55هنا نختار النموذج ونعطي نموذجنا مطالبة نظام، ثم نمرر المهمة
00:03:59كرسالة مستخدم.
00:04:00وبقية الكود هي حلقة الوكيل القياسية الخاصة بك.
00:04:02لذا إذا كان هناك استدعاء للأداة، توقف عن التفكير وقم بتشغيل استدعاء الأداة، في حالتنا، القراءة أو الكتابة
00:04:07أو الالتزام، والذي يحدث أيضاً لدفع الكود بعد الالتزام.
00:04:10وفائدة وجود ملف أثر (artifact) هي أن كل هذا الكود سيتواجد في الكائن المتين،
00:04:14المخزن في قاعدة بيانات SQLite الخاصة بالكائن، وإذا تعطل الكائن المتين، يمكن استرجاع المعلومات
00:04:20من قاعدة بيانات SQLite في أي لحظة إذا عاد للعمل.
00:04:23ثم هنا بالأسفل، نواصل تفكير النموذج بعد استدعاء الأداة قبل إرجاع
00:04:27أحدث رسالة من النموذج.
00:04:29أعلم أنه من الصعب جداً تصور كل هذا يحدث دون أن أكون قادراً
00:04:32على تشغيل الكود، ولكن نأمل أن تتمكن نوعاً ما من رؤية ما يمكن القيام به باستخدام ملفات الأثر (artifacts) و
00:04:37إمكاناتها الكاملة.
00:04:38تخيل لو كان بإمكانك الحصول على واجهة مستخدم لرؤية كل التغييرات التي تحدث في هذه الملفات
00:04:42ويمكنك التواصل مع وكلاء فرديين أو وكيل تنسيق واحد لإجراء تغييرات
00:04:46على المستودعات المختلفة.
00:04:48وبالحديث عن وكيل التنسيق، يمكننا الحصول على عامل واحد يمكنه تنسيق
00:04:52جميع هذه التغييرات التي تحدث ودمجها في المستودع الرئيسي بعد أن يقوم وكيل المراجعة
00:04:56بمراجعة الكود.
00:04:57يمكننا حتى الجمع بين ملفات الأثر (artifacts) والعاملين الديناميكيين حتى يتمكن الوكلاء من تشغيل الكود الذي
00:05:02قاموا بتغييره لمعرفة ما إذا كان يعمل.
00:05:03وإذا لم يكن كود JavaScript، فيمكننا استخدام بيئات Cloudflare الرملية لتشغيل أي لغة
00:05:07نريدها وحتى تشغيل أوامر shell.
00:05:09ناهيك عن وجود خيار متصفح Cloudflare الذي يشغل متصفح puppeteer لـ
00:05:13النموذج لينظر إليه ويرى ما إذا كان الكود الذي تم تنفيذه صحيحاً إذا كان تغييراً في الواجهة الأمامية.
00:05:18بصراحة، لقد استمتعت كثيراً بالتفكير في إمكانيات ملفات الأثر (artifacts)، على الرغم من أنني
00:05:21لا أستطيع تشغيلها بعد.
00:05:22لكن شيئاً واحداً لاحظته هو عدم وجود أمر git diff.
00:05:25إنه غير مكشوف في واجهة برمجة تطبيقات روابط العاملين أو في isomorphic git.
00:05:30لذا ربما الطريقة الوحيدة للقيام بـ git diff هي من خلال بروتوكول git، أو قد يضيفونه في
00:05:35المستقبل.
00:05:36على أي حال، في الوقت الحالي، إذا كنت تريد القيام بذلك دون استخدام بروتوكول git، أعتقد أنه يمكنك استخدام
00:05:40isomorphic git باستخدام git log للعثور على شجرة git للمضي قدماً والمشي أسفل الشجرة لـ
00:05:45مقارنة الاختلافات.
00:05:46بغض النظر، أعتقد أن هذا إصدار رائع جداً من Cloudflare.
00:05:50وعلى الرغم من وجود أدوات نظام ملفات أخرى مثل S3 files و ZeroFS و JuiceFS التي
00:05:55موجودة بالفعل، لا أعتقد أن هذه الخيارات متوافقة مع git، وهي ميزة رائعة جداً
00:05:59وأكثر ملاءمة للوكلاء.
00:06:01وبالحديث عن S3، إذا كنت ترغب في تشغيله محلياً على جهازك، فراجع
00:06:05هذا الفيديو بواسطة جوش الذي يخبرك بالضبط بكيفية القيام بذلك.

Key Takeaway

يمثل نظام Artifacts من Cloudflare نقلة نوعية في التعامل مع مستودعات الكود برمجياً، حيث يوفر بنية تحتية متوافقة مع Git تسمح لوكلاء الذكاء الاصطناعي بإدارة وتعديل الآلاف من قواعد الكود بالتوازي داخل بيئة كائنات متينة.

Highlights

Artifacts يوفر نظام ملفات موزعاً متوافقاً مع Git ومصمماً خصيصاً لوكلاء الذكاء الاصطناعي.

تعتمد بنية Artifacts على كائنات متينة (Durable Objects) وقاعدة بيانات SQLite لضمان متانة البيانات وإمكانية استرجاعها.

يسمح النظام برمجياً بإنشاء أو نسخ أو حذف آلاف المستودعات في آن واحد، مما يدعم مراجعات طلبات السحب المتوازية.

استخدام لغة Zig وتجميعها إلى Wasm يتيح تشغيل خادم Git أساسي ضمن بيئة Cloudflare.

يسمح التكامل مع بيئات Cloudflare الرملية بتنفيذ أكواد البرمجة وأوامر shell لأي لغة برمجية يحتاجها الوكيل.

Timeline

مفهوم نظام ملفات Artifacts المخصص للوكلاء

  • يختلف تصميم Artifacts عن GitHub في كونه موجهاً للوكلاء بدلاً من البشر.
  • يعتمد النظام على كائنات متينة (Durable Objects) لتعزيز الأداء وتوسيع نطاق العمليات.
  • تتضمن بنية النظام خادم Git أساسياً مكتوباً بلغة Zig ومجمعاً إلى WebAssembly.

صُمم GitHub في الأساس للتعامل البشري، بينما يحتاج وكلاء الذكاء الاصطناعي إلى واجهات برمجية أسرع وأكثر كفاءة للتعامل مع Git. توفر Cloudflare من خلال Artifacts نظاماً يتيح إدارة المستودعات برمجياً بشكل كامل، مع دعم لمختلف البروتوكولات والعملاء، مما يسمح للوكلاء بأداء مهام مثل إعادة هيكلة الكود ومراجعة طلبات السحب بشكل مستقل ومتوازٍ.

بناء أداة معالجة المهام المتوازية

  • يتم استيراد المستودع الأساسي (baseline) كنسخة أولية عند بدء المهام.
  • تُنفذ كل مهمة داخل نسخة منفصلة من المستودع على كائن متين خاص بها.
  • يتم استخدام واجهات برمجية لربط العمال (workers) مع توفير رموز مصادقة لكل مستودع.

يركز التنفيذ العملي على أتمتة المهام من خلال التحقق أولاً من وجود مستودع أساسي، ثم نسخه لإنشاء بيئة معزولة لكل مهمة. يقلل هذا النهج من الرحلات ذهاباً وإياباً في طلبات الشبكة مقارنة بـ REST API التقليدي، مما يزيد من كفاءة تنفيذ العمليات المتوازية عبر الرموز المخصصة للمستودعات.

تكامل الوكلاء وتنفيذ التغييرات

  • يستخدم الوكلاء نظام ملفات في الذاكرة لتخزين التغييرات قبل الالتزام (commit).
  • تُخزن البيانات في SQLite داخل الكائن المتين لضمان استمراريتها في حال حدوث عطل.
  • يمكن الجمع بين Artifacts والبيئات الرملية لتشغيل أكواد بلغات مختلفة غير JavaScript.

يعتمد الوكلاء على مكتبات مثل isomorphic git للقيام بعمليات القراءة والكتابة والالتزام مباشرة داخل المستودعات المنسوخة. يضيف التكامل مع بيئات Cloudflare الرملية إمكانيات تنفيذية واسعة، حيث يمكن للوكيل تشغيل أوامر shell أو حتى استخدام متصفح puppeteer للتحقق من واجهات المستخدم، مما يجعل Artifacts أداة متكاملة لدورة حياة تطوير البرمجيات بواسطة الذكاء الاصطناعي.

Community Posts

View all posts