توفّر أداة Firebase Genkit واجهة سهلة لإنشاء المحتوى باستخدام النماذج اللغوية الكبيرة.
الطرُز
النماذج في Firebase Genkit هي مكتبات وتجريدات توفر إمكانية الوصول إلى العديد من النماذج اللغوية الكبيرة التابعة لها وغير التابعة لها.
النماذج مُعدَّة بالكامل للملاحظة وهي مزوّدة بأدوات التي تقدمها واجهة مستخدم مطوّري برامج Genkit -- يمكنك تجربة أي نموذج باستخدام لعداء النماذج.
عند العمل مع نماذج في Genkit، تحتاج أولاً إلى تهيئة النموذج الذي تريدون العمل معهم. يتم تنفيذ إعداد النموذج بواسطة نظام المكوّن الإضافي. ضِمن في هذا المثال، أنت بصدد إعداد مكوّن Vertex AI الإضافي الذي يوفّر Gemini النماذج.
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
}
لاستخدام النماذج التي يوفرها المكون الإضافي، يجب أن يشير إلى النموذج المحدد والإصدار:
model := vertexai.Model("gemini-1.5-flash")
الطُرز المتوافقة
توفِّر Genkit دعمها للنموذج من خلال نظام المكوّنات الإضافية الخاص بها. المكونات الإضافية التالية مدعومة رسميًا:
المكوّن الإضافي | الطرُز |
---|---|
الذكاء الاصطناعي التوليدي من Google | Gemini Pro وGemini Pro Vision |
Google Vertex AI | Gemini Pro وGemini Pro Vision وGemini 1.5 Flash وGemini 1.5 Pro وImagen2 |
أولاما | العديد من النماذج المحلية، بما في ذلك Gemma وLlama 2 وMistral وغيرها |
راجِع مستندات كل مكوّن إضافي للحصول على معلومات الإعداد والاستخدام.
كيفية إنشاء المحتوى
توفّر Genkit وظيفة مساعدة بسيطة لإنشاء المحتوى باستخدام النماذج.
لاستدعاء النموذج فقط:
responseText, err := ai.GenerateText(ctx, model, ai.WithTextPrompt("Tell me a joke."))
if err != nil {
return err
}
fmt.Println(responseText)
يمكنك تمرير الخيارات مع طلب النموذج. الخيارات المتاحة تعتمد على النموذج وواجهة برمجة التطبيقات الخاصة به.
response, err := ai.Generate(ctx, model,
ai.WithTextPrompt("Tell me a joke about dogs."),
ai.WithConfig(ai.GenerationCommonConfig{
Temperature: 1.67,
StopSequences: []string{"cat"},
MaxOutputTokens: 3,
}))
عرض الردود تدريجيًا
تتيح Genkit البث المقسّم لردود النماذج. لاستخدام البث المقسّم
تمرير دالة معاودة الاتصال إلى Generate()
:
response, err := ai.Generate(ctx, gemini15pro,
ai.WithTextPrompt("Tell a long story about robots and ninjas."),
// stream callback
ai.WithStreaming(
func(ctx context.Context, grc *ai.GenerateResponseChunk) 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 := ai.Generate(ctx, gemini15pro, ai.WithMessages(
ai.NewUserMessage(
ai.NewTextPart("Describe the following image."),
ai.NewMediaPart("", "data:image/jpeg;base64,"+encodedImage))))
إنّ التنسيق الدقيق لطلب الصورة (عنوان URL الخاص بالصورة: https
وgs
ومعرّف الموارد المنتظم (URI) data
) هو
يعتمد على النموذج.
استدعاء الدوال (الأدوات)
توفر نماذج Genkit واجهة لاستدعاء الدوال، للنماذج التي تتيح بها.
myJokeTool := ai.DefineTool(
"myJoke",
"useful when you need a joke to tell",
func(ctx context.Context, input *any) (string, error) {
return "haha Just kidding no joke! got you", nil
},
)
response, err := ai.Generate(ctx, gemini15pro,
ai.WithTextPrompt("Tell me a joke."),
ai.WithTools(myJokeTool))
سيؤدي هذا الإجراء إلى استدعاء الأدوات تلقائيًا لتلبية طلب المستخدم.
جارٍ تسجيل سجلّ الرسائل
تتيح نماذج Genkit الاحتفاظ بسجلّ للرسائل المرسَلة إلى النموذج وردودها، والتي يمكنك استخدامها لإنشاء تجارب تفاعلية، مثل روبوتات الدردشة.
في المطالبة الأولى بالجلسة، يكون "السجل" هو ببساطة مطالبة المستخدم:
history := []*ai.Message{{
Content: []*ai.Part{ai.NewTextPart(prompt)},
Role: ai.RoleUser,
}}
response, err := ai.Generate(context.Background(), gemini15pro, ai.WithMessages(history...))
عندما تتلقّى ردًا، يمكنك إضافته إلى السجلّ:
history = append(history, response.Candidates[0].Message)
يمكنك إنشاء تسلسل لهذا السجلّ والاحتفاظ به في قاعدة بيانات أو مساحة تخزين جلسة.
في ما يتعلّق بالطلبات اللاحقة للمستخدمين، يُرجى إضافتها إلى السجلّ قبل الاتصال
Generate()
:
history = append(history, &ai.Message{
Content: []*ai.Part{ai.NewTextPart(prompt)},
Role: ai.RoleUser,
})
response, err = ai.Generate(ctx, gemini15pro, ai.WithMessages(history...))
إذا كان النموذج الذي تستخدمه يدعم دور النظام، يمكنك استخدام النموذج السجلّ لإعداد رسالة النظام:
history = []*ai.Message{{
Content: []*ai.Part{ai.NewTextPart("Talk like a pirate.")},
Role: ai.RoleSystem,
}}