تولید محتوا

Firebase Genkit یک رابط کاربری آسان برای تولید محتوا با LLM ها فراهم می کند.

مدل ها

مدل‌ها در Firebase Genkit کتابخانه‌ها و انتزاعی‌هایی هستند که دسترسی به LLM‌های مختلف Google و غیر Google را فراهم می‌کنند.

مدل‌ها کاملاً برای مشاهده‌پذیری مجهز شده‌اند و با ابزارهای ادغام‌شده توسط Genkit Developer UI ارائه می‌شوند - می‌توانید هر مدلی را با استفاده از runner مدل امتحان کنید.

هنگام کار با مدل ها در 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 Generative جمینی پرو، جمینی پرو ویژن
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)

می توانید گزینه ها را همراه با فراخوانی مدل ارسال کنید. گزینه هایی که پشتیبانی می شوند به مدل و API آن بستگی دارد.

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 از جریان تکه تکه پاسخ های مدل پشتیبانی می کند. برای استفاده از جریان تکه تکه شده، یک تابع callback را به 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))))

فرمت دقیق درخواست تصویر ( https URL، gs URL، data URI) وابسته به مدل است.

فراخوانی تابع (ابزار)

مدل‌های 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" به سادگی اعلان کاربر است:

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,
}}