יישומי פלאגין של מודל Genkit מוסיפים ל-Genkit מודל אחד או יותר של בינה מלאכותית גנרטיבית מרשם. מודל מייצג כל מודל גנרטיבי שיכול לקבל הנחיה כקלט וליצור טקסט, מדיה או נתונים כפלט.
לפני שמתחילים
במאמר כתיבה של פלאגינים של Genkit מוסבר איך לכתוב כל סוג של פלאגין של Genkit, כולל פלאגינים של מודלים. חשוב לזכור שכל פלאגין צריך לייצא פונקציית Init
, שהמשתמשים אמורים להפעיל לפני שהם משתמשים בפלאגין.
הגדרות המודל
באופן כללי, פלאגין של מודל יבצע קריאת ai.DefineModel
אחת או יותר
פונקציית Init
– פעם אחת לכל דגם הפלאגין מספק ממשק
ל.
הגדרת מודל מורכבת משלושה רכיבים:
- מטא-נתונים שמצהירים על יכולות המודל.
- סוג תצורה עם פרמטרים ספציפיים שנתמכים על ידי המודל.
- פונקציית גנרציה שמקבלת
ai.GenerateRequest
ומחזירהai.GenerateResponse
, שסביר להניח שנעשה בו שימוש במודל AI כדי ליצור את הפונקציה השנייה.
ככלל, כך זה נראה בקוד:
type MyModelConfig struct {
ai.GenerationCommonConfig
AnotherCustomOption string
CustomOption int
}
name := "my-model"
genkit.DefineModel(g,
providerID, name,
&ai.ModelInfo{
Label: name,
Supports: &ai.ModelInfoSupports{
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)?
},
Versions: []string{"my-model-001", "..."},
},
func(ctx context.Context,
genRequest *ai.ModelRequest,
_ ai.ModelStreamingCallback,
) (*ai.ModelResponse, 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.ModelRequest
// 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.ModelResponse.
response, err := genResponseFromAPIResponse(apiResponse)
if err != nil {
return nil, err
}
return response, nil
},
)
הצהרת יכולות של מודל
כל הגדרת מודל חייבת לכלול, כחלק מהמטא-נתונים שלה, ערך ai.ModelCapabilities
שמצהיר על התכונות שהמודל תומך בהן.
Genkit משתמש במידע הזה כדי לקבוע התנהגויות מסוימות, כמו אימות
אם קלטים מסוימים חוקיים עבור המודל. לדוגמה, אם המודל לא תומך באינטראקציות עם כמה סבבים, אסור להעביר לו היסטוריית הודעות.
שימו לב שההצהרות האלה מתייחסות ליכולות של המודל, כפי שהן סופקו על ידי הפלאגין, ולא בהכרח למפות אחד לאחד ליכולות של של המודל הבסיסי וה-API של המודל. לדוגמה, גם אם ה-API של המודל לא מספק דרך ספציפית להגדרת הודעות מערכת, הפלאגין עדיין עשוי להצהיר על תמיכה בתפקיד המערכת ולהטמיע אותו כלוגיקה מיוחדת מוסיפה הודעות מערכת להנחיה של המשתמש.
הגדרת הסכימה של הגדרות המודל
כדי לציין את אפשרויות היצירה שהמודל תומך בהן, מגדירים וייצואים סוג תצורה. Genkit כולל סוג ai.GenerationCommonConfig
שמכיל
שזמינות לעיתים קרובות בשירותי מודלים של בינה מלאכותית גנרטיבית,
להטמיע או להשתמש בהם מייד.
פונקציית היצירה צריכה לוודא שהבקשה מכילה את סוג האפשרויות הנכון.
טרנספורמציה של בקשות ותשובות
פונקציית הגנרציה מבצעת את העבודה העיקרית של הפלאגין של מודל Genkit:
הופכים את ai.GenerateRequest
מהפורמט הנפוץ של Genkit לפורמט
שנתמך על ידי ה-API של המודל, ואז משנה את התגובה
את המודל בפורמט ai.GenerateResponse
שמשמש את Genkit.
לפעמים, כדי לעקוף את המגבלות של המודל, צריך לבצע מניפולציה או עיבוד של הנתונים. לדוגמה, אם המודל לא תומך במקור ב-system
יכול להיות שתצטרכו להפוך את הודעת המערכת של ההנחיה למודל משתמש
זוג הודעות.
ייצוא
בנוסף למשאבים שכל הפלאגינים חייבים לייצא – פונקציית Init
וסוג Config
– פלאגין של מודל צריך לייצא גם את הפריטים הבאים:
סוג של הגדרת גנרציה, כמו שהסברנו קודם.
פונקציית
Model
שמחזירה הפניות למודלים שהוגדרו בפלאגין. לרוב, זה יכול להיות פשוט:func Model(name string) *ai.Model { return ai.LookupModel(providerID, name) }
אופציונלי: פונקציית
DefineModel
שמאפשרת למשתמשים להגדיר מודלים שהפלאגין יכול לספק, אבל לא מגדירים אותו באופן אוטומטי. יש כדאי להשתמש בפונקציה כזו בשתי סיבות עיקריות:הפלאגין מספק גישה למספר גדול מדי של מודלים, ולכן לא ניתן לרשום בפועל כל אחד מהם. לדוגמה, הפלאגין Ollama יכול לספק גישה לעשרות מודלים שונים, והם נוספים בתדירות גבוהה יותר. מסיבה זו, לא יגדיר באופן אוטומטי כל מודל, ובמקום זאת המשתמש יצטרך לקרוא
DefineModel
לכל מודל שבו רוצים להשתמש.כדי לתת למשתמשים את היכולת להשתמש במודלים חדשים שעדיין לא הוספתם לפלאגין.
הפונקציה
DefineModel
של הפלאגין היא בדרך כלל ממשק לקצה קדמי שלai.DefineModel
שמגדיר פונקציית יצירת מודלים, אבל מאפשר למשתמש לציין את שם המודל ואת יכולות המודל.