כתיבת פלאגינים של Genkit

היכולות של Firebase Genkit נועדו להרחבה באמצעות יישומי פלאגין. הפלאגינים של Genkit הם מודולים שניתנים להתאמה אישית, שיכולים לספק מודלים, שירותי אחזור, שירותי הוספה לאינדקס, מאגרי נתוני מעקב ועוד. כבר ראיתם יישומי פלאגין בפעולה באמצעות Genkit:

import {
	"github.com/firebase/genkit/go/ai"
	"github.com/firebase/genkit/go/plugins/vertexai"
}
// Default to the value of GCLOUD_PROJECT for the project,
// and "us-central1" for the location.
// To specify these values directly, pass a vertexai.Config value to Init.
if err := vertexai.Init(ctx, nil); err != nil {
	return err
}

הפלאגין של Vertex AI מקבל הגדרות (כמו מזהה הפרויקט של המשתמש ב-Google Cloud) ומרשם מגוון מודלים חדשים, רכיבי הטמעה ועוד במרשם של Genkit. המרשם משמש כשירות חיפוש של פעולות בעלות שם בסביבת זמן הריצה, ומפעיל את ממשק המשתמש המקומי של Genkit להפעלה ולבדיקה של מודלים, הנחיות ועוד.

יצירת פלאגין

ב-Go, פלאגין של Genkit הוא פשוט חבילת קוד שתואמת לקבוצה קטנה של מוסכמות. מודול יחיד יכול להכיל מספר יישומי פלאגין.

מזהה הספק

לכל פלאגין חייב להיות מחרוזת מזהה ייחודית שמבדילה אותו מיישומי פלאגין אחרים. Genkit משתמש במזהה הזה כמרחב שמות לכל משאב שהפלאגין מגדיר, כדי למנוע התנגשויות בין שמות עם יישומי פלאגין אחרים.

לדוגמה, אם למפצה יש מזהה yourplugin והוא מספק מודל שנקרא text-generator, מזהה המודל המלא יהיה yourplugin/text-generator.

אין צורך לייצא את מזהה הספק, אבל צריך להגדיר אותו פעם אחת עבור הפלאגין ולהשתמש בו באופן עקבי כשפונקציה של Genkit דורשת זאת.

const providerID = "yourplugin"

ייצוא רגיל

כל פלאגין צריך להגדיר ולייצא את הסמלים הבאים:

  • פונקציית Init() עם הצהרה כמו זו:

    func Init(ctx context.Context, cfg *Config) (err error)
    

    צריך להשמיט פרמטרים שאתם לא משתמשים בהם (לדוגמה, יכול להיות שלא יהיה לכם פרמטר cfg אם הפלאגין לא מספק אפשרויות הגדרה ברמת הפלאגין).

    בפונקציה הזו, מבצעים את כל שלבי ההגדרה הנדרשים לפי הפלאגין. לדוגמה:

    • מוודאים שצוינו כל ערכי ההגדרה הנדרשים ומקצים ערכי ברירת מחדל לכל הגדרה אופציונלית שלא צוינה.
    • מוודאים שאפשרויות התצורה ניתנות לשימוש יחד.
    • יוצרים את המשאבים המשותפים הנדרשים לשאר הפלאגין. לדוגמה, יוצרים לקוחות לכל השירותים שאליהם הפלאגין שלכם ניגש.

    ככל האפשר, המשאבים שהפלאגין מספק לא צריכים להניח שהמשתמש ביצע פעולה כלשהי מלבד קריאה ל-Init.

    צריך להגדיר ולייצא את הפונקציה הזו גם אם הפלאגין לא דורש איפוס. במקרה הזה, הפונקציה Init יכולה פשוט להחזיר את השגיאה nil.

  • סוג struct של Config. הסוג הזה צריך להכיל את כל אפשרויות ההגדרה שמקבל Init.

    בכל אופציה של יישומי פלאגין שהם ערכים סודיים, כמו מפתחות API, צריך להציע גם אפשרות Config וגם משתנה סביבה שמוגדר כברירת מחדל כדי להגדיר אותו. כך הפלאגין יוכל לנצל את תכונות ניהול הסודות של ספקי אירוח רבים (כמו Cloud Secret Manager, שבו אפשר להשתמש ב-Cloud Run). לדוגמה:

    type Config struct {
    	ExampleAPIKey string
    }
    
    func Init(cfg *Config) (err error) {
    	apiKey := cfg.ExampleAPIKey
    	if apiKey == "" {
    		apiKey = os.Getenv("EXAMPLE_API_KEY")
    	}
    	if apiKey == "" {
    		return fmt.Errorf(`the Example plug-in requires you to specify an API
     key for the Example service, either by passing it to example.Init() or by
     setting the EXAMPLE_API_KEY environment variable`)
    	}
    
    	return nil
    }
    

פיתוח תכונות של יישומי פלאגין

פלאגין אחד יכול להפעיל הרבה דברים חדשים ב-Genkit. לדוגמה, הפלאגין של Vertex AI מפעיל כמה מודלים חדשים וגם כלי הטמעה.

יישומי פלאגין של דגם

יישומי פלאגין של מודלים ב-Genkit מוסיפים מודל אחד או יותר של בינה מלאכותית גנרטיבית למרשם של Genkit. מודל מייצג כל מודל גנרטיבי שיכול לקבל הנחיה כקלט וליצור טקסט, מדיה או נתונים כפלט.

כתיבה של פלאגין של מודל Genkit

יישומי פלאגין לטלמטריה

הפלאגינים של טלמטריה של Genkit מגדירים את הכלי של Genkit ל-OpenTelemetry כך שייצא עקבות, מדדים ויומנים לכלי מעקב או כלי וויזואליזציה מסוימים.

למידע נוסף, ראו כתיבת פלאגין טלמטריה של Genkit.

פרסום פלאגין

אפשר לפרסם פלאגינים של Genkit כחבילות Go רגילות. כדי להגדיל את החשיפה של החבילה, כדאי לכלול את הערך genkit בשם שלה, כדי שאפשר יהיה למצוא אותה בחיפוש פשוט ב-pkg.go.dev. אפשר לבחור באחת מהאפשרויות הבאות:

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