تجربة الذكاء الاصطناعي

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

تم تصميم معظم عمليات تكامل الذكاء الاصطناعي في التطبيقات بطريقة يمكن التنبؤ بها. يضيف المنتج زر شرارة، ويرسل طلبًا إلى النموذج الخاص به، ويعرض الاستجابة في الشريط الجانبي.

هناك خيار مشترك آخر. يوفر التطبيق خادم MCP، ويقوم المستخدم بفتح ChatGPT أو Claude أو وكيل آخر ويطلب منه العمل مع بيانات التطبيق. وهذا يمنح الوكيل أدوات جيدة، لكن المحادثة تحدث في مكان آخر. يتعين عليك مغادرة المحرر وشرح ما هو مفتوح حاليًا والعودة مرة أخرى والتحقق من النتيجة.

لقد سئمت من التبديل بين الدردشة والمحرر، وخطر ببالي فكرة: ماذا لو كان بإمكاني تجنب ذلك تمامًا؟

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

يظل الوكيل حيث يعيش بالفعل: في ChatGPT، أو Claude، أو Codex، أو أي عميل آخر متوافق مع MCP. يحتفظ بالنموذج والاشتراك والذاكرة والإعدادات والأدوات المتاحة. يوفر Romergo فقط مساحة عمل وسياقًا حاليًا وأدوات متخصصة لتحرير المشروع.

بعد الاتصال، يمكن للمستخدم الكتابة إلى الوكيل مباشرة من Builder:

يتم إرجاع الإجابات والأسئلة والحالات المتوسطة إلى نفس اللوحة. لا تعرض اللوحة النص فحسب، بل تعرض أيضًا دورة المهمة بأكملها: تم استلام أمر، أو تعيينه إلى وكيل، أو يتم تنفيذ الأدوات، أو التأكيد مطلوب، أو اكتمال المهمة، أو حدث خطأ. لم تعد بحاجة إلى مغادرة المحرر.

لقد بدأت كتجربة

لم يكن لدي أي نية لاختراع بروتوكول جديد أو الخروج بفئة منتج جديدة. أردت اختبار فكرة واحدة بسيطة: هل يمكن لوكيل المستخدم الشخصي ألا يتحكم في Romergo خارجيًا عبر MCP فحسب، بل يمكنه الانضمام مؤقتًا إلى جلسة مباشرة داخل المحرر؟

النسخة الأولى كانت تجريبية. لدهشتي، كان الأمر جيدًا بما يكفي بالنسبة لي لبدء استخدامه بنفسي.

يمكن رسم أقصر مخطط على النحو التالي:

Personal AI agent  <->  MCP  <->  Romergo Builder

لكن الإشارة في كلا الاتجاهين مهمة.

تبدأ مكالمة MCP النموذجية عند الوكيل: يقرر الوكيل الاتصال بالتطبيق ويستدعي أداته. في تجربتي، يستطيع روميرجو أيضًا بدء العمل. يكتب المستخدم أمرًا في Builder، ويضعه Romergo في قناة آمنة، ويتلقى الوكيل المتصل بالفعل الأمر عبر MCP.

يستخدم الوكيل بعد ذلك أدوات Romergo المعتادة لقراءة المشروع أو تعديله وإرجاع النتيجة إلى Builder من خلال نفس القناة.

يؤدي هذا إلى إنشاء حلقة مغلقة:

1. User -> Builder panel: "Replace the music in this chapter"
2. Builder -> authenticated channel: command + current page + selection
3. Personal agent -> MCP: wait for the next Builder command
4. Agent -> Romergo MCP tools: inspect and edit the project
5. Agent -> MCP channel: status, question, result, or error
6. Builder panel -> User: live response from the personal agent

لا يقوم Romergo بتشغيل النموذج في أي من هذه الخطوات.

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

يظهر السلوك ثنائي الاتجاه على مستوى جلسة التطبيق، وليس من خلال نقل MCP جديد. هذا التمييز مهم: من الأفضل فهم التنفيذ الحالي على أنه عقد جلسة صغيرة مبني على مكالمات MCP القياسية.

كيف يدخل الوكيل إلى الجلسة

يقوم المنشئ بإنشاء رمز قناة مؤقت. يقوم المستخدم بنسخ مطالبة البدء القصيرة في دردشة الذكاء الاصطناعي الخاصة به بشيء مثل هذا:

انضم إلى قناة Romergo Builder الخاصة بي. قم بتشغيل كل أمر جديد مرة واحدة، وأرسل النتيجة أو السؤال مرة أخرى إلى Builder، واستمر في الانتظار حتى أطلب منك صراحةً التوقف.

يقوم الوكيل بعد ذلك باستدعاء أداة MCP romergo_join_builder_channel وتمرير الكود. هذه مصافحة: يقوم Romergo بالتحقق من جلسة OAuth ومالك القناة وتاريخ انتهاء صلاحيتها، ثم يقوم بإرجاع حالة المحادثة ومؤشر الأمر الأخير.

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

يتم وضع علامة على كافة السياقات المرفقة كمحتوى تطبيق غير موثوق به. هذه بيانات للعمل، وليست استمرارًا لتعليمات التحكم الخاصة بالوكيل.

يقوم الوكيل بتنفيذ المهمة باستخدام أدوات Romergo MCP الموجودة. على سبيل المثال، يمكنه قراءة المشروع والفصل، والعثور على الأصول، وتغيير المشهد، ثم التحقق من النتيجة المحفوظة.

أثناء العمل، يمكن للوكيل الاتصال بـ romergo_report_builder_event وإرسال اللوحة:

ترتبط الاستجابة بـ commandId، وتتم قراءة الأمر التالي من آخر تسلسل تمت معالجته. عند الإصدار لأول مرة، تقوم واجهة برمجة التطبيقات تلقائيًا بتعيين الأمر لعميل client_id OAuth. لن يتمكن وكيل متصل آخر من التقاط نفس المهمة في نفس الوقت. يساعد المؤشر على الاستمرار بعد انتهاء المهلة أو إعادة الاتصال، ويتم حماية التأكيدات لمرة واحدة لاستدعاءات أداة معينة بواسطة بصمة وسيطة ولا يمكن إعادة استخدامها لإجراء آخر.

الحقوق تنتمي إلى الغرفة، وليس الموجه

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

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

هذا ليس مجرد نص في موجه البداية. يتحقق مجمّع الخادم المشترك من النطاق قبل استدعاء أداة التعديل MCP. إذا تم تمكين التأكيد الإضافي، يعرض Builder الإجراء الدقيق باستخدام زري "السماح مرة واحدة" و"الرفض"، بينما تستمر المكالمة الأصلية في انتظار القرار. يرتبط الإذن ببصمة الأمر والأداة والوسيطة، وبمجرد تنفيذه لا يعد صالحًا.

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

ما هو موجود في Romergo وما يبقى مع المستخدم

أحب أن أفكر في هذه البنية على أنها فصل بين الاهتمامات.

يوفر روميرجو:

وكيل المستخدم يجلب:

الذكاء لا ينتمي إلى التطبيق. ينشئ التطبيق مكانًا يمكن أن تعمل فيه هذه المعلومات بأمان.

لماذا لا تصنع مساعد طيار مدمجًا عاديًا

سيكون الذكاء الاصطناعي المدمج أسهل في الشرح وأسهل في التمكين. يضغط المستخدم على الزر، ويقوم التطبيق باستدعاء النموذج المحدد، وكل شيء يعمل.

ولكن بعد ذلك سيتعين على Romergo أيضًا أن يصبح مشغلًا للبنية التحتية للذكاء الاصطناعي:

عند استخدام وكيل شخصي، كل هذا موجود بالفعل من جانب المستخدم. لا يحاول Romergo إنشاء ChatGPT آخر. إنه يمنح ChatGPT أو Claude أو وكيل آخر مساحة عمل متخصصة وأدوات واضحة.

هذا مثير للاهتمام بشكل خاص للمحرر الإبداعي. يمكن للوكيل نفسه أن يعرف كيف يكتب المستخدم الحوار، وما هي النغمة التي يفضلها، وما هي المراجع التي تمت مناقشتها بالفعل، وما هي الأدوات الخارجية التي يستخدمها. لا يحتاج Romergo إلى نسخ هذا النظام بأكمله فقط للمساعدة في استبدال خلفية واحدة أو إعادة ترتيب المشهد.

وأغرب ما في الأمر: أن الوكيل موجود في الخارج وفي الداخل

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

لكن من وجهة نظر المستخدم، الوكيل موجود داخل المحرر:

لذلك، فإن التعبيرين "AI داخل التطبيق" و"AI خارج عبر MCP" ليسا دقيقين تمامًا هنا. بل هو بالأحرى وجود مؤقت لوكيل خارجي في جلسة التطبيق.

ولست أول من تحرك في هذا الاتجاه

وبعد أن نجحت التجربة، بدأت في البحث عن أساليب مماثلة.

[Agent Client Protocol] (https://agentclientprotocol.com/) يسمح للمحررين مثل Zed وJetBrains بربط وكلاء الترميز الخارجيين. [Tidewave] (https://tidewave.ai/) يضع Claude Code وCodex ووكلاء ACP الآخرين بجوار تطبيق الويب قيد التشغيل ويمرر لهم المتصفح وسياق وقت التشغيل. يعرض [Obsidian Agent Client] (https://community.obsidian.md/plugins/agent-client) Claude Code وCodex وGemini بجوار الملاحظات مباشرةً ويرفق المستند النشط والتحديد تلقائيًا. marimo يمنح الوكيل الخارجي دفتر ملاحظات مباشر كمساحة عمل مشتركة.

هناك أيضًا تجارب أكثر عمومية. [AG-UI] (https://docs.ag-ui.com/) يعمل على توحيد الاتصال ثنائي الاتجاه بين واجهة المستخدم والواجهة الخلفية للوكيل. يقترح [WebMCP] (https://webmachinelearning.github.io/webmcp/docs/proposal.html) أن تسجل صفحات الويب الأدوات المتاحة لمتصفح متصل أو وكيل سطح مكتب. يصف [بروتوكول تطبيق الوكيل] (https://agentapplicationprotocol.com/overview) نموذجًا يمتلك فيه التطبيق واجهة المستخدم وأدوات المجال، ويمتلك الوكيل الخارجي أدوات المنطق والتاريخ وأدوات الأغراض العامة.

أي أن الفكرة الأساسية موجودة بالفعل في عدة أشكال. لكن معظم التطبيقات تركز على IDEs، أو وكلاء الترميز المحليين، أو الوكلاء الذين تنشرهم الشركة نفسها.

تجربة Romergo مثيرة للاهتمام بالنسبة لي بسبب سؤال مختلف قليلاً: ماذا سيحدث إذا تمكن وكيل مستخدم شخصي من الدخول إلى تطبيق إبداعي عادي؟

ليس نموذجا جديدا. ليس مفتاح API للنموذج. ليس تطبيق مساعد الطيار المدمج. وكيل يستخدمه الشخص بالفعل كل يوم.

الراحة ليست سوى نصف المشكلة

بمجرد أن يتمكن الوكيل الخارجي من الاستماع لأوامر التطبيق وتغيير المشروع، لم يعد الأمان ميزة اختيارية.

تطرح أسئلة لا يمكن الإجابة عليها بشاشة OAuth واحدة:

يحد الإصدار الحالي القناة حسب المستخدم والوقت، ويستخدم بروتوكول OAuth، ونطاقات الخادم، والتأكيدات لمرة واحدة، ومطالبات الأوامر الذرية، ودورة حياة صريحة. لا تزال هذه تجربة، ولكن الحدود المهمة أصبحت الآن جزءًا من التنفيذ وليست مجرد إرشادات للوكيل.

ماذا نسميها

ليس لدي عنوان نهائي بعد

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

ربما هذا هو:

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

قد لا تحتاج التطبيقات إلى الذكاء الاصطناعي الأصلي

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

هناك نموذج آخر ممكن.

يوفر التطبيق مساحة عمل وسياقًا مباشرًا وأدوات متخصصة. يقوم المستخدم بإحضار وكيل يثق به بالفعل. أثناء العمل، ينضم الوكيل إلى التطبيق ويساعد في إكمال المهمة ويغادر مع المستخدم.

لا أعرف حتى الآن ما إذا كانت هذه ستصبح فئة معمارية مستقلة. لكنني أعلم الآن أن مثل هذه الدورة يمكن تجميعها ويمكن استخدامها بالفعل.

لكنني أعلم أن التجربة ممتعة للغاية.

العودة إلى مدونة التطوير