Menulis plugin model Genkit

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.

Sebelum memulai

Baca Menulis plugin Genkit untuk mengetahui informasi tentang penulisan segala jenis plugin Genkit, termasuk plugin model. Secara khusus, perhatikan bahwa setiap plugin harus mengekspor fungsi Init, yang diharapkan akan dipanggil oleh pengguna sebelum menggunakan plugin.

Definisi model

Biasanya, plugin model akan melakukan satu atau beberapa panggilan ai.DefineModel di fungsi Init—satu kali untuk setiap model, plugin menyediakan antarmuka tempat mesin terhubung.

Definisi model terdiri dari tiga komponen:

  1. Metadata yang mendeklarasikan kemampuan model.
  2. Jenis konfigurasi dengan parameter tertentu yang didukung oleh model.
  3. Fungsi pembuatan yang menerima ai.GenerateRequest dan menampilkan ai.GenerateResponse, mungkin menggunakan model AI untuk membuat model yang kedua.

Pada tingkat tinggi, berikut ini tampilannya dalam kode:

type MyModelConfig struct {
	ai.GenerationCommonConfig
	CustomOption int
	AnotherCustomOption string
}
ai.DefineModel(
	providerID, "my-model",
	&ai.ModelMetadata{
		Label: "my-model",
		Supports: ai.ModelCapabilities{
			Multiturn:  true,  // Does the model support multi-turn chats?
			SystemRole: true,  // Does the model support syatem messages?
			Media:      false, // Can the model accept media input?
			Tools:      false, // Does the model support function calling (tools)?
		},
	},
	func(ctx context.Context,
		genRequest *ai.GenerateRequest,
		_ ai.ModelStreamingCallback,
	) (*ai.GenerateResponse, error) {
		// Verify that the request includes a configuration that conforms to
		// your schema .
		if _, ok := genRequest.Config.(MyModelConfig); !ok {
			return nil, fmt.Errorf("request config must be type MyModelConfig")
		}

		// Use your custom logic to convert Genkit's ai.GenerateRequest
		// into a form usable by the model's native API.
		apiRequest, err := apiRequestFromGenkitRequest(genRequest)
		if err != nil {
			return nil, err
		}

		// Send the request to the model API, using your own code or the
		// model API's client library.
		apiResponse, err := callModelAPI(apiRequest)
		if err != nil {
			return nil, err
		}

		// Use your custom logic to convert the model's response to Genkin's
		// ai.GenerateResponse.
		response, err := genResponseFromAPIResponse(apiResponse)
		if err != nil {
			return nil, err
		}

		return response, nil
	},
)

Mendeklarasikan kemampuan model

Setiap definisi model harus berisi, sebagai bagian dari metadatanya, Nilai ai.ModelCapabilities yang mendeklarasikan fitur mana yang didukung model. Genkit menggunakan informasi ini untuk menentukan perilaku tertentu, seperti memverifikasi apakah input tertentu valid untuk model tersebut atau tidak. Misalnya, jika model tidak mendukung interaksi multi-putaran, maka merupakan kesalahan untuk meneruskan pesan sejarah.

Perhatikan bahwa deklarasi ini merujuk pada kemampuan model seperti yang disediakan oleh plugin Anda, dan tidak harus memetakan one-to-one dengan kemampuan model dasar dan API model. Misalnya, meskipun API model tidak menyediakan cara khusus untuk mendefinisikan pesan sistem, plugin Anda mungkin masih mendeklarasikan dukungan untuk peran sistem, dan menerapkannya sebagai logika khusus yang menyisipkan pesan sistem ke dalam prompt pengguna.

Menentukan skema konfigurasi model Anda

Untuk menetapkan opsi pembuatan yang didukung model, tentukan dan ekspor jenis konfigurasi. Genkit memiliki jenis ai.GenerationCommonConfig yang berisi opsi yang sering didukung oleh layanan model AI generatif, yang juga dapat disematkan atau digunakan secara langsung.

Fungsi pembuatan harus memverifikasi bahwa permintaan berisi jenis opsi.

Mentransformasi permintaan dan respons

Fungsi pembuatan mengerjakan tugas utama plugin model Genkit: mengubah ai.GenerateRequest dari format umum Genkit ke dalam format yang didukung oleh API model Anda, lalu mengubah respons dari model Anda ke dalam format ai.GenerateResponse yang digunakan oleh Genkit.

Terkadang, hal ini mungkin memerlukan pemijatan atau manipulasi data untuk mengatasi model keterbatasan praktik. Misalnya, jika model Anda tidak mendukung system secara native Anda mungkin perlu mengubah pesan sistem prompt menjadi pasangan pesan teks.

Ekspor

Selain resource yang harus diekspor oleh semua plugin—Init dan jenis Config. Plugin model juga harus mengekspor berikut ini:

  • Jenis konfigurasi pembuatan, seperti yang telah dibahas sebelumnya.

  • Fungsi Model, yang menampilkan referensi ke model yang ditentukan plugin Anda. Sering kali, hal ini bisa berupa:

    func Model(name string) *ai.Model {
        return ai.LookupModel(providerID, name)
    }
    
  • Opsional: Fungsi DefineModel, yang memungkinkan pengguna menentukan model yang yang disediakan oleh plugin Anda, namun tidak Anda tentukan secara otomatis. Ada dua alasan utama mengapa Anda perlu menyediakan fungsi tersebut:

    • Plugin Anda memberikan akses ke terlalu banyak model untuk mendaftarkan masing-masing model secara praktis satu. Misalnya, {i>plugin<i} Ollama dapat memberikan akses ke lusinan berbagai model, dan lebih sering ditambahkan. Karena alasan ini, secara otomatis mendefinisikan model apa pun, dan sebaliknya mengharuskan pengguna untuk memanggil DefineModel untuk setiap model yang ingin mereka gunakan.

    • Untuk memberi pengguna kemampuan dalam menggunakan model yang baru dirilis yang Anda miliki belum ditambahkan ke plugin Anda.

    Fungsi DefineModel plugin biasanya merupakan frontend untuk ai.DefineModel yang mendefinisikan fungsi pembuatan, tetapi memungkinkan pengguna menentukan nama model dan kemampuan model.