عن المشروع
OpenDoubao عبارة عن منصة مفتوحة المصدر لتوليد تطبيقات الوكلاء (AI Agent)، وهي بديل مفتوح المصدر لتطبيق Doubao Work. فكرته الأساسية: من خلال الدردشة باللغة الطبيعية، يتم توليد تطبيقات ويب أمامية وخلفية عالية الجودة بشكل ارتجالي، دون الاعتماد على نموذج لغوي كبير في التفاعلات اللاحقة، مما يحقق استدعاءات واجهة برمجية آمنة وسريعة ومستقرة.
## البنية الأساسية: تجربة من مرحلتين
يعتمد المشروع تصميمًا فريدًا من مرحلتين:
**المرحلة الأولى—مرحلة التوليد (دردشة / ذكاء اصطناعي أو قواعد):** يصف المستخدم احتياجاته عبر المحادثة، فيولّد وكيل الذكاء الاصطناعي واجهة المستخدم ويقترح طلبات APIJSON. يتم تنفيذ الطلب بعد التحقق منه، وعند نجاحه يصدر bindRequest لربط القالب وخريطة الوسائط (paramMap) بعناصر واجهة المستخدم.
**المرحلة الثانية—المرحلة المستقرة (بدون نموذج لغوي كبير):** عندما يعدّل المستخدم لاحقًا شروط التصفية أو الترتيب أو معاملات الترقيم وغيرها، يقوم BoundExecutor بدمج paramMap مباشرةً في bodyTemplate واستدعاء واجهة APIJSON عبر HTTP POST، دون استهلاك أي رموز (Tokens)، وباستجابة سريعة ومستقرة.
## بروتوكول Agent-to-API (A2API)
يحدد المشروع بروتوكول A2API 0.1، ويكون تنسيق المغلف: { "version": "0.1", "type": { ... } }، ويتضمن أنواع الرسائل التالية:
- **proposeRequest**: استدعاء APIJSON مرشح.
- **reviseRequest / decision**: تعديل الطلب أو الموافقة عليه / رفضه.
- **bindRequest**: بعد code == 200، يُنتج القالب وparamMap لاستدعاءات مدفوعة بواجهة المستخدم.
- **requestResult / status**: النتائج وحالة التغذية الراجعة.
## آلية الأمان
يحتوي المشروع على آلية موافقة على العمليات الحساسة. تُنفَّذ عمليات القراءة تلقائيًا، بينما تتطلب عمليات الكتابة (وتشمل افتراضيًا: post وput وdelete وgets وheads، ويمكن تغييرها عبر متغير البيئة SENSITIVE_METHODS) موافقة المسؤول في لوحة الإدارة قبل اكتمال التنفيذ. توفر لوحة الإدارة ثلاثة أقسام: Apply (قائمة الطلبات) وCall logs (سجلات الاستدعاء) وStats (إحصائيات)، وتدعم عمليات موافقة معقدة على Access وRequest وDocument وChain.
## حزمة التقنيات وهيكل المستودع
- **بيئة التشغيل**: Node.js 18+، مع Vite (الواجهة الأمامية) وHono (خدمة الواجهات البرمجية).
- **طبقة البيانات**: APIJSONBoot-MultiDataSource (أو خدمة متوافقة)، تعمل على localhost:8080.
- **وحدات المستودع**:
- `opendoubao`: المنسّق + واجهة الدردشة (التوليد) + التصفية المربوطة (المرحلة المستقرة).
- `opendoubao-admin`: تقديم طلبات الإعداد والموافقة، وبعد الموافقة تُكتب في Access / Request / Document.
- `a2qpi/protocol`: مغلف A2API 0.1، ومؤشرات JSON، والمدققات، واختبارات CRUD التجريبية.
- `a2qpi/runtime`: ApiJsonClient وHitlController وBoundExecutor.
## البدء السريع
cd ~/a2api
cp .env.example .env
npm install
npm test
npm run build
npm run dev
بعد بدء التشغيل، يعمل العميل على http://localhost:5173، وخدمة API على http://localhost:3000، ولوحة الإدارة عبر `npm run dev:admin` على http://localhost:5174.
## الإعداد والتوسعة
يمكن للمستخدم تسجيل الدخول أو إنشاء حساب من زر Login في الزاوية العلوية اليمنى، وتكوين AI Model وBase URL وAPI Key. كما يدعم بدء الاستعلامات بسرعة عبر شرائح سريعة (مثل «List the latest 3 moments with authors»). يمكن اختياريًا ضبط OPENAI_API_KEY في ملف .env لتفعيل المساعدة النموذجية اللغوية عند الإقلاع؛ وعند عدم تكوينه، تتعرف قواعد النية المدمجة على الكيانات مثل User / Moment / Comment (باللغتين الصينية والإنجليزية).
يوفر المشروع جداول بيانات تجريبية غنية (User وMoment وComment بالإضافة إلى الموظفين والفعاليات والدردشات والأخبار والمعلومات والمدونات والمقالات والفيديوهات والموسيقى والمنتجات والطلبات وعناوين الاستلام والتصنيفات وغيرها)، وبعد الاستيراد يلزم إعادة تحميل Access/Request. تتطلب عمليات الكتابة عادةً جلسة تسجيل دخول (@role OWNER/LOGIN)، وفي مرحلة النموذج الأولي (MVP) يتم توليد الطلب وعرض واجهة موافقة/رفض HITL.
## واجهة أتمتة الوكيل
يعرض المشروع واجهة الأتمتة a2apiAgent، التي تتيح استدعاء switchTab وdebug وغيرها عبر جافا سكريبت، مع إمكانية تحديد URL ونص طلب JSON وإرساله تلقائيًا، كما يمكن تحميل iframe وإرسال الطلب تلقائيًا، لتسهيل الدمج في اختبارات الأتمتة أو مسارات العمل.
## خطة المرحلة الثانية
المزامنة عبر الأجهزة (استيراد/تصدير جداول قاعدة البيانات أو الملفات) مدرجة في التصميم المخطط لها، ولم تُنفَّذ بعد.
## معلومات المشروع
المؤلف هو TommyLemon، والمشروع مستضاف على GitHub (open-doubao-ai/OpenDoubao)، ونرحب بمناقشة المشكلات التقنية عبر Issue والمساهمة في الكود عبر Pull Request.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.