Menulis plugin Genkit

Kemampuan Firebase Genkit dirancang untuk diperluas melalui plugin. Plugin Genkit adalah modul yang dapat dikonfigurasi dan dapat menyediakan model, pengambil, pengindeks, men-trace penyimpanan, dan banyak lagi. Anda telah melihat cara kerja plugin hanya dengan menggunakan Genkit:

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 project ID Google Cloud pengguna) dan mendaftarkan berbagai model baru, penyemat, dan masih banyak lagi dengan registry Genkit. Registry berfungsi sebagai layanan pencarian untuk tindakan bernama saat runtime serta mendukung UI lokal Genkit untuk menjalankan dan memeriksa model, prompt, dan masih banyak lagi.

Membuat plugin

Di Go, plugin Genkit hanyalah paket yang mematuhi serangkaian konvensi. 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 parameter cfg jika plugin tidak menyediakan opsi konfigurasi apa pun di seluruh plugin).

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

    • Pastikan nilai konfigurasi yang diperlukan telah ditentukan dan tetapkan nilai default pada setelan opsional yang belum ditentukan.
    • Verifikasi bahwa opsi konfigurasi yang diberikan sudah valid secara keseluruhan.
    • Buat resource bersama yang diperlukan oleh plugin lainnya. Sebagai contoh, buat klien untuk setiap layanan yang diakses plugin Anda.

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

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

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

    Untuk opsi plugin apa pun yang berupa nilai secret, seperti kunci API, Anda harus menawarkan opsi Config dan variabel lingkungan default untuk mengonfigurasinya. Dengan begitu, plugin Anda dapat memanfaatkan fitur pengelolaan secret yang 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 akan mengaktifkan beberapa model baru dan penyemat.

Plugin model

Plugin model Genkit menambahkan satu atau beberapa model AI generatif ke registry Genkit. 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 alat pemantauan atau visualisasi tertentu.

Lihat Menulis plugin telemetri Genkit.

Memublikasikan plugin

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

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