Menghasilkan konten

Firebase Genkit menyediakan antarmuka yang mudah untuk menghasilkan konten dengan LLM.

Model

Model di Firebase Genkit adalah library dan abstraksi yang memberikan akses ke berbagai LLM Google dan non-Google.

Model sepenuhnya mendukung kemampuan observasi dan dilengkapi dengan alat integrasi yang disediakan oleh UI Developer Genkit -- Anda dapat mencoba model apa pun menggunakan model runner.

Saat menangani model di Genkit, Anda harus terlebih dahulu mengonfigurasi model yang ingin Anda gunakan. Konfigurasi model dilakukan oleh sistem plugin. Dalam beberapa contoh ini, Anda mengonfigurasi plugin Vertex AI, yang menyediakan model 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
}

Untuk menggunakan model yang disediakan oleh plugin, Anda memerlukan referensi ke model dan versi tertentu:

model := vertexai.Model("gemini-1.5-flash")

Model yang didukung

Genkit menyediakan dukungan model melalui sistem plugin-nya. Plugin berikut ini didukung secara resmi:

Plugin Model
AI Generatif Google Gemini Pro, Gemini Pro Vision
Vertex AI Google Gemini Pro, Gemini Pro Vision, Gemini 1.5 Flash, Gemini 1.5 Pro, Imagen2
Ollama Banyak model lokal, termasuk Gemma, Llama 2, Mistral, dan lainnya

Lihat dokumentasi setiap plugin untuk mengetahui informasi terkait penyiapan dan penggunaan.

Cara membuat konten

Genkit menyediakan fungsi bantuan yang sederhana untuk membuat konten dengan model.

Untuk hanya memanggil model:

responseText, err := ai.GenerateText(ctx, model, ai.WithTextPrompt("Tell me a joke."))
if err != nil {
	return err
}
fmt.Println(responseText)

Anda dapat meneruskan opsi bersama dengan panggilan model. Opsi yang didukung bergantung pada model dan API-nya.

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

Respons aliran data

Genkit mendukung streaming respons model yang terpotong. Untuk menggunakan streaming terpotong, teruskan fungsi callback ke 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())

Input multimodal

Jika model mendukung input multimodal, Anda dapat meneruskan prompt gambar:

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))))

Format yang tepat untuk prompt gambar (URL https, URL gs, URI data) bergantung pada model.

Panggilan fungsi (alat)

Model genkit menyediakan antarmuka untuk panggilan fungsi, untuk model yang mendukungnya.

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))

Tindakan ini akan secara otomatis memanggil alat untuk memenuhi prompt pengguna.

Mencatat histori pesan

Model genkit mendukung pemeliharaan histori pesan yang dikirim ke model dan responsnya, yang dapat Anda gunakan untuk membangun pengalaman interaktif, seperti chatbot.

Pada prompt pertama suatu sesi, "histori" hanyalah prompt pengguna:

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

response, err := ai.Generate(context.Background(), gemini15pro, ai.WithMessages(history...))

Saat menerima respons, tambahkan respons tersebut ke histori:

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

Anda dapat melakukan serialisasi histori ini dan mempertahankannya dalam penyimpanan sesi atau database. Untuk prompt pengguna berikutnya, tambahkan hal tersebut ke histori sebelum memanggil Generate():

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

response, err = ai.Generate(ctx, gemini15pro, ai.WithMessages(history...))

Jika model yang Anda gunakan mendukung peran sistem, Anda dapat menggunakan histori awal untuk menyetel pesan sistem:

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