Menulis plugin Genkit

Kemampuan Firebase Genkit dirancang untuk diperluas oleh plugin. Alat Kesehatan plugin adalah modul yang dapat dikonfigurasi yang dapat menyediakan model, {i> retriever<i}, pengindeks, {i>trace store<i}, dan banyak lagi. Anda telah melihat cara kerja plugin hanya dengan menggunakan Alat Kesehatan:

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
}

Plugin Vertex AI mengambil konfigurasi (seperti antarmuka pengguna project ID) dan mendaftarkan berbagai model baru, sematan, dan lainnya dengan registry genkit. Registry berfungsi sebagai layanan pencarian untuk tindakan yang diberi nama di dan mendukung UI lokal Genkit untuk menjalankan dan memeriksa model, prompt, dan banyak lagi.

Membuat plugin

Di Go, plugin Genkit hanyalah paket yang mematuhi yang sesuai. Satu modul dapat berisi beberapa plugin.

ID Penyedia

Setiap plugin harus memiliki string ID unik yang membedakannya dari plugin lainnya. Genkit menggunakan ID ini sebagai namespace untuk setiap resource yang ditentukan plugin Anda, untuk mencegah konflik penamaan dengan plugin lain.

Misalnya, jika plugin Anda memiliki ID yourplugin dan menyediakan model yang disebut text-generator, ID model lengkapnya adalah yourplugin/text-generator.

Anda tidak perlu mengekspor ID penyedia, tetapi Anda harus menentukannya sekali untuk plugin Anda dan menggunakannya secara konsisten saat diperlukan oleh fungsi Genkit.

const providerID = "yourplugin"

Ekspor standar

Setiap plugin harus menentukan dan mengekspor simbol berikut:

  • Fungsi Init() dengan deklarasi seperti berikut:

    func Init(ctx context.Context, cfg *Config) (err error)
    

    Hapus parameter yang tidak digunakan (misalnya, Anda mungkin tidak memiliki cfg jika plugin Anda tidak menyediakan konfigurasi seluruh plugin lainnya).

    Dalam fungsi ini, lakukan langkah-langkah penyiapan yang diperlukan oleh plugin Anda. Misalnya:

    • Pastikan nilai konfigurasi yang diperlukan telah ditentukan dan tetapkan nilai default ke setelan opsional yang tidak ditentukan.
    • Memverifikasi bahwa opsi konfigurasi yang diberikan sudah valid bersama-sama.
    • Buat resource bersama yang diperlukan oleh plugin Anda lainnya. Sebagai membuat klien untuk setiap layanan yang diakses plugin Anda.

    Sebisa mungkin, resource yang disediakan oleh plugin Anda tidak berasumsi bahwa pengguna telah melakukan tindakan selain memanggil Init.

    Anda harus menentukan dan mengekspor fungsi ini meskipun plugin Anda tidak memerlukan setiap inisialisasi. Dalam hal ini, Init bisa saja menampilkan error nil.

  • Jenis struct Config. Jenis ini harus mengenkapsulasi semua konfigurasi opsi yang disetujui oleh Init.

    Untuk opsi plugin apa pun yang merupakan nilai secret, seperti kunci API, Anda harus menawarkan opsi Config dan variabel lingkungan default untuk dikonfigurasi anotasi. Dengan begitu, plugin Anda dapat memanfaatkan fitur pengelolaan rahasia ditawarkan oleh banyak penyedia hosting (seperti Cloud Secret Manager, yang dapat Anda gunakan dengan Cloud Run). Contoh:

    type Config struct {
    	ExampleAPIKey string
    }
    
    func Init(cfg *Config) (err error) {
    	apiKey := cfg.ExampleAPIKey
    	if apiKey == "" {
    		apiKey = os.Getenv("EXAMPLE_API_KEY")
    	}
    	if apiKey == "" {
    		return fmt.Errorf(`the Example plug-in requires you to specify an API
     key for the Example service, either by passing it to example.Init() or by
     setting the EXAMPLE_API_KEY environment variable`)
    	}
    
    	return nil
    }
    

Membuat fitur plugin

Satu plugin dapat mengaktifkan banyak hal baru di dalam Genkit. Misalnya, Plugin Vertex AI mengaktifkan beberapa model baru serta alat sematan.

Plugin model

Plugin model Genkit menambahkan satu atau beberapa model AI generatif ke Genkit {i>registry<i}. Model mewakili semua model generatif yang mampu menerima prompt sebagai input dan menghasilkan teks, media, atau data sebagai output.

Lihat Menulis plugin model Genkit.

Plugin telemetri

Plugin telemetri Genkit mengonfigurasi instrumentasi OpenTelemetry Genkit untuk mengekspor trace, metrik, dan log ke pemantauan atau visualisasi tertentu menyediakan alat command line gcloud.

Lihat Menulis plugin telemetri Genkit.

Memublikasikan plugin

Plugin genkit dapat dipublikasikan sebagai paket Go normal. Untuk meningkatkan visibilitas, paket Anda harus memiliki genkit di suatu tempat dalam namanya sehingga dapat ditemukan dengan pencarian sederhana di pkg.go.dev. Salah satu dari yang berikut ini adalah pilihan yang baik:

  • github.com/yourorg/genkit-plugins/servicename
  • github.com/yourorg/your-repo/genkit/servicename