محرك Strands
يدمج Libre WebUI محرك وكلاء مبنيًا على
إطار تشغيل Strands Agents مفتوح المصدر
(@strands-agents/harness 0.1.1 فوق @strands-agents/sdk 1.19.0). يعمل المحرك
داخل عملية الواجهة الخلفية لـ Libre WebUI، فلا توجد خدمة خلفية منفصلة عليك
تثبيتها. تُحمَّل حزمة SDK عند أول استخدام للمحرك، أما الخادم الذي أُوقف فيه
Strands فلا يحمّلها أبدًا.
يشغّل المحرك النماذج التي يقدّمها Libre WebUI بالفعل:
- نماذج Ollama، عندما يكون Ollama مفعّلًا
- نماذج إضافات مزوّدي المحادثة أو الإكمال النشطة
يمر كل استدعاء للنموذج عبر خدمات Ollama والإضافات نفسها التي تستخدمها المحادثة. لا توجد إعدادات مزوّد منفصلة ولا مفتاح API منفصل، وتنطبق بيانات اعتماد المزوّدين ومفتاح تشغيل Ollama كما هي دون تغيير.
يمكنك استخدام المحرك في ثلاثة أماكن:
- صفحة Strands، لجلسات الوكيل الدائمة
- محادثة، عبر إدخالات Strands في منتقي النماذج
- Work، بوصفه الخيار Strands في عنصر التحكم المحرك داخل محرر Work
الوصول
يختار المسؤول من يمكنه استخدام المحرك من الإعدادات → إدارة المستخدمين → الوصول والسياسات → محرك Strands:
| الوضع | التسمية في الإعداد | من يمكنه استخدام Strands |
|---|---|---|
disabled | إيقاف | لا أحد، بمن في ذلك المسؤولون (الافتراضي) |
admins | المسؤولون | المسؤولون النشطون |
all-users | جميع المستخدمين | كل حساب نشط |
يسري التغيير بدءًا من الطلب التالي، دون إعادة تشغيل.
لتثبيت الوضع على مستوى النشر، اضبط LIBRE_STRANDS_ACCESS:
LIBRE_STRANDS_ACCESS=admins # or disabled, all-users
يقفل الوضع المثبّت عنصر التحكم في إدارة المستخدمين. وأي قيمة غير disabled أو
admins أو all-users تقفل المحرك على الإيقاف بدل الرجوع إلى الإعداد المحفوظ.
يفرض الخادم الوضع على كل طلب REST، وعلى محادثة WebSocket، وعلى كل استدعاء نموذج
في أي تشغيل لـ Work. وإذا تعذّرت قراءة الوضع، يُرفض الوصول. لا ترى الحسابات التي
لا تملك وصولًا صفحة Strands ولا إدخالات Strands في المحادثة ولا محرك Strands في
Work، وتجيب واجهة API بالرمز 403.
صفحة Strands
افتح Strands من الشريط الجانبي (/strands).
- تبقى الجلسات محفوظة بعد إعادة التشغيل، بحد أقصى 200 جلسة لكل حساب. وتمنح الرسالة الأولى الجلسة الجديدة اسمها.
- اختر نموذجًا لكل جلسة. يستخدم النموذج الافتراضي نموذج المحادثة الافتراضي لديك.
- تتدفق الردود أثناء توليدها، مع استدلال النموذج وبطاقة لكل استدعاء أداة.
- يلغي إيقاف الدور الجاري. وتشغّل الجلسة دورًا واحدًا في كل مرة.
- يؤدي حذف الجلسة إلى إزالة سجلها ومساحة عملها.
المحادثة
اختر Strands في منتقي النماذج. يظهر في مجموعة الوكلاء بجوار نماذج وكلاء CLI:
- Strands (
strands) يستخدم النموذج الافتراضي للمحرك، وهو نموذج المحادثة الافتراضي لديك. - Strands · النموذج (المزوّد) (
strands:<route>) يثبّت نموذجًا واحدًا ومزوّده طوال المحادثة.
يعتمد Strands في المحادثة على الوصول إلى Strands فقط. فهو لا يحتاج إلى مفتاح نماذج وكلاء CLI، ويظهر حتى عندما يكون ذلك المفتاح معطّلًا. وفي المحادثة يملك الوكيل أدوات الملفات نفسها المتاحة في صفحة Strands، ضمن مساحة عمل خاصة واحدة لكل حساب، وتصل ردوده في صورة نص واستدلال. راجع وكلاء الترميز المثبّتة لمعرفة المزيد عن مجموعة الوكلاء وعن استخدام إدخال Strands نموذجًا للمهام الخاصة بالعناوين وملخصات التفكير.
Work
في محرر Work، اختر Libre WebUI أو Strands في عنصر التحكم المحرك، ثم اختر النموذج على حدة. مع Strands يخطط وكيل Strands لكل خطوة، وينفّذ Work الأدوات التي يطلبها داخل بيئة Work المعزولة وفق سياسة الموافقة المعتادة في Work. يبقى Work المرجع المعتمد للسجل والموافقات وتنفيذ الأدوات وسجل التشغيلات، ولا يشغّل وكيل Strands أي أدوات خاصة به داخل Work.
يجب أن يدعم نموذج المزوّد الأساسي استدعاء الأدوات. يتحقق Work من ذلك قبل بدء التشغيل، ويرفض أي نموذج لا يعلن دعمه للأدوات.
تُفتح تشغيلات Work التي حفظتها إصدارات سابقة ببادئة النموذج dsh: بوصفها تشغيلات
Strands. راجع Work: محرك Strands لمعرفة كيف يتفاعل
اختيار المحرك مع النماذج المنقولة من المحادثة.
نموذج الأمان
في صفحة Strands وفي المحادثة، يملك الوكيل مجموعة أدوات صغيرة عن قصد:
readوwriteوedit، للملفات داخل مساحة عمله- الإضافة
todosمن إطار التشغيل، لتخطيط العمل متعدد الخطوات
لا يملك الوكيل صدفة أوامر، ولا جلبًا من الويب، ولا ذاكرة، ولا مهارات، ولا يُحقن
أي ملف AGENTS.md في تعليماته.
لكل جلسة دليل مساحة عمل خاص يراه الوكيل باسم /workspace. يُحلّ كل مسار بعد
تتبّع الروابط الرمزية، ويجب أن يبقى داخل ذلك الدليل، لذلك لا يستطيع رابط داخل
مساحة العمل الوصول إلى بقية القرص. وترفض البيئة المعزولة تنفيذ الأوامر.
| العنصر | الحد |
|---|---|
| الجلسات لكل حساب | 200 |
| طول الموجّه | 32,000 حرف |
| أدوار الوكيل لكل رسالة | 24 |
| قراءة ملف أو كتابته | 2 ميغابايت لكل استدعاء |
| عنوان الجلسة | 120 حرفًا |
يتوقف الدور الذي يبلغ حد الأدوار ويذكر ذلك. ويمكن لكل دور أن يجري عدة استدعاءات للنماذج لدى مزوّديك، لذا امنح الوصول بالحرص نفسه الذي تمنح به أي وصول آخر إلى النماذج يستهلك ميزانية المزوّدين.
التخزين
توجد بيانات Strands تحت <DATA_DIR>/strands/، وليس في قاعدة بيانات التطبيق. لكل
حساب دليله الخاص، <DATA_DIR>/strands/users/<account-hash>/، ويحتوي على:
registry.json: قائمة جلسات الحسابsessions/: لقطات جلسات Strands التي يستخدمها الوكيل سياقًاtranscripts/: السجل المعروض في صفحة Strands لكل جلسةworkspaces/: مساحة العمل الخاصة بكل جلسةchat-workspace/: مساحة العمل التي تستخدمها أدوار المحادثة
أدرج <DATA_DIR>/strands/ في النسخ الاحتياطية إذا كانت هذه الجلسات مهمة لك.
الاستخدام
تنسب صفحة استخدام المزوّد (/usage) استدعاءات Strands إلى الوكيل Strands في
قسم الوكلاء. راجع استخدام الوكلاء.
واجهة API
يتطلب كل مسار حسابًا مصادقًا عليه يملك وصولًا إلى Strands، باستثناء
/api/strands/access الذي يتطلب مسؤولًا.
| الطريقة | المسار | الغرض |
|---|---|---|
GET | /api/strands/access | قراءة وضع الوصول ومعرفة ما إذا كان LIBRE_STRANDS_ACCESS يثبّته (للمسؤول) |
PUT | /api/strands/access | ضبط mode على disabled أو admins أو all-users (للمسؤول، و409 إذا كان مثبّتًا) |
GET | /api/strands/health | مدى توفر المحرك وإصدارا إطار التشغيل وحزمة SDK |
GET | /api/strands/models | النماذج التي يستطيع المحرك تشغيلها لهذا الحساب |
GET | /api/strands/sessions | سرد الجلسات |
POST | /api/strands/sessions | إنشاء جلسة (مع title وmodel اختياريًا) |
GET | /api/strands/sessions/:sessionId | قراءة جلسة وسجلها ومعرفة ما إذا كان هناك دور قيد التشغيل |
PATCH | /api/strands/sessions/:sessionId | تغيير عنوان الجلسة أو نموذجها |
DELETE | /api/strands/sessions/:sessionId | حذف جلسة مع سجلها ومساحة عملها |
POST | /api/strands/sessions/:sessionId/messages | إرسال { "text": "..." } وبث الدور بتنسيق NDJSON |
POST | /api/strands/sessions/:sessionId/cancel | إيقاف الدور الجاري |
يكتب تدفق الرسائل حدث JSON واحدًا في كل سطر: turn-start وtext وreasoning
وtool-start وtool-result وdone (مع سبب التوقف واستهلاك الرموز عندما يبلّغ
المزوّد عنه) وerror. يؤدي إغلاق الاتصال إلى إلغاء الدور، ويعيد إرسال رسالة أثناء
تشغيل دور الرمز 409.
الضبط
| المتغير | الافتراضي | الغرض |
|---|---|---|
LIBRE_STRANDS_ACCESS | غير مضبوط (إعداد المسؤول، المسؤولون) | تثبيت disabled أو admins أو all-users، وأي قيمة أخرى تقفل المحرك على الإيقاف |
استكشاف الأخطاء وإصلاحها
راجع مشكلات محرك Strands.