תחילת העבודה עם Genkit באמצעות Go (אלפא)

ספריות Firebase Genkit ל-Go זמינות עכשיו בתצוגה מקדימה! כי ספריות Go נמצאות כרגע בגרסת אלפא. יכול להיות שיופיעו שינויים ב-API ובפונקציונליות כמו עם התקדמות הפיתוח. מומלץ להשתמש בה רק לצורך פיתוח אב טיפוס ולצורך בדיקה.

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

כדי להתחיל להשתמש ב-Genkit, צריך להתקין את ה-CLI של Genkit ולהריץ את genkit init בפרויקט Go. בהמשך הדף הזה מוסבר איך עושים זאת.

דרישות

  • צריך לעבור לגרסה 1.22 ואילך. מעבר לקטע הורדה והתקנה ב- מסמכי Go הרשמיים.

  • Node.js מגרסה 20 ואילך (ל-CLI ולממשק המשתמש של Genkit). בקטע הבא אפשר למצוא המדריך הקצר להתקנת Node.

התקנת Genkit

  1. אם עדיין לא התקנתם את Node 20 ואילך במערכת, כדאי לעשות זאת עכשיו.

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

    כדי להתקין את nvm:

    Linux,‏ macOS וכו'

    מריצים את הפקודה הבאה:

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
    

    Windows

    מורידים ומפעילים את מנהל ההתקנה כפי שמוסבר ב-Nvm-Windows docs.

    לאחר מכן, כדי להתקין את הצומת ואת npm, פותחים מעטפת חדשה ומריצים את הפקודה הבאה הפקודה:

    nvm install 20
    
  2. כדי להתקין את ה-CLI של Genkit, מריצים את הפקודה הבאה:

    npm i -g genkit
    

    הפקודה הזו מתקינה את ה-CLI של Genkit בספריית ההתקנה של Node, כדי שאפשר יהיה להשתמש בו מחוץ לפרויקט Node.

יוצרים פרויקט לדוגמה וחוקרים אותו

  1. יוצרים ספריית פרויקט חדשה:

    mkdir genkit-intro && cd genkit-intro
    
  2. מפעילים פרויקט Genkit:

    genkit init
    
    1. בוחרים את Go כסביבה של סביבת זמן הריצה.

    2. בחירת המודל:

      Gemini (AI מבית Google)

      הדרך הפשוטה ביותר להתחיל היא באמצעות Google AI Gemini API. מוודאים שהיא זמינה באזור שלכם.

      יוצרים מפתח API בשביל Gemini API באמצעות Google AI Studio. לאחר מכן, מגדירים את GOOGLE_GENAI_API_KEY במשתנה הסביבה למפתח שלכם:

      export GOOGLE_GENAI_API_KEY=<your API key>
      

      Gemini (Vertex AI)

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

      gcloud services enable aiplatform.googleapis.com
      export GCLOUD_PROJECT=<your project ID>
      export GCLOUD_LOCATION=us-central1
      

      מחירון Vertex AI

    3. נותנים שם למודול. לדוגמה: example/genkit-intro

    4. בוחרים תשובות ברירת מחדל לשאר השאלות, והתיקייה של הפרויקט תיושם עם קוד לדוגמה.

    הפקודה genkit init יוצרת מודול Go לדוגמה ומתקינה את ותלויות הנדרשות. הקובץ main.go מכיל תהליך יחיד, menuSuggestionFlow, שמנחה LLM להציע פריט למסעדה עם עיצוב נתון.

    הקובץ הזה נראה בערך כך (שלבי ההגדרה של הפלאגין עשוי להיראות שונה אם בוחרים ב-Vertex AI):

    package main
    
    import (
    	"context"
    	"errors"
    	"fmt"
    	"log"
    
    	// Import Genkit and the Google AI plugin
    	"github.com/firebase/genkit/go/ai"
    	"github.com/firebase/genkit/go/genkit"
    	"github.com/firebase/genkit/go/plugins/googleai"
    )
    
    func main() {
    	ctx := context.Background()
    
    	// Initialize the Google AI plugin. When you pass nil for the
    	// Config parameter, the Google AI plugin will get the API key from the
    	// GOOGLE_GENAI_API_KEY environment variable, which is the recommended
    	// practice.
    	if err := googleai.Init(ctx, nil); err != nil {
    		log.Fatal(err)
    	}
    
    	// Define a simple flow that prompts an LLM to generate menu suggestions.
    	genkit.DefineFlow("menuSuggestionFlow", func(ctx context.Context, input string) (string, error) {
    		// The Google AI API provides access to several generative models. Here,
    		// we specify gemini-1.5-flash.
    		m := googleai.Model("gemini-1.5-flash")
    		if m == nil {
    			return "", errors.New("menuSuggestionFlow: failed to find model")
    		}
    
    		// Construct a request and send it to the model API (Google AI).
    		resp, err := ai.Generate(ctx, m,
    			ai.WithConfig(&ai.GenerationCommonConfig{Temperature: 1}),
    			ai.WithTextPrompt(fmt.Sprintf(`Suggest an item for the menu of a %s themed restaurant`, input)))
    		if err != nil {
    			return "", err
    		}
    
    		// Handle the response from the model API. In this sample, we just
    		// convert it to a string. but more complicated flows might coerce the
    		// response into structured output or chain the response into another
    		// LLM call.
    		text := resp.Text()
    		return text, nil
    	})
    
    	// Initialize Genkit and start a flow server. This call must come last,
    	// after all of your plug-in configuration and flow definitions. When you
    	// pass a nil configuration to Init, Genkit starts a local flow server,
    	// which you can interact with using the developer UI.
    	if err := genkit.Init(ctx, nil); err != nil {
    		log.Fatal(err)
    	}
    }
    
    

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

  3. עכשיו אפשר להריץ ולגלות את התכונות של Genkit ואת הפרויקט לדוגמה באופן מקומי במחשב. מורידים ומפעילים את ממשק המשתמש למפתחים של Genkit:

    genkit start
    

    איזה כיף שנכנסת אל
ממשק המשתמש למפתחים של Genkit

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

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

  4. ממשק המשתמש של Genkit למפתחים מוריד ופותח באופן אוטומטי כשמריצים את הפקודה genkit start.

    ממשק המשתמש למפתחים מאפשר לכם לראות אילו תהליכים הגדרתם ואילו מודלים הגדרתם, להריץ אותם ולבדוק את עקבות ההפעלות הקודמות. כדאי לנסות כמה מהתכונות האלה:

    • בכרטיסייה Run תופיע רשימה של כל התהליכים הקיימים. כל המודלים שהוגדרו על ידי יישומי פלאגין.

      לוחצים על menuSuggestionFlow ומנסים להריץ אותו עם טקסט קלט כלשהו (למשל, "cat"). אם הכל יתבצע כראוי, תקבלו הצעה לתפריט של מסעדה עם נושא חתולים.

    • בכרטיסייה Inspect תוצג היסטוריית ההפעלות של התהליך. לכל תהליך תוכלו לראות את הפרמטרים שהועברו לתהליך ואת המעקב אחרי כל שלב במהלך הפעלתו.