Firebase Genkit מספק ממשק קל ליצירת תוכן באמצעות מודלים גדולים של שפה.
דגמים
מודלים ב-Firebase Genkit הם ספריות ותאוריות מופשטים שמספקים גישה למגוון מודלים של LLM של Google ושל ספקים אחרים.
המודלים מותאמים באופן מלא לניראות (observability) והם כוללים כלים שילובים שסופקו בממשק המשתמש של Genkit Developer — אפשר לנסות כל מודל באמצעות את המודל מפעיל.
כשעובדים עם מודלים ב-Genkit, צריך קודם להגדיר את המודל שרוצים לעבוד איתו. מערכת הפלאגין מבצעת את הגדרת המודל. בדוגמה הזו מגדירים את הפלאגין של Vertex AI, שמספק מודלים של Gemini.
import {
"github.com/firebase/genkit/go/ai"
"github.com/firebase/genkit/go/genkit"
"github.com/firebase/genkit/go/plugins/googlegenai"
}
// 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 := (&googlegenai.VertexAI{}).Init(ctx, g); err != nil {
return err
}
כדי להשתמש במודלים שסופקו על ידי הפלאגין, צריך הפניה למודל ולגרסה הספציפיים:
model := googlegenai.VertexAIModel(g, "gemini-1.5-flash")
מודלים נתמכים
Genkit מספק תמיכה במודלים באמצעות מערכת הפלאגינים שלו. יש תמיכה רשמית בפלאגינים הבאים:
יישומי פלאגין | דגמים |
---|---|
Google Generative AI | Gemini Pro, Gemini Pro Vision |
Google Vertex AI | Gemini Pro, Gemini Pro Vision, Gemini 1.5 Flash, Gemini 1.5 Pro, Imagen2 |
Ollama | דגמים מקומיים רבים, כולל Gemma, Llama 2, Mistral ועוד |
אפשר לעיין במסמכים של כל פלאגין כדי לקבל מידע על ההגדרה והשימוש.
איך יוצרים תוכן
Genkit מספק פונקציה מסייעת פשוטה ליצירת תוכן באמצעות מודלים.
כדי פשוט לקרוא למודל:
responseText, err := genkit.GenerateText(ctx, g, ai.WithModel(model), ai.WithPromptText("Tell me a joke."))
if err != nil {
return err
}
fmt.Println(responseText)
תוכלו להעביר אפשרויות יחד עם הבקשה למודל. האפשרויות הנתמכות תלויות במודל וב-API שלו.
response, err := genkit.Generate(ctx, g,
ai.WithModel(model),
ai.WithPromptText("Tell me a joke about dogs."),
ai.WithConfig(&ai.GenerationCommonConfig{
Temperature: 1.67,
StopSequences: []string{"cat"},
MaxOutputTokens: 3,
}))
הצגת תשובות באופן שוטף
Genkit תומך בשידור של תשובות מודל בקטעים. כדי להשתמש בסטרימינג מחולק למקטעים, מעבירים פונקציית קריאה חוזרת אל Generate()
:
response, err := genkit.Generate(ctx, g,
ai.WithModel(gemini15pro),
ai.WithPromptText("Tell a long story about robots and ninjas."),
// stream callback
ai.WithStreaming(
func(ctx context.Context, grc *ai.ModelResponseChunk) error {
fmt.Printf("Chunk: %s\n", grc.Text())
return nil
}))
if err != nil {
return err
}
// You can also still get the full response.
fmt.Println(response.Text())
קלט מרובה מצבים
אם המודל תומך בקלט מרובה מצבים, תוכלו להעביר הנחיות לגבי התמונה:
imageBytes, err := os.ReadFile("img.jpg")
if err != nil {
return err
}
encodedImage := base64.StdEncoding.EncodeToString(imageBytes)
resp, err := genkit.Generate(ctx, g,
ai.WithModel(gemini15pro),
ai.WithMessages(
ai.NewUserMessage(
ai.NewTextPart("Describe the following image."),
ai.NewMediaPart("", "data:image/jpeg;base64,"+encodedImage))))
הפורמט המדויק של הנחיה לתמונה (כתובת URL מסוג https
, כתובת URL מסוג gs
, URI מסוג data
) תלוי בדגם.
קריאה לפונקציות (כלים)
מודלים של Genkit מספקים ממשק להפעלת פונקציות, למודלים שתומכים את זה.
myJokeTool := genkit.DefineTool(
g,
"myJoke",
"useful when you need a joke to tell",
func(ctx *ai.ToolContext, input *any) (string, error) {
return "haha Just kidding no joke! got you", nil
},
)
response, err := genkit.Generate(ctx, g,
ai.WithModel(gemini15pro),
ai.WithPromptText("Tell me a joke."),
ai.WithTools(myJokeTool))
הפעולה הזו תפעיל את הכלים באופן אוטומטי כדי למלא את ההנחיה למשתמש.
הקלטת היסטוריית ההודעות
המודלים של Genkit תומכים בשמירת היסטוריה של ההודעות שנשלחו למודל ואת התשובות שלו, שבהן אפשר להשתמש כדי ליצור חוויות אינטראקטיביות, צ'אט בוטים.
בהנחיה הראשונה של סשן, הקטע 'היסטוריה' היא פשוט בקשת המשתמש:
history := []*ai.Message{{
Content: []*ai.Part{ai.NewTextPart(prompt)},
Role: ai.RoleUser,
}}
response, err := genkit.Generate(ctx, g,
ai.WithModel(gemini15pro),
ai.WithMessages(history...))
כשמקבלים תשובה, מוסיפים אותה להיסטוריה:
history = append(history, response.Message)
אפשר לסדר את ההיסטוריה הזו בסריאליזציה ולשמר אותה במסד נתונים או באחסון של סשנים.
כדי להוסיף הנחיות למשתמשים בעתיד, מוסיפים אותן להיסטוריה לפני שמפעילים את הפונקציה Generate()
:
history = append(history, &ai.Message{
Content: []*ai.Part{ai.NewTextPart(prompt)},
Role: ai.RoleUser,
})
response, err = genkit.Generate(ctx, g,
ai.WithModel(gemini15pro),
ai.WithMessages(history...))
אם המודל שבו משתמשים תומך בתפקיד המערכת, אפשר להשתמש היסטוריה כדי להגדיר את הודעת המערכת:
history = []*ai.Message{{
Content: []*ai.Part{ai.NewTextPart("Talk like a pirate.")},
Role: ai.RoleSystem,
}}