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.
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
—sebanyak satu kali untuk setiap model, yang antarmukanya disediakan oleh
plugin.
Definisi model terdiri dari tiga komponen:
- Metadata yang mendeklarasikan kemampuan model.
- Jenis konfigurasi dengan parameter tertentu yang didukung oleh model.
- Fungsi pembuatan yang menerima
ai.GenerateRequest
dan menampilkanai.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 tersebut.
Genkit menggunakan informasi ini untuk menentukan perilaku tertentu, seperti memverifikasi
apakah input tertentu bersifat valid untuk model tersebut atau tidak. Misalnya, jika model
tidak mendukung interaksi multi-turn, maka meneruskan histori pesan
merupakan kesalahan.
Perhatikan bahwa deklarasi ini merujuk pada kemampuan model seperti yang disediakan oleh plugin Anda, dan belum tentu memetakan one-to-one ke 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 yang tepat.
Mentransformasi permintaan dan respons
Fungsi pembuatan mengerjakan tugas utama plugin model Genkit:
mengubah ai.GenerateRequest
dari format umum Genkit ke 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 pengiriman pesan atau manipulasi data untuk mengatasi
keterbatasan model. Misalnya, jika model Anda tidak mendukung pesan system
secara native,
Anda mungkin perlu mengubah pesan sistem prompt menjadi
pasangan pesan pengguna-model.
Ekspor
Selain resource yang harus diekspor oleh semua plugin— fungsi Init
dan jenis Config
— plugin model juga harus mengekspor
hal 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, tetapi 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. Misalnya, plugin Ollama dapat memberikan akses ke berbagai model, dan masih banyak lagi yang ditambahkan secara berkala. Karena alasan ini, plugin tidak secara otomatis mendefinisikan model apa pun, dan sebaliknya mengharuskan pengguna untuk memanggil
DefineModel
untuk setiap model yang ingin mereka gunakan.Untuk memberi pengguna kemampuan menggunakan model yang baru dirilis, yang belum ditambahkan ke plugin Anda.
Fungsi
DefineModel
plugin biasanya merupakan frontend untukai.DefineModel
yang mendefinisikan fungsi pembuatan, tetapi memungkinkan pengguna menentukan nama model dan kemampuan model.