Improve bounded agent tool orchestration

This commit is contained in:
Hamza Ayed
2026-10-03 16:46:27 +03:00
parent 65812cf3ee
commit ac8359de6f
5 changed files with 423 additions and 152 deletions
+3 -3
View File
@@ -6,10 +6,10 @@
## مكونات النسخة الأولى
- FastAPI كواجهة HTTP محلية.
- وكيل تجريبي بأداة حساب آمنة ومحدودة.
- وكيل محلي ينسّق حتى 3 أدوات مسموحة بالتتابع (مثل البحث في الملفات ثم الحساب)، ويعيد نتيجة نهائية مع خطوات التنفيذ.
- واجهة المحادثة تدعم نسخ الإجابة ومشاركتها وتعديل آخر سؤال أو إعادة توليد الإجابة.
- تختار الواجهة نموذج Ollama المثبت محليًا من قائمة النماذج.
- وضع الوكيل التجريبي يبحث في ملفات المشروع النصية ويقرأ مقتطفات منها فقط؛ لا يكتب ملفات ولا يشغّل أوامر.
- وضع الوكيل يقرأ مقتطفات الملفات المحددة أو المفهرسة فقط؛ اقتراح تعديل الملف ينشئ معاينة diff تتطلب موافقة صريحة، ولا يشغّل أوامر.
- خطة المراحل التالية للوكيل والبيانات والنماذج موجودة في [`ROADMAP.md`](ROADMAP.md).
- واجهة `/docs` لاستكشاف الـ API من المتصفح.
- يمكن توصيلها بخادم نموذج محلي يوفّر واجهة OpenAI مثل Ollama.
@@ -150,7 +150,7 @@ python scripts/eval_knowledge_retrieval.py --dataset evals/knowledge_retrieval_p
- يعرض شريط المحادثة قائمة النماذج المثبتة من Ollama؛ اختيار النموذج يمرر اسمه مع الطلب.
- زر المجلد يفعّل وضع الوكيل للقراءة فقط، وزر الكرة الأرضية يفعّل البحث العميق متعدد المصادر. عند تشغيل `start-api.ps1` تكون مساحة العمل الافتراضية مجلد المشروع `SovereignAI-Starter`؛ لتغييرها عرّف `SOVEREIGNAI_WORKSPACE` قبل تشغيل الخدمة. يمكن لمسؤول الخدمة التصريح بعدة جذور عبر `SOVEREIGNAI_ALLOWED_WORKSPACES` مفصولة بفاصل المسارات الخاص بالنظام؛ أي مجلد يختاره العميل يجب أن يقع داخل أحدها. لتخصيص مساحات منفصلة للحسابات، عرّف `SOVEREIGNAI_USER_WORKSPACES` ككائن JSON مفاتيحه عناوين البريد وقيمه مصفوفات مسارات فرعية ضمن الجذور المسموحة، مثل `{"user@example.com":["D:\\SovereignAI\\workspaces\\user"]}`. يرفض الخادم جذور الحسابات المتداخلة ويمنع الحساب من اختيار مسار حساب آخر. حساب بلا تخصيص يستطيع الدردشة لكنه لا يستطيع قراءة مساحة عمل.
- الوكيل يطابق السؤال مع ملفات النص/الكود المدعومة، ويمكنه قراءة PDF رقمي يحدده المستخدم؛ يمرر مقتطفات محدودة للنموذج، وعند ذكر مسار نسبي مثل `app/main.py` يزيد المقتطف إلى 12,000 حرف كحد أقصى. يعيد أسماء الملفات التي قرأها. الملفات المخفية، مجلدات `.git` وبيئات البناء، والملفات الكبيرة أو خارج جذر مساحة العمل مستثناة.
- في وضع الوكيل اختر المهارة من أيقونة الدماغ بجانب زر مساحة العمل: **شرح الكود** أو **مراجعة الكود** أو **خطة اختبارات**. يستعرض `GET /v1/agent/skills` المهارات وأدوات كل منها؛ يتحقق الخادم من صلاحيات الأداة ولا يعتمد على طلب النموذج وحده. مراجعة الكود تستطيع طلب معاينة diff فقط، ولا تطبق تغييرًا.
- في وضع الوكيل اختر المهارة من أيقونة الدماغ بجانب زر مساحة العمل: **شرح الكود** أو **مراجعة الكود** أو **خطة اختبارات**. يستعرض `GET /v1/agent/skills` المهارات وأدوات كل منها؛ يتحقق الخادم من صلاحيات الأداة ولا يعتمد على طلب النموذج وحده. يمكنه استخدام حتى 3 أدوات مسموحة بالتتابع ضمن الطلب، أداة واحدة في كل خطوة، ثم يعيد النتائج للنموذج لصياغة الإجابة. مراجعة الكود تستطيع طلب معاينة diff فقط، ولا تطبق تغييرًا.
- فهرس معرفة محلي: في وضع مساحة العمل حدد ملفات UTF-8 أو PDF رقميًا/ممسوحًا ثم اضغط زر الفهرسة بجانب أيقونة المجلد؛ زر الإزالة يحذف الملفات المحددة من الفهرس. يدعم `POST /v1/agent/knowledge/index` و`DELETE /v1/agent/knowledge/index` و`POST /v1/agent/knowledge/search`. يقتصر الطلب على 20 ملفًا و2 ميغابايت إجمالًا، و256 كيلوبايت للملف النصي، وPDF حتى 30 صفحة و24 ألف محرف مستخرج. يجمع PDF المختلط نص الصفحات الرقمية وOCR لأول 3 صفحات ممسوحة، ويضيف تضمينات Granite المحلية الاختيارية إلى FTS5 عند توفر النموذج؛ لا يرفع المحتوى إلى خدمة خارجية. تعذر التضمين يبقي البحث النصي فعالًا. إعادة الفهرسة تستبدل النسخة السابقة، والبحث يحذف تلقائيًا أي مستند تغيّر أو لم يعد ضمن المساحة.
- زر مشبك الورق يفتح اختيار ملفات الكود/النص وPDF (حتى 3 ملفات؛ النص 256KB للملف، وPDF 8MB للملف، والمجموع 16MB). تُقرأ الملفات في الذاكرة؛ يستخرج API نص الصفحات الرقمية حتى 30 صفحة و24,000 محرف، ويرسم أول 3 صفحات ممسوحة ضمن الطلب. يضيف OCR عربي/إنجليزي اختياريًا قبل نموذج الرؤية المحلي مع تحويل تلقائي إلى `ministral-3:3b` إن كان مثبتًا. لا يخزن الملفات أو ينفذ الكود.
- تظهر 👍/👎 تحت إجابات المساعد. يحفظ التقييم مع رقم نسخة الإجابة في SQLite حتى نتمكن من قياس الجودة وتجهيز أمثلة تقييم أو تفضيلات بمراجعة بشرية؛ الضغط لا يدرّب النموذج ولا يغيّر أوزانه تلقائيًا.