הפלאגין של Google Generative AI

הפלאגין של Google Generative AI מספק ממשקים למודלים של Gemini מבית Google דרך Gemini API או דרך Gemini API in Vertex AI.

תצורה

ההגדרה תלויה בספק שבחרתם:

‫AI מבית Google

כדי להשתמש בפלאגין הזה, מייבאים את החבילה googlegenai ומעבירים את googlegenai.GoogleAI אל WithPlugins() במפעיל של Genkit:

import "github.com/firebase/genkit/go/plugins/googlegenai"
g, err := genkit.Init(context.Background(), ai.WithPlugins(&googlegenai.GoogleAI{}))

כדי להשתמש בפלאגין, צריך מפתח API ל-Gemini API. אפשר לקבל אותו מ-Google AI Studio.

מגדירים את הפלאגין כך שישתמש במפתח ה-API שלכם באחת מהדרכים הבאות:

  • מגדירים את משתנה הסביבה GEMINI_API_KEY למפתח ה-API.

  • מציינים את מפתח ה-API כשמאתחלים את הפלאגין:

    ai.WithPlugins(&googlegenai.GoogleAI{APIKey: "YOUR_API_KEY"})
    

    עם זאת, אל תטמיעו את מפתח ה-API ישירות בקוד! מומלץ להשתמש בתכונה הזו רק בשילוב עם שירות כמו Cloud Secret Manager או שירות דומה.

Vertex AI

כדי להשתמש בפלאגין הזה, מייבאים את החבילה googlegenai ומעבירים את googlegenai.VertexAI אל WithPlugins() במפעיל של Genkit:

import "github.com/firebase/genkit/go/plugins/googlegenai"
g, err := genkit.Init(context.Background(), genkit.WithPlugins(&googlegenai.VertexAI{}))

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

  • כברירת מחדל, המשתנה googlegenai.VertexAI מקבל את מזהה הפרויקט ב-Google Cloud ממשתנה הסביבה GOOGLE_CLOUD_PROJECT.

    אפשר גם להעביר את הערך הזה ישירות:

    genkit.WithPlugins(&googlegenai.VertexAI{ProjectID: "my-project-id"})
    
  • כברירת מחדל, googlegenai.VertexAI מקבל את המיקום של Vertex AI API ממשתנה הסביבה GOOGLE_CLOUD_LOCATION.

    אפשר גם להעביר את הערך הזה ישירות:

    genkit.WithPlugins(&googlegenai.VertexAI{Location: "us-central1"})
    
  • כדי לספק פרטי כניסה ל-API, צריך להגדיר את Application Default Credentials של Google Cloud.

    1. כדי לציין את פרטי הכניסה:

      • אם אתם מריצים את התהליך מסביבת Google Cloud (Cloud Functions,‏ Cloud Run וכו'), ההגדרה הזו מוגדרת באופן אוטומטי.

      • בסביבת הפיתוח המקומית, מריצים את הפקודה הבאה:

      gcloud auth application-default login
    2. בנוסף, חשוב לוודא שהחשבון קיבל את התפקיד Vertex AI User ב-IAM (roles/aiplatform.user). אפשר לעיין במסמכים בנושא בקרת גישה ב-Vertex AI.

שימוש

מודלים גנרטיביים

כדי לקבל הפניה לדגם נתמך, צריך לציין את המזהה שלו בתור googlegenai.GoogleAIModel או googlgenai.VertexAIModel:

model := googlegenai.GoogleAIModel(g, "gemini-2.0-flash")

לחלופין, אפשר ליצור ModelRef שמתאיל את שם המודל להגדרות שלו:

modelRef := googlegenai.GoogleAIModelRef("gemini-2.0-flash", &googlegenai.GeminiConfig{
    Temperature: 0.5,
    MaxOutputTokens: 500,
    // Other configuration...
})

הדגמים הבאים נתמכים: gemini-1.5-pro,‏ gemini-1.5-flash,‏ gemini-2.0-pro,‏ gemini-2.0-flash ודגמים ניסיוניים אחרים.

להפניות למודלים יש שיטה Generate() שמפעילה את Google API:

resp, err := genkit.Generate(ctx, g, ai.WithModel(modelRef), ai.WithPrompt("Tell me a joke."))
if err != nil {
      return err
}

log.Println(resp.Text())

מידע נוסף זמין במאמר יצירת תוכן באמצעות מודלים של AI.

הטמעת מודלים

כדי לקבל הפניה למודל הטמעה נתמך, צריך לציין את המזהה שלו בתור googlegenai.GoogleAIEmbedder או googlgenai.VertexAIEmbedder:

embeddingModel := googlegenai.GoogleAIEmbedder(g, "text-embedding-004")

המודלים הבאים נתמכים:

  • AI מבית Google

    text-embedding-004 וגם embedding-001

  • Vertex AI

    textembedding-gecko@003, textembedding-gecko@002, textembedding-gecko@001, text-embedding-004, textembedding-gecko-multilingual@001, text-multilingual-embedding-002, ו-multimodalembedding

להפניות של מוטמעים יש שיטה Embed() שמפעילה את Google AI API:

resp, err := ai.Embed(ctx, embeddingModel, ai.WithDocs(userInput))
if err != nil {
      return err
}

אפשר גם להעביר את ה-Embedder ל-method‏ Index() של ה-indexer ול-method‏ Retrieve() של ה-retriever:

if err := ai.Index(ctx, myIndexer, ai.WithDocs(docsToIndex...)); err != nil {
      return err
}
resp, err := ai.Retrieve(ctx, myRetriever, ai.WithDocs(userInput))
if err != nil {
      return err
}

מידע נוסף זמין במאמר יצירה עם שיפור לאחזור (RAG).