אפשר לפרוס תהליכים של Genkit כשירותי אינטרנט באמצעות Cloud Run. בדוגמה הזו נסביר את תהליך הפריסה של תהליך לדוגמה שמוגדר כברירת מחדל.
מתקינים את Google Cloud CLI, אם עדיין לא עשיתם זאת.
יוצרים פרויקט חדש ב-Google Cloud באמצעות מסוף Cloud או בוחרים פרויקט קיים. הפרויקט צריך להיות מקושר לחשבון לחיוב.
אחרי שיוצרים או בוחרים פרויקט, מגדירים את Google Cloud CLI להשתמש בו:
gcloud auth login
gcloud init
יוצרים ספרייה לפרויקט לדוגמה של Genkit:
mkdir -p ~/tmp/genkit-cloud-project
cd ~/tmp/genkit-cloud-project
אם אתם מתכוונים להשתמש בסביבת פיתוח משולבת (IDE), פותחים אותה בספרייה הזו.
מפעילים מודול Go בספריית הפרויקט:
go mod init example/cloudrun
go mod get github.com/firebase/genkit/go
יצירת אפליקציה לדוגמה באמצעות Genkit:
package main import ( "context" "fmt" "log" "net/http" "os" "github.com/firebase/genkit/go/ai" "github.com/firebase/genkit/go/genkit" "github.com/firebase/genkit/go/plugins/googlegenai" "github.com/firebase/genkit/go/plugins/server" ) func main() { ctx := context.Background() // Initialize Genkit with the Google AI plugin and Gemini 2.0 Flash. // Alternatively, use &googlegenai.VertexAI{} and "vertexai/gemini-2.0-flash" // to use Vertex AI as the provider instead. g, err := genkit.Init(ctx, genkit.WithPlugins(&googlegenai.GoogleAI{}), genkit.WithDefaultModel("googleai/gemini-2.0-flash"), ) if err != nil { log.Fatalf("failed to initialize Genkit: %w", err) } flow := genkit.DefineFlow(g, "jokesFlow", func(ctx context.Context, topic string) (string, error) { resp, err := genkit.Generate(ctx, g, ai.WithPrompt(`Tell a short joke about %s. Be creative!`, topic), ) if err != nil { return "", fmt.Errorf("failed to generate joke: %w", err) } return resp.Text(), nil }) mux := http.NewServeMux() mux.HandleFunc("POST /jokesFlow", genkit.Handler(flow)) log.Fatal(server.Start(ctx, "127.0.0.1:"+os.Getenv("PORT"), mux)) }
איך מאפשרים לפונקציה הפרוסה לגשת לפרטי הכניסה ל-API. בוחרים את פרטי הכניסה הנדרשים בהתאם לבחירה שלכם בדוגמה שלמעלה:
Gemini (AI מבית Google)
מוודאים ש-Google AI זמין באזור שלכם.
יוצרים מפתח API ל-Gemini API באמצעות Google AI Studio.
מאפשרים את מפתח ה-API בסביבת Cloud Run:
- במסוף Cloud, מפעילים את Secret Manager API.
- בדף Secret Manager יוצרים סוד חדש שמכיל את מפתח ה-API.
- אחרי שיוצרים את הסוד, באותו דף מקצים לחשבון השירות של המחשוב שמוגדר כברירת מחדל גישה לסוד באמצעות התפקיד Secret Manager Secret Accessor. (אפשר למצוא את השם של חשבון השירות שמוגדר כברירת מחדל ל-Compute בדף IAM).
בשלב מאוחר יותר, כשפורסים את השירות, צריך להפנות לשם הסוד הזה.
Gemini (Vertex AI)
במסוף Cloud, מפעילים את Vertex AI API בפרויקט.
בדף IAM, מוודאים שלחשבון השירות המוגדר כברירת מחדל ל-Compute הוקצה התפקיד Vertex AI User.
הסוד היחיד שצריך להגדיר במדריך הזה הוא של ספק המודל, אבל באופן כללי צריך לבצע פעולה דומה לכל שירות שבו נעשה שימוש בתהליך.
אופציונלי: אפשר לנסות את התהליך בממשק המשתמש למפתחים:
מגדירים את הסביבה המקומית של ספק המודל שבחרתם:
Gemini (AI מבית Google)
export GEMINI_API_KEY=<your API key>
Gemini (Vertex AI)
export GOOGLE_CLOUD_PROJECT=<your project ID>
export GOOGLE_CLOUD_LOCATION=us-central1
gcloud auth application-default login
מפעילים את ממשק המשתמש:
genkit start -- go run .
בממשק המשתמש של המפתחים (http://localhost:4000/), מריצים את התהליך:
לוחצים על jokesFlow.
בכרטיסייה Input JSON, נותנים נושא למודל:
"bananas"
לוחצים על Run.
אם עד עכשיו הכול פועל כצפוי, אפשר ליצור ולפרוס את התהליך:
Gemini (AI מבית Google)
gcloud run deploy --port 3400 \ --update-secrets=GEMINI_API_KEY=<your-secret-name>:latest
Gemini (Vertex AI)
gcloud run deploy --port 3400 \ --set-env-vars GOOGLE_CLOUD_PROJECT=<your-gcloud-project> \ --set-env-vars GOOGLE_CLOUD_LOCATION=us-central1
(
GOOGLE_CLOUD_LOCATION
מגדיר את האזור של Vertex API שבו רוצים להשתמש).בוחרים באפשרות
N
כשמתבקשים לאפשר הפעלות לא מאומתות. אם תבחרו בתשובהN
, השירות יהיה מותנה בפרטי כניסה ל-IAM. במאמר אימות במסמכי התיעוד של Cloud Run מוסבר איך מספקים את פרטי הכניסה האלה.
בסיום הפריסה, הכלי ידפיס את כתובת ה-URL של השירות. אפשר לבדוק את זה באמצעות curl
:
curl -X POST https://<service-url>/menuSuggestionFlow \
-H "Authorization: Bearer $(gcloud auth print-identity-token)" \
-H "Content-Type: application/json" -d '"bananas"'