كتابة مكونات Genkit الإضافية

تم تصميم إمكانات Genkit بحيث يمكن توسيع نطاقها باستخدام المكوّنات الإضافية. مكونات Genkit الإضافية هي وحدات قابلة للضبط يمكنها توفير نماذج وأدوات استرجاع وفهرسة ومستودعات أثر وغير ذلك. لقد شاهدتَ بالفعل الإضافات قيد التنفيذ باستخدام Genkit فقط:

import (
    "github.com/firebase/genkit/go/ai"
    "github.com/firebase/genkit/go/genkit"
    "github.com/firebase/genkit/go/plugins/googlegenai"
    "github.com/firebase/genkit/go/plugins/server"
)
g, err := genkit.Init(ctx,
    ai.WithPlugins(
        &googlegenai.GoogleAI{APIKey: ...},
        &googlegenai.VertexAI{ProjectID: "my-project", Location: "us-central1"},
    ),
)

يأخذ المكوّن الإضافي Vertex AI الإعدادات (مثل رقم تعريف مشروع Google Cloud للمستخدم) ويُسجِّل مجموعة متنوعة من النماذج الجديدة وأدوات التضمين وغير ذلك في قاعدة بيانات مسجّلي Genkit. يعمل السجلّ كخدمة بحث عن الإجراءات المُسمّاة أثناء وقت التشغيل، ويشغّل واجهة المستخدم المحلية في Genkit لتشغيل النماذج والطلبات وغيرها من الإجراءات وفحصها.

إنشاء مكوّن إضافي

في Go، المكوّن الإضافي Genkit هو حزمة تلتزم بمجموعة صغيرة من الاصطلاحات. يمكن أن تحتوي وحدة واحدة على عدة إضافات.

رقم تعريف المزوّد

يجب أن يحتوي كل مكوّن إضافي على سلسلة معرّف فريدة تميّزه عن المكوّنات الإضافية الأخرى. يستخدم Genkit هذا المعرّف كمساحة اسم لكل مورد تحدّده الإضافة، لمنع تعارض الأسماء مع الإضافات الأخرى.

على سبيل المثال، إذا كان المكوّن الإضافي يتضمّن رقم تعريف yourplugin ويقدّم طرازًا باسم text-generator، سيكون معرّف الطراز الكامل هو yourplugin/text-generator.

يجب تصدير رقم تعريف مقدّم الخدمة هذا ويجب تحديده مرة واحدة لплагин الخاص بك واستخدامه باستمرار عند طلبه من خلال إحدى وظائف Genkit.

const providerID = "yourplugin"

عمليات التصدير العادية

يجب أن يحدّد كل مكوّن إضافي الرموز التالية ويصدّرها للتوافق مع واجهة genkit.Plugin:

  • نوع بنية يحوي جميع خيارات الضبط المقبولة من المكوّن الإضافي

    بالنسبة إلى أي خيارات مكوّن إضافي ذات قيم سرية، مثل مفاتيح واجهة برمجة التطبيقات، يجب تقديم خيار إعداد ومتغيّر بيئة تلقائي لضبطه. يتيح ذلك للإضافة الاستفادة من ميزات إدارة الأسرار التي يوفّرها العديد من مقدّمي الاستضافة (مثل Cloud Secret Manager الذي يمكنك استخدامه مع Cloud Run). على سبيل المثال:

    type MyPlugin struct {
        APIKey string
        // Other options you may allow to configure...
    }
    
  • طريقة Name() في البنية التي تُعرِض معرّف موفِّر الخدمة

  • طريقة Init() في البنية مع بيان مثل ما يلي:

    func (m *MyPlugin) Init(ctx context.Context, g *genkit.Genkit) error
    

    في هذه الدالة، نفِّذ أي خطوات إعداد يتطلّبها المكوّن الإضافي. على سبيل المثال:

    • تأكَّد من تحديد أي قيم ضبط مطلوبة وخصِّص قيمًا تلقائية لأي إعدادات اختيارية غير محدّدة.
    • تأكَّد من أنّ خيارات الضبط المقدَّمة صالحة معًا.
    • أنشئ أيّ موارد مشترَكة تتطلّبها بقية المكوّنات الإضافية. على سبيل المثال، يمكنك إنشاء عملاء لأي خدمات يصل إليها المكوّن الإضافي.

    يجب ألا تفترض الموارد التي يوفّرها المكوّن الإضافي، قدر الإمكان، أنّه تم تثبيت أيّ مكوّنات إضافية أخرى قبل هذا المكوّن الإضافي.

    سيتمّ استدعاء هذه الطريقة تلقائيًا أثناء genkit.Init() عندما يُمرِّر المستخدِم المكوّن الإضافي إلى الخيار WithPlugins().

إنشاء ميزات المكوّنات الإضافية

يمكن أن يؤدي مكوّن إضافي واحد إلى تفعيل العديد من الميزات الجديدة في Genkit. على سبيل المثال، يؤدي المكوّن الإضافي Vertex AI إلى تفعيل العديد من النماذج الجديدة بالإضافة إلى أداة تضمين.

المكوّنات الإضافية للنماذج

تضيف مكوّنات Genkit الإضافية لنموذج Genkit نموذجًا واحدًا أو أكثر من نماذج الذكاء الاصطناعي التوليدي إلى ملف تنقّل Genkit. يمثّل النموذج أي نموذج توليدي يمكنه تلقّي طلب كمدخل وإنشاء نص أو وسائط أو بيانات كمخرج.

راجِع مقالة كتابة مكوّن إضافي لنموذج Genkit.

المكوّنات الإضافية لميزة "القياس عن بُعد"

تعمل مكوّنات Genkit الإضافية لبيانات القياس عن بُعد على ضبط أداة OpenTelemetry في Genkit لتصدير عمليات التتبّع والمقاييس والسجلّات إلى أداة رصد أو رسوم بيانية معيّنة.

راجِع مقالة كتابة مكوّن إضافي لقياس أداء Genkit.

نشر مكوّن إضافي

يمكن نشر مكوّنات Genkit الإضافية كحِزم Go عادية. لزيادة سهولة العثور على حِزمك، يجب أن يتضمّن اسمها genkit في مكان ما لكي يمكن العثور عليها من خلال بحث بسيط على pkg.go.dev. إليك بعض الخيارات الجيدة:

  • github.com/yourorg/genkit-plugins/servicename
  • github.com/yourorg/your-repo/genkit/servicename