بوت الذكاء الاصطناعي - أدوات مخصصة

:bookmark: يشرح هذا الدليل كيفية إنشاء أدوات الذكاء الاصطناعي المخصصة وتهيئتها ودمجها داخل إضافة Discourse AI، مما يتيح للمسؤولين توسيع إمكانيات الروبوت باستخدام وظائف JavaScript المعرفة من قبل المستخدم.

:person_raising_hand: مستوى المستخدم المطلوب: مسؤول

الأدوات هي وظائف قابلة للبرمجة يمكن لروبوت الذكاء الاصطناعي استخدامها لأداء مهام محددة أو استرداد معلومات تتجاوز مجرد الاستجابات النصية. هذه الأدوات هي نصوص برمجية أو عمليات تكامل تسمح للروبوت بالتفاعل مع واجهات برمجة التطبيقات الخارجية، أو معالجة البيانات، أو تنفيذ وظائف إضافية لتوسيع قدراته.

ملخص

تغطي هذه الوثائق ما يلي:

  • إنشاء أداة ذكاء اصطناعي مخصصة جديدة
  • تهيئة معلمات وأكواد الأدوات
  • واجهات برمجة التطبيقات المتاحة لأكواد الأدوات
  • دمج الأدوات المخصصة مع شخصيات الذكاء الاصطناعي
  • اختبار الأدوات المخصصة واستكشاف أخطائها وإصلاحها

إنشاء أداة ذكاء اصطناعي مخصصة جديدة

لإنشاء أداة ذكاء اصطناعي جديدة:

  1. انتقل إلى لوحة المسؤول > الإضافات (Plugins) > الذكاء الاصطناعي لـ Discourse (Discourse AI) > الأدوات (Tools)
  2. انقر على “أداة جديدة” (New Tool) (يمكنك استخدام الإعدادات المسبقة الموجودة للتعرف على الخيارات)
  3. املأ الحقول التالية:
    • الاسم (Name): اسم الأداة كما يتم تقديمه إلى نموذج اللغة الكبير (LLM)
    • الوصف (Description): وصف الأداة كما يتم تقديمه إلى نموذج اللغة الكبير (LLM)
    • الملخص (Summary): ملخص لما تفعله الأداة للمساعدة في توفيرها للمستخدمين (يتم عرضها في التفاصيل)
    • المعلمات (Parameters): عرّف المدخلات التي تحتاجها أداتك كما يتم تقديمها إلى نموذج اللغة الكبير (LLM)
    • الكود (Script): كود JavaScript الذي يشغل أداتك
  4. انقر على “حفظ” (Save)

تهيئة أكواد الأدوات

واجهات برمجة التطبيقات المتاحة

يمكن لأكواد أدواتك الوصول إلى واجهات برمجة التطبيقات التالية:

  1. طلبات HTTP:

    http.get(url, options)
    http.post(url, options)
    http.put(url, options)
    http.patch(url, options)
    http.delete(url, options)
    

    استخدم هذه للتفاعل مع الخدمات الخارجية. يمكنك استخدام options لتحديد رؤوس HTTP والنص الأساسي:

    http.get(url, { headers: { "Authorization": "Bearer key" } })
    http.post(url, { headers: { "Content-Type": "application/json" }, body: { key: "value" } })
    http.patch(url, { headers: { "Authorization": "Bearer key" }, body: "some body" })
    http.delete(url, { headers: { "Authorization": "Bearer key" } })
    http.put(url, { headers: { "Authorization": "Bearer key" }, body: "some body" })
    

    تعيد جميع طرق HTTP القيمة { status: number, body: string }.

  2. تكامل نموذج اللغة الكبير (LLM):

    llm.truncate(text, length)
    

    يقوم بقص النص إلى طول رمز محدد بناءً على أداة الترميز الخاصة بنموذج اللغة الكبير (LLM) المُكوَّن.

    llm.generate(prompt, options)
    

    يولد نصًا باستخدام نموذج اللغة الكبير (LLM) المُكوَّن. يمكن أن يكون المطالب (prompt) سلسلة نصية بسيطة أو كائنًا منظمًا مثل { messages: [{ type: "system", content: "..." }, { type: "user", content: "..." }] }. تتضمن الخيارات json: true لطلب إخراج JSON وتحليله تلقائيًا، بالإضافة إلى temperature و top_p و max_tokens و stop_sequences.

  3. تكامل الرفع المخصص (RAG)

    index.search(query, { filenames: ["file.pdf"], limit: 10 })
    

    يبحث في أجزاء مستندات RAG المفهرسة المرفقة بهذه الأداة. يُرجع Array<{ fragment: string, metadata: string | null }> مرتبة حسب الصلة. الحد الافتراضي هو 10، والحد الأقصى 200.

    index.getFile(filename)
    

    يسترد المحتوى الكامل لملف RAG مُحمَّل باسمه الدقيق. يُرجع النص الكامل أو null إذا لم يتم العثور عليه.

  4. دعم الرفع (Upload)

    upload.create(filename, base_64_content)
    

    ينشئ عملية رفع جديدة. يُرجع { id: number, url: string, short_url: string }.

    upload.getUrl(shortUrl)
    

    بالنظر إلى عنوان URL قصير (مثل upload://12345)، فإنه يُرجع عنوان URL الكامل المناسب لشبكة توصيل المحتوى (CDN).

    upload.getBase64(uploadIdOrShortUrl, maxPixels)
    

    يجلب المحتوى المشفر بـ base64 لعملية رفع موجودة. يقبل معرف الرفع (رقم) أو عنوان URL قصير (سلسلة). معلمة maxPixels اختيارية لتغيير حجم الصورة تلقائيًا (الافتراضي: 10,000,000).

  5. التحكم في سلسلة التنفيذ (Execution chain control)

    chain.setCustomRaw(raw)
    

    يحدد المحتوى الخام النهائي لمنشور الروبوت ويوقف سلسلة تنفيذ الأداة. مفيد للأدوات التي تنشئ المحتوى النهائي بالكامل (مثل أدوات إنشاء الصور).

  6. إدارة الأسرار (Secrets management)

    secrets.get(alias)
    

    يُرجع قيمة بيانات الاعتماد المرتبطة بالاسم المستعار المحدد. يتم تعريف الأسماء المستعارة في تكوين عقود الأسرار الخاصة بالأداة ويتم ربطها بأسرار الذكاء الاصطناعي في لوحة المسؤول. يثير خطأ إذا كان الاسم المستعار غير مُعلن عنه، أو غير مرتبط، أو كانت بيانات الاعتماد مفقودة.

    const apiKey = secrets.get("my_api_key");
    
  7. تكامل Discourse

    يمكن للأدوات التفاعل مباشرة مع بيانات Discourse:

    discourse.baseUrl              // عنوان URL الأساسي للموقع
    discourse.search(params)       // إجراء بحث في Discourse
    discourse.getPost(post_id)     // الحصول على تفاصيل المنشور (بما في ذلك المحتوى الخام)
    discourse.getTopic(topic_id)   // الحصول على تفاصيل الموضوع (العلامات، الفئة، إلخ.)
    discourse.getUser(id_or_username)  // الحصول على تفاصيل المستخدم
    discourse.createTopic(params)  // إنشاء موضوع جديد
    discourse.createPost(params)   // إنشاء منشور/رد جديد
    discourse.editPost(post_id, raw, options)    // تعديل محتوى المنشور
    discourse.editTopic(topic_id, updates, options) // تعديل خصائص الموضوع (العلامات، الفئة، الرؤية)
    discourse.createChatMessage(params) // إرسال رسالة دردشة
    discourse.createStagedUser(params)  // إنشاء مستخدم مرحلي
    discourse.getAgent(name)       // الحصول على وكيل ذكاء اصطناعي آخر (مع طريقة respondTo)
    discourse.updateAgent(name, updates) // تحديث تكوين وكيل ذكاء اصطناعي
    discourse.getCustomField(type, id, key)      // قراءة حقل مخصص على المنشور/الموضوع/المستخدم
    discourse.setCustomField(type, id, key, value) // تعيين حقل مخصص على المنشور/الموضوع/المستخدم
    
  8. كائن السياق (Context object)

    يوفر كائن context معلومات حول مكان تشغيل الأداة:

    • سياق محادثة الروبوت: context.post_id، context.topic_id، context.private_message، context.participants، context.username، context.user_id
    • سياق الدردشة: context.message_id، context.channel_id، context.username
    • سياق الأتمتة: context.post_id، context.topic_id، context.username، context.user_id، context.feature_name، context.feature_context
    • الخصائص المشتركة: context.site_url، context.site_title، context.site_description

الدوال المطلوبة

يجب أن ينفذ الكود الخاص بك:

  • invoke(params): الدالة الرئيسية التي يتم تنفيذها عند استدعاء الأداة

وقد ينفذ بشكل اختياري:

  • details(): تُرجع سلسلة نصية (يمكن أن تتضمن HTML أساسي) تصف تنفيذ الأداة، تُعرض في واجهة الدردشة
  • customSystemMessage(): يتم استدعاؤها أثناء تجميع المطالبات (وليس أثناء استدعاء الأداة). تُرجع سلسلة نصية مضافة إلى المطالبة النظامية، أو null/undefined للتخطي. لديها وصول إلى الكائنات context و discourse و index.

مثال على الكود:

function invoke(params) {
  let result = http.get("https://api.example.com/data?query=" + params.query);
  return JSON.parse(result.body);
}

function details() {
  return "Fetched data from Example API";
}

القيود والأمان

  • مهلة التنفيذ: مهلة افتراضية تبلغ 2000 مللي ثانية لوقت معالجة الكود. يتوقف المؤقت أثناء طلبات HTTP الخارجية (http.*) ومكالمات نموذج اللغة الكبير (llm.generate)، لذلك يتم احتساب وقت المعالجة الخاص بالكود فقط.
  • الذاكرة: حد أقصى 10 ميغابايت لـ V8 heap.
  • طلبات HTTP: حد أقصى 20 طلبًا لكل تنفيذ أداة.
  • بيئة معزولة (Sandboxed Environment): يتم تشغيل الأكواد في بيئة JavaScript V8 مقيدة (عبر MiniRacer). لا يوجد وصول إلى متغيرات المتصفح العامة، أو نظام ملفات المضيف، أو مكتبات جانب الخادم. يتم توجيه طلبات الشبكة عبر الواجهة الخلفية لـ Discourse.

اختبار أداتك

يجب عليك اختبار أي أداة تبنيها للتأكد من أن النتائج التي سيتم تزويد نموذج اللغة الكبير (LLM) بها تتوافق مع توقعاتك.

دمج الأدوات مع شخصيات الذكاء الاصطناعي

لإضافة أداتك المخصصة إلى شخصية الذكاء الاصطناعي:

  1. انتقل إلى لوحة المسؤول > الإضافات (Plugins) > الذكاء الاصطناعي لـ Discourse (Discourse AI) > الشخصيات (Personas)
  2. قم بتحرير شخصية موجودة أو إنشاء واحدة جديدة
  3. في قسم “الأدوات” (Tools)، سترى أدواتك المخصصة مدرجة جنبًا إلى جنب مع الأدوات المدمجة
  4. حدد أداتك المخصصة لإضافتها إلى الشخصية

الأدوات المخصصة قيد العمل

بمجرد تزويد نموذج اللغة الكبير (LLM) بالأداة المخصصة، يمكنه استخدامها لتعزيز المحادثة.

استكشاف الأخطاء وإصلاحها

إذا لم تعمل أداتك كما هو متوقع:

  1. استخدم واجهة الاختبار للتأكد من أنها تتصرف كما هو متوقع لمدخلاتك.
  2. تأكد من أن مجموعتك ضمن ai_bot_debugging_allowed_groups. يتمتع أعضاء هذه المجموعة بوصول كامل إلى نصوص محادثات الروبوت؛ يمكنك عرض سجلات الذكاء الاصطناعي هناك.
  3. إذا كان هناك أي شيء غير متوقع يحدث، قم بزيارة https://SITENAME/logs للتحقق من وجود أخطاء.

موارد إضافية

Discourse AI - AI bot

AI bot - Agents

14 إعجابًا