جارٍ إنشاء المحتوى

توفّر أداة Firebase Genkit واجهة سهلة لإنشاء المحتوى باستخدام النماذج اللغوية الكبيرة.

الطرُز

النماذج في Firebase Genkit هي مكتبات وتجريدات توفر إمكانية الوصول إلى النماذج اللغوية الكبيرة المختلفة التي توفّرها Google وغير التابعة لها

النماذج مُعدَّة بالكامل للملاحظة وهي مزوّدة بأدوات التي تقدمها واجهة مستخدم مطوّري برامج Genkit -- يمكنك تجربة أي نموذج باستخدام لعداء النماذج.

عند العمل مع نماذج في Genkit، تحتاج أولاً إلى تهيئة النموذج الذي تريدون العمل معهم. يتم تنفيذ إعداد النموذج بواسطة نظام المكوّن الإضافي. ضِمن في هذا المثال، أنت بصدد إعداد مكوّن Vertex AI الإضافي الذي يوفّر Gemini النماذج.

انتقال

import "github.com/firebase/genkit/go/ai"
import "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
}

لاستخدام النماذج التي يوفرها المكون الإضافي، يجب أن يشير إلى النموذج المحدد والإصدار:

انتقال

gemini15pro := vertexai.Model("gemini-1.5-pro")

الطُرز المتوافقة

توفِّر 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 وظيفة مساعدة بسيطة لإنشاء المحتوى باستخدام النماذج.

لاستدعاء النموذج فقط:

انتقال

request := ai.GenerateRequest{Messages: []*ai.Message{
  {Content: []*ai.Part{ai.NewTextPart("Tell me a joke.")}},
}}
response, err := gemini15pro.Generate(ctx, &request, nil)
if err != nil {
  return err
}

responseText, err := response.Text()
if err != nil {
  return err
}
fmt.Println(responseText)

يمكنك تمرير الخيارات مع طلب النموذج. الخيارات المتاحة تعتمد على النموذج وواجهة برمجة التطبيقات الخاصة به.

انتقال

request := ai.GenerateRequest{
  Messages: []*ai.Message{
      {Content: []*ai.Part{ai.NewTextPart("Tell me a joke about dogs.")}},
  },
  Config: ai.GenerationCommonConfig{
      Temperature:     1.67,
      StopSequences:   []string{"abc"},
      MaxOutputTokens: 3,
  },
}

عرض الردود تدريجيًا

تتيح Genkit البث المقسّم لردود النموذج:

انتقال

لاستخدام البث المقسّم، اضبط دالة استدعاء إلى Generate() على النحو التالي:

request := ai.GenerateRequest{Messages: []*ai.Message{
  {Content: []*ai.Part{ai.NewTextPart("Tell a long story about robots and ninjas.")}},
}}
response, err := gemini15pro.Generate(
  ctx,
  &request,
  func(ctx context.Context, grc *ai.GenerateResponseChunk) error {
      text, err := grc.Text()
      if err != nil {
          return err
      }
      fmt.Printf("Chunk: %s\n", text)
      return nil
  })
if err != nil {
  return err
}

// You can also still get the full response.
responseText, err := response.Text()
if err != nil {
  return err
}
fmt.Println(responseText)

إدخال متعدد الوسائط

إذا كان النموذج يتيح إدخال البيانات المتعدّدة الوسائط، يمكنك ضبط الطلبات الخاصة بالصور:

انتقال

imageBytes, err := os.ReadFile("img.jpg")
if err != nil {
  return err
}
encodedImage := base64.StdEncoding.EncodeToString(imageBytes)

request := ai.GenerateRequest{Messages: []*ai.Message{
  {Content: []*ai.Part{
      ai.NewTextPart("Describe the following image."),
      ai.NewMediaPart("", "data:image/jpeg;base64,"+encodedImage),
  }},
}}
gemini15pro.Generate(ctx, &request, nil)

إنّ التنسيق الدقيق لطلب الصورة (عنوان URL الخاص بالصورة: https وgs ومعرّف الموارد المنتظم (URI) data) هو يعتمد على النموذج.

استدعاء الدوال (الأدوات)

توفر نماذج Genkit واجهة لاستدعاء الدوال، للنماذج التي تتيح بها.

انتقال

myJoke := &ai.ToolDefinition{
  Name:        "myJoke",
  Description: "useful when you need a joke to tell",
  InputSchema: make(map[string]any),
  OutputSchema: map[string]any{
      "joke": "string",
  },
}
ai.DefineTool(
  myJoke,
  nil,
  func(ctx context.Context, input map[string]any) (map[string]any, error) {
      return map[string]any{"joke": "haha Just kidding no joke! got you"}, nil
  },
)

request := ai.GenerateRequest{
  Messages: []*ai.Message{
      {Content: []*ai.Part{ai.NewTextPart("Tell me a joke.")},
          Role: ai.RoleUser},
  },
  Tools: []*ai.ToolDefinition{myJoke},
}
response, err := gemini15pro.Generate(ctx, &request, nil)

سيؤدي هذا الإجراء إلى استدعاء الأدوات تلقائيًا لتلبية طلب المستخدم.

جارٍ تسجيل سجلّ الرسائل

تتيح نماذج Genkit الاحتفاظ بسجلّ للرسائل المرسَلة إلى النموذج وردودها، والتي يمكنك استخدامها لإنشاء تجارب تفاعلية، مثل روبوتات الدردشة.

انتقال

في المطالبة الأولى بالجلسة، يكون "السجل" هو ببساطة مطالبة المستخدم:

history := []*ai.Message{{
  	Content: []*ai.Part{ai.NewTextPart(prompt)},
  	Role:    ai.RoleUser,
  }}

request := ai.GenerateRequest{Messages: history}
response, err := gemini15pro.Generate(context.Background(), &request, nil)

عندما تتلقّى ردًا، يمكنك إضافته إلى السجلّ:

history = append(history, response.Candidates[0].Message)

يمكنك إنشاء تسلسل لهذا السجلّ والاحتفاظ به في قاعدة بيانات أو مساحة تخزين جلسة. في ما يتعلّق بالطلبات اللاحقة للمستخدمين، يُرجى إضافتها إلى السجلّ قبل الاتصال Generate():

history = append(history, &ai.Message{
  Content: []*ai.Part{ai.NewTextPart(prompt)},
  Role:    ai.RoleUser,
})

request = ai.GenerateRequest{Messages: history}
response, err = gemini15pro.Generate(ctx, &request, nil)

إذا كان النموذج الذي تستخدمه يدعم دور النظام، يمكنك استخدام النموذج السجلّ لإعداد رسالة النظام:

انتقال

history = []*ai.Message{{
  	Content: []*ai.Part{ai.NewTextPart("Talk like a pirate.")},
  	Role:    ai.RoleSystem,
  }}