إنتقل إلى المحتوى الرئيسي

محرك 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.