تضيف المكوّنات الإضافية لنماذج Genkit نموذجًا واحدًا أو أكثر من نماذج الذكاء الاصطناعي التوليدي إلى Genkit قاعدة بيانات المسجّلين. يمثل النموذج أي نموذج توليدي قادر على تلقي كإدخال وإنشاء النص أو الوسائط أو البيانات كإخراج.
قبل البدء
يمكنك الاطّلاع على كتابة المكوّنات الإضافية لـ Genkit للحصول على معلومات حول الكتابة.
أي نوع من مكوّنات Genkit الإضافية، بما في ذلك المكوّنات الإضافية للنماذج. على وجه الخصوص، لاحظ أن
يجب أن يصدِّر كل مكوّن إضافي دالة Init
، والتي من المتوقّع أن يستدعيها المستخدمون.
قبل استخدام المكون الإضافي.
تعريفات النماذج
وبشكل عام، سيُجري المكوّن الإضافي للنموذج طلبًا واحدًا أو أكثر من استدعاءات ai.DefineModel
في
Init
: مرة واحدة لكل نموذج يوفّر المكوّن الإضافي واجهة
إليه.
يتألف تعريف النموذج من ثلاثة مكونات:
- البيانات الوصفية التي تحدد إمكانيات النموذج.
- يشير ذلك المصطلح إلى نوع ضبط يتضمّن أي معلَمات معيّنة يتيحها النموذج.
- دالة إنشاء تقبل
ai.GenerateRequest
وتعرضai.GenerateResponse
، من المفترض أن يستخدم نموذج الذكاء الاصطناعي (AI) لإنشاء المحتوى الأخير.
على مستوى عالٍ، إليك كيف يبدو ذلك في الرموز البرمجية:
type MyModelConfig struct {
ai.GenerationCommonConfig
CustomOption int
AnotherCustomOption string
}
ai.DefineModel(
providerID, "my-model",
&ai.ModelMetadata{
Label: "my-model",
Supports: ai.ModelCapabilities{
Multiturn: true, // Does the model support multi-turn chats?
SystemRole: true, // Does the model support syatem messages?
Media: false, // Can the model accept media input?
Tools: false, // Does the model support function calling (tools)?
},
},
func(ctx context.Context,
genRequest *ai.GenerateRequest,
_ ai.ModelStreamingCallback,
) (*ai.GenerateResponse, error) {
// Verify that the request includes a configuration that conforms to
// your schema .
if _, ok := genRequest.Config.(MyModelConfig); !ok {
return nil, fmt.Errorf("request config must be type MyModelConfig")
}
// Use your custom logic to convert Genkit's ai.GenerateRequest
// into a form usable by the model's native API.
apiRequest, err := apiRequestFromGenkitRequest(genRequest)
if err != nil {
return nil, err
}
// Send the request to the model API, using your own code or the
// model API's client library.
apiResponse, err := callModelAPI(apiRequest)
if err != nil {
return nil, err
}
// Use your custom logic to convert the model's response to Genkin's
// ai.GenerateResponse.
response, err := genResponseFromAPIResponse(apiResponse)
if err != nil {
return nil, err
}
return response, nil
},
)
الإعلان عن إمكانات النموذج
يجب أن يحتوي كل تعريف نموذج، كجزء من بياناته الوصفية، على
ai.ModelCapabilities
التي توضح الميزات المتوافقة مع النموذج.
وتستخدم Genkit هذه المعلومات لتحديد سلوكيات معينة، مثل التحقق من
ما إذا كانت بعض المدخلات صالحة للنموذج. على سبيل المثال، إذا كان النموذج
لا يتوافق مع التفاعلات المتعددة الأدوار، لذا من الخطأ تمرير رسالة
السجل.
تجدر الإشارة إلى أنّ هذه البيانات تشير إلى إمكانات النموذج على النحو المقدَّم بواسطة المكون الإضافي، ولا يتم بالضرورة تعيين واحد لواحد بقدرات النموذج الأساسي وواجهة برمجة التطبيقات للنموذج. على سبيل المثال، حتى إذا لم تتضمن واجهة برمجة التطبيقات للطراز تقديم طريقة معينة لتعريف رسائل النظام، فقد يظل المكون الإضافي الإعلان عن الدعم لدور النظام وتنفيذه كمنطق خاص يدرج رسائل النظام في رسالة مطالبة المستخدم.
تحديد مخطط تكوين النموذج
لتحديد خيارات الإنشاء التي يدعمها النموذج، حدد وصدِّر
نوع التهيئة. تحتوي مجموعة Genkit على النوع ai.GenerationCommonConfig
الذي يحتوي على
المتاحة دائمًا بواسطة خدمات نموذج الذكاء الاصطناعي التوليدي، التي يمكنك
تضمينها أو استخدامها بشكل مباشر
يجب أن تتحقق دالة الإنشاء من أن الطلب يحتوي على القيم نوع الخيارات.
تحويل الطلبات والردود
تنفذ دالة الإنشاء العمل الأساسي للمكوّن الإضافي لنموذج Genkit:
تحويل ai.GenerateRequest
من التنسيق الشائع في Genkit إلى تنسيق
التي تدعمها واجهة برمجة التطبيقات لنموذجك، ثم تحويل الاستجابة من
نموذجك إلى التنسيق ai.GenerateResponse
الذي تستخدمه Genkit.
وقد يتطلب ذلك أحيانًا تدليك البيانات أو التلاعب بها للتحايل على النموذج
والقيود. على سبيل المثال، إذا لم يكن نموذجك متوافقًا في الأصل مع system
قد تحتاج إلى تحويل رسالة النظام الخاصة بالمطالبة إلى نموذج مستخدم
زوج الرسائل.
عمليات التصدير
بالإضافة إلى الموارد التي يجب على جميع المكوّنات الإضافية تصديرها، وهي Init
والنوع Config
— يجب أن يصدِّر المكوِّن الإضافي للنموذج أيضًا
التالي:
نوع إعداد الإنشاء، كما تمت مناقشته سابقًا.
دالة
Model
التي تعرض مراجع لنماذج المكوّن الإضافي المحددة. وفي كثير من الأحيان، يمكن أن يكون ذلك ببساطة:func Model(name string) *ai.Model { return ai.LookupModel(providerID, name) }
اختياري: دالة
DefineModel
، التي تتيح للمستخدمين تحديد النماذج التي التي يمكن أن يوفرها المكون الإضافي، لكن لا يمكنك تحديدها تلقائيًا. تتوفر هناك سببان رئيسيان وراء رغبتك في توفير هذه الدالة:يوفر المكون الإضافي إمكانية الدخول إلى عدد كبير جدًا من النماذج لتسجيل كل نموذج عمليًا واحد. على سبيل المثال، يمكن أن يوفر المكون الإضافي Ollama إمكانية الوصول إلى عشرات من نماذج مختلفة، مع إضافة المزيد من النماذج بشكل متكرر. لهذا السبب، لا تحدد أي نماذج تلقائيًا، وبدلاً من ذلك تتطلب من المستخدم استدعاء
DefineModel
لكل نموذج يريد استخدامه.لمنح المستخدمين القدرة على استخدام النماذج التي تم إصدارها حديثًا والتي لديك لم تتم إضافتها بعد إلى المكون الإضافي.
تكون دالة
DefineModel
للمكوّن الإضافي عادةً واجهة أمامية لـai.DefineModel
تحدد دالة الإنشاء، ولكن تتيح للمستخدم تحديد اسم النموذج وإمكانات النماذج.