أدوات المحادثة
يمكن لـ Chat السماح للنموذج باستدعاء الأدوات. تنفذ الجولة مع تفعيل الأدوات حلقة أصلية متعددة المراحل: يطلب النموذج أداة، وينفذها Libre WebUI بهوية المستخدم المستدعي وصلاحياته، وتعود النتيجة إلى النموذج، وتستمر الحلقة حتى يجيب النموذج — حتى ثماني جولات لكل دور، وبحد أقصى ثمانية استدعاءات في الجولة. يلغي زر الإيقاف استدعاء النموذج وأي أداة قيد التنفيذ وأي انتظار اعتماد.
تُسجل استدعاءات الأدوات كأحداث موحدة (chat.tool-call.v1 وchat.tool-result.v1 وchat.approval.v1) تمر بالطريقة نفسها عبر مسار WebSocket الخاص وتدفق الأحداث الدائم، ولذلك تعيد إعادة التحميل أو الاتصال تشغيل الحالة نفسها. وتخزن الجولة المكتملة استدعاءاتها مع معاينات محدودة للنتائج على رسالة المساعد.
تفعيل الأدوات
الأدوات معطلة افتراضيًا. يفتحها المسؤول من الإعدادات ← إدارة المستخدمين ← الوصول والسياسات ← الوصول إلى الأدوات (للمسؤولين فقط أو للجميع)، ثم تختار كل جولة تفعيلها من رمز المفتاح في محرر الرسالة. يفتح ذلك محددًا فيه مفتاح رئيسي وخانة لكل أداة مدمجة وخادم مسجل، فتعمل الجولة بالأدوات التي تختارها بالضبط. يستطيع المحدد تضييق ما يربطه الملف الشخصي، لا توسيعه. ولا تعرض المحادثات الخاصة (المتخفية) أدوات أبدًا؛ فاستدعاء الأداة إجراء خارجي قد يترك اعتمادات وسجلات تدقيق.
يحفظ مفتاح الوصول إلى الأدوات فورًا. انقره، أو استخدم Tab للتركيز عليه وSpace لتبديله. ولا يؤدي تغيير الوصول إلى إغلاق نافذة الإعدادات أو فقدان موضع التمرير.
يمكن لملف المساعد (الشخصية) تقييد الأدوات المعروضة: تحد خوادم الأدوات المرتبطة ومجموعة فرعية من الأدوات المدمجة والمهارات ومجموعات المعرفة المرتبطة ما يراه النموذج في جلسات ذلك الملف.
الأدوات المدمجة
تأتي ثلاثة عشر أداة أصلية مع Chat (كلها للقراءة فقط باستثناء أدوات تعديل الملاحظات والتقويم، التي تمر بمسار اعتماد الآثار الجانبية):
web_search— محرك البحث الذي هيأه المسؤول، مع احترام وضع الوصول إلى بحث الويب.search_documents— بحث هجين في المستندات المرفوعة ومجموعات المعرفة، بما فيها المشتركة مع المستخدم (يمكن لروابط الملف تقييد المجموعات)؛ ويُستشهد بكل مقطع مع رقمه وموقع مصدره.list_documents— يسرد مستندات نطاق المحادثة بمعرفاتها وأنواعها وأحجامها ليقرر النموذج ما يقرأه.read_document— يقرأ نافذة محدودة من مستند متاح حسب المعرف والإزاحة، مع تسمية موقع المصدر، للتنقل في ملف لا يكفي الاسترجاع وحده للإجابة منه.load_skill— يحمّل تعليمات مهارة كاملة حسب slug؛ ويحمل وصف الأداة بيان مهارات المستخدم المفعّلة، فتظل كسولة حتى يحتاجها النموذج. وإذا ضمت المهارة ملفات مصاحبة، تنتهي التعليمات بجردها.read_skill_file— يقرأ ملفًا مصاحبًا في مهارة حسب slug والمسار النسبي، فلا يستهلك مستند مرجعي كبير السياق حتى يفتحه النموذج فعلًا.list_notes— يسرد ملاحظات المستخدم الشخصية والمشتركة مع معرفاتها.read_note— يقرأ محتوى ملاحظة كاملًا حسب المعرف.create_note— ينشئ ملاحظة (له أثر جانبي ويتطلب الاعتماد).update_note— يستبدل محتوى ملاحظة مع حفظ الحالة السابقة كمراجعة قابلة للاستعادة، ولذلك يبقى تعديل النموذج قابلًا للعكس (له أثر جانبي ويتطلب الاعتماد).list_calendar_events— يسرد أحداث تقويم المستخدم الشخصية والمشتركة في نطاق بالمللي ثانية منذ الحقبة.create_calendar_event— ينشئ حدث تقويم (له أثر جانبي ويتطلب الاعتماد).delete_calendar_event— يحذف حدثًا حسب المعرف (له أثر جانبي ويتطلب الاعتماد).
خوادم الأدوات
يسجل المسؤولون الخوادم الخارجية تحت الإعدادات ← الأدوات (وتملأ قوالب البدء الاستمارة، ومنها API عرض عام آمن):
- OpenAPI: تُجلب مواصفة JSON من OpenAPI 3.x مرة وتُثبت ببصمة SHA-256. تصبح كل عملية أداة؛ وتُصنف عمليات
GETللقراءة فقط وكل ما عداها أثرًا جانبيًا حتى يتجاوز المسؤول التصنيف لكل أداة. يعيد التنفيذ بناء الاستدعاء من العملية المثبتة؛ ولا تختار معاملات النموذج الوجهة. - MCP (Streamable HTTP): تُجلب قائمة أدوات الخادم عبر JSON-RPC وتُثبت بالطريقة نفسها. وتعلّم
annotations.readOnlyHintالأداة للقراءة فقط. لا تُدعم خوادم MCP عبر stdio عمدًا؛ فلا تعمل عمليات خارجية داخل عملية الويب.
لا يسري جرد متغير إلا عندما يحدّث المسؤول الخادم، فيتقدم الإصدار المثبت وتبقى التجاوزات الخاصة بكل أداة. ويكون توفر الخادم للمسؤولين فقط أو للجميع أو قائمًا على المنح عبر نموذج منح الموارد المشترك (منح مستخدمين ومجموعات على الخادم).
بيانات الاعتماد
تستخدم الخوادم التي تتطلب مصادقة بيانات اعتماد خاصة بكل مستخدم (رمز Bearer أو ترويسة مسماة). يُشفّر كل سر ببيانات موثقة إضافية تربطه بالمستخدم والخادم المحددين، ويدخله كل مستخدم تحت الإعدادات ← الأدوات، ولا يُشارك بين الحسابات.
OAuth التفاعلي (MCP)
يمكن لخادم MCP أيضًا أن يسجّل دخول كل شخص لنفسه. سجّله بوضع مصادقة
OAuth تفاعلي فيقرأ Libre WebUI تحدي WWW-Authenticate الذي يجيب به
الخادم، ويتبعه إلى بيانات المورد المحمي الوصفية، ثم إلى بيانات خادم
التفويض الوصفية، ويسجّل عميلًا ديناميكيًا (RFC 7591) عندما يعرض خادم
التفويض التسجيل. أما الموفّرون الذين لا يسجّلون العملاء تلقائيًا فيأخذون
معرّف عميل يقدّمه المسؤول، وسرًا اختياريًا، في نموذج التسجيل؛ ويُشفّر
السر إلى جانب نقاط النهاية المكتشفة.
ثم يضغط كل شخص اتصال على بطاقة الخادم فيُعاد توجيهه إلى الموفّر. يستخدم التدفق PKCE (S256) مع حالة CSRF، ويُحفظ محقق PKCE في ملف تعريف ارتباط HttpOnly محصور بذلك الخادم الواحد. ويبادل رد النداء الرمز على الخادم، ويخزّن الرموز مشفّرة بربط المستخدم والخادم نفسه المستخدم للسر الثابت، ويعيد المتصفح إلى التطبيق مع علامة حالة — فلا تصل رموز الوصول والتحديث إلى الصفحة أبدًا. تُجدَّد رموز الوصول تلقائيًا قبل دقيقة من انتهائها، مرة واحدة لكل شخص وخادم حتى مع تسابق عدة استدعاءات أدوات. وحين يتعذر التجديد، يعود استدعاء الأداة طالبًا إعادة الاتصال بدل الفشل مجهول السبب. تُزيل قطع الاتصال رموز ذلك الشخص وتُبقي التسجيل قائمًا؛ ويُنسي حذف الخادم الإعداد المكتشف أيضًا.
يبقى الخادم الذي يرفض سرد الأدوات من دون مصادقة مسجَّلًا: يُثبَّت جرده عند أول اتصال ناجح (وعند أي تحديث من المسؤول)، فلا يُعرض شيء على نموذج قبل أن يصير معروفًا.
سياسة الخروج الشبكي
يحل كل طلب أداة وجهته بنفسه، ويرفض نطاقات العناوين الخاصة والالتفافية والبيانات الوصفية، ويثبت الاتصال على العنوان المحلول حتى لا تعيد إعادة ربط DNS توجيهه. وتُرفض استجابات إعادة التوجيه. تُحدد أحجام الاستجابة ولكل استدعاء مهلة صارمة. ويمكن السماح بأسماء مضيفين داخلية دقيقة عبر TOOLS_PRIVATE_NETWORK_ALLOWLIST (مفصولة بفواصل)؛ وتظل مثبتة ومحدودة. وتعود مخرجات الأداة إلى النموذج كنص غير موثوق.
الاعتمادات
تعمل أدوات القراءة بلا سؤال. توقف الأداة ذات الأثر الجولة وتسأل المستخدم: السماح مرة، أو لهذه المحادثة، أو دائمًا لهذه الأداة على الخادم، أو الرفض. القرارات دائمة؛ تبقى منحة «دائمًا» بعد إعادة التشغيل ويمكن إلغاؤها من الإعدادات ← الأدوات. وينتهي الطلب المعلق بعد دقيقتين، فيراه النموذج رفضًا. لا ينفذ الرفض أو انتهاء المهلة الاستدعاء. ويترك كل قرار واستدعاء حدث تدقيق أمني منقحًا.
أمثلة
فعّل رمز المفتاح في محرر الرسالة أولًا؛ كل مثال أدناه رسالة محادثة عادية.
web_search — البحث عن معلومة
ما الذي تغير في أحدث إصدار من SQLite؟ ابحث في الويب قبل الإجابة.
يستدعي النموذج web_search باستعلام مثل {"query": "SQLite latest release changelog"}، وتعرض بطاقة الاستدعاء مقتطفات النتائج التي استلمها، ويستشهد الرد بما وجده. يتطلب ذلك تهيئة بحث الويب والسماح به لحسابك.
search_documents — سؤال ملفاتك
ارفع PDF أو أضف مستندات إلى مجموعة معرفة، ثم:
ابحث في مستنداتي عن بند الإنهاء واقتبسه حرفيًا.
يستدعي النموذج search_documents مع {"query": "termination clause"} ويتلقى المقاطع المطابقة مع تسمية مستند المصدر، ليقتبسها وينسبها.
load_skill — تطبيق مهارة محفوظة
أنشئ مهارة تحت الإعدادات ← المهارات (مثل $release-notes التي تحدد أسلوب ملاحظات الإصدار)، ثم:
اكتب ملاحظات إصدار لهذا الفرق باستخدام $release-notes.
يرى النموذج المهارة في بيانه، ويستدعي load_skill {"slug": "release-notes"} لجلب التعليمات الكاملة ثم يتبعها. يؤدي إدخال $ في محرر الرسالة إلى إكمال slugs المهارات تلقائيًا.
خادم OpenAPI — مثل API للطقس
-
الإعدادات ← الأدوات ← تسجيل خادم: الاسم
Weather، النوعOpenAPI، عنوان الأساسhttps://api.example-weather.dev، عنوان المواصفةhttps://api.example-weather.dev/openapi.json، ووضع المصادقةbearer. -
تُثبت المواصفة وتظهر عملياتها كأدوات، مثل
getForecast(GET، قراءة فقط) وcreateAlert(POST، أثر جانبي). -
يحفظ كل مستخدم يريدها مفتاح API الخاص به على بطاقة الخادم.
-
في المحادثة:
ما توقعات الطقس في مونتريال نهاية هذا الأسبوع؟
يستدعي النموذج
weather__getForecast {"city": "Montreal"}وتعمل فورًا؛ أدوات القراءة لا تسأل.نبهني إذا انخفضت الحرارة عن -20 الليلة.
لـ
weather__createAlertأثر جانبي، فتتوقف الجولة ببطاقة اعتماد: السماح مرة أو لهذه المحادثة أو السماح دائمًا أو الرفض. لا يُرسل شيء حتى تختار.
Exa MCP — البحث في الويب وجلب صفحاته
من الإعدادات ← الأدوات ← ابدأ من قالب، اختر Exa لتعبئة تسجيل MCP مسبقًا بما يلي:
https://mcp.exa.ai/mcp?tools=web_search_exa,web_fetch_exa
يختار العنوان web_search_exa وweb_fetch_exa عبر معامل اختيار الأدوات في Exa. ولا يستخدم القالب أي مصادقة ويقصر الوصول على المسؤولين افتراضيًا. راجع الاستمارة واختر حفظ للاتصال وتثبيت قائمة الأدوات. ولا يؤدي فتح القالب أو إلغاؤه إلى الاتصال بـ Exa. وتُرسَل استعلامات البحث والعناوين المطلوبة إلى Exa عند تشغيل هاتين الأداتين.
خادم MCP — مثل متتبع مشكلات
-
الإعدادات ← الأدوات ← تسجيل خادم: الاسم
Issues، النوعMCP، عنوان الأساسhttps://mcp.example-tracker.dev/mcp، وضع المصادقةheaderواسم الترويسةX-Api-Key. -
تُثبت قائمة أدواته؛ وتعمل الأدوات التي يعلّمها الخادم للقراءة فقط (مثل
search_issues) بحرية، ويسأل كل ما عداها (مثلcreate_issue) أولًا. -
في المحادثة:
اعثر على المشكلات المفتوحة التي تذكر "database lock" وأنشئ واحدة تلخص النمط.
تعمل
issues__search_issuesفورًا، وتعرضissues__create_issueالمعاملات الدقيقة في بطاقة الاعتماد لتقرأ ما سيُرسل قبل السماح.
متغيرات البيئة
| المتغير | الأثر |
|---|---|
TOOLS_ACCESS_MODE | يثبت ميزة الأدوات على admins أو all-users ويقفل مفتاح المسؤول. |
TOOLS_PRIVATE_NETWORK_ALLOWLIST | أسماء المضيفين الدقيقة التي يمكن لخوادم الأدوات حلها إلى عناوين خاصة (قائمة مفصولة بفواصل). |
الحدود
- تعمل استدعاءات الأدوات على مسار WebSocket (يُستبعد نقل الجلسة الخاصة عمدًا) ومسار التوليد الدائم للمحادثات المحفوظة. ولا تشغل نقطة REST القديمة المتدفقة حلقة الأدوات.
- تُشغّل إشارات
@modelفي القنوات الحلقة نفسها مقابل كتالوج العضو المُشير، بفارق واحد: لا يوجد من يُسأل، فتُرفض الأداة ذات الأثر الجانبي فورًا من دون موافقة قائمة بدل الانتظار. وتعمل الأدوات للقراءة فقط بشكل طبيعي. - تستدعي وكلاء Work الخوادم نفسها عبر البوابة نفسها: في التشغيلات التي تملك وصولًا إلى الشبكة فقط، مع استبعاد الخوادم التي تنقصها بيانات الاعتماد عند العرض، وإخضاع الأدوات ذات الأثر لموافقات Work.
- لا تتلقى نماذج Gemini ونماذج CLI الوكيل أدوات؛ بينما يدعمها Ollama والمزوّدون المتوافقون مع OpenAI وResponses API وAnthropic.
- OAuth التفاعلي مقصور على MCP: يظل خادم OpenAPI يستخدم بيانات اعتماد ثابتة خاصة بالمستخدم. والتدفق هو منح رمز التفويض مع PKCE؛ ولا يُعرض تدفقا رمز الجهاز وبيانات اعتماد العميل، ولا يمكن الاتصال بخادم تفويض لا ينشر بيانات وصفية (أو لا يملك نقطة تسجيل ولا معرّف عميل مقدَّمًا من المسؤول).
- يجب أن تكون نقاط نهاية OAuth المكتشفة https؛ ولا يُقبل http العادي إلا للعنوان المحلي (loopback)، لموفّر يعمل على الجهاز نفسه أثناء التطوير.
- يُشتق معرّف إعادة التوجيه من
BASE_URL(أو أولCORS_ORIGIN)، لذا يجب أن تكون هذه القيمة العنوان الذي يصله المتصفح فعليًا، ويجب تسجيلها لدى الموفّرين الذين يثبّتون معرّفات إعادة التوجيه.