Genkit model eklentisi yazma

Genkit model eklentileri, Genkit'e bir veya daha fazla üretken yapay zeka modeli ekler. kayıt otoritesi. Model, alan adına ulaşabilen her türlü üretken giriş olarak istemini ve çıkış olarak metin, medya veya veri oluşturmayı seçebilirsiniz.

Başlamadan önce

Yazma hakkında bilgi edinmek için Genkit eklentileri yazma başlıklı makaleyi okuyun model eklentileri de dahil her tür Genkit eklentisi. Özellikle, her bir her eklenti, kullanıcıların çağırması gereken bir Init işlevini dışa aktarmalıdır. kontrol edin.

Model tanımları

Genellikle bir model eklentisi, kendisinde bir veya daha fazla ai.DefineModel çağrısı yapar Init işlevi: Eklentinin her model için bir arayüz sağladığı .

Bir model tanımı üç bileşenden oluşur:

  1. Modelin özelliklerini açıklayan meta veriler.
  2. Modelin desteklediği belirli parametrelere sahip bir yapılandırma türü.
  3. ai.GenerateRequest kabul eden ve ai.GenerateResponse, ikincisini oluşturmak için muhtemelen yapay zeka modeli kullanıyor.

Özet olarak, kodda aşağıdaki gibi görünür:

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

Model özelliklerini bildirme

Her model tanımı, meta verilerinin parçası olarak bir Modelin hangi özellikleri desteklediğini belirten ai.ModelCapabilities değeri. Genkit bu bilgileri kullanarak belirli davranışları (ör. doğrulama model için geçerli olup olmadığını gösterir. Örneğin, modelinizin çok dönüşlü etkileşimleri desteklemiyorsa, ona bir mesaj iletmek hata geçmişi'ne dokunun.

Bu beyanların, modelin sağlanan olanaklarla ilgili olduğunu unutmayın. tarafından yapılmış olup olmadığını ve her zaman eklentinin özellikleriyle birebir temel model ve model API'si. Örneğin, model API şunları yapmazsa: sistem mesajlarını tanımlamak için belirli bir yol sunuyorsanız, eklentiniz sistem rolüne destek verdiğinizi beyan etmeniz ve bunu kullanıcı istemine sistem mesajları ekler.

Modelinizin yapılandırma şemasını tanımlama

Bir modelin desteklediği oluşturma seçeneklerini belirtmek için bir yapılandırma türü. Genkit, şunu içeren bir ai.GenerationCommonConfig türüne sahip: üretken yapay zeka model hizmetlerinin sık desteklediği seçeneklere doğrudan yerleştirebilirsiniz.

Oluşturma fonksiyonunuz, isteğin doğru seçenekleri vardır.

İstekleri ve yanıtları dönüştürme

Oluşturma işlevi, Genkit model eklentisinin ana çalışmasını gerçekleştirir: ai.GenerateRequest, Genkit'in ortak biçiminden bir biçime dönüştürülüyor API'nin desteklediği bir API'yi kullanıyorsanız ve ardından yanıtı modelinizi Genkit tarafından kullanılan ai.GenerateResponse biçimine dönüştürün.

Bazen bu modelde çalışmak için verilere masaj uygulanması veya veriler manipüle edilmesi gerekebilir. sınırlamaları vardır. Örneğin, modeliniz bir system öğesini yerel olarak desteklemiyorsa mesajını görüyorsanız, bir istemin sistem mesajını kullanıcı modeline dönüştürmeniz gerekebilir. mesaj çifti oluşturun.

Dışa aktarımlar

Tüm eklentilerin dışa aktarması gereken kaynaklara ek olarak, Init işlevi ve Config türünü içerir. Bir model eklentisi, takip etmek için:

  • Daha önce açıklandığı gibi bir nesil yapılandırması türü.

  • Eklentinizin tanımlı modellerine referanslar döndüren bir Model işlevi. Genellikle bu aşağıdakiler olabilir:

    func Model(name string) *ai.Model {
        return ai.LookupModel(providerID, name)
    }
    
  • İsteğe bağlı: Kullanıcıların model tanımlamalarına olanak tanıyan DefineModel işlevi ancak sizin otomatik olarak tanımlamadığınız özellikleri tanımlar. Her biri 100'den az gösterim alan iki ana neden sunar:

    • Eklentiniz, her birinin pratik olarak kaydedilebilmesi için çok fazla modele erişim sağlıyor bir. Örneğin, Ollama eklentisi düzinelerce web sitesine ve daha sık eklenen farklı modeller. Bu nedenle, tüm modelleri otomatik olarak tanımlar ve bunun yerine kullanıcının DefineModel olarak ayarlamak istiyorlar.

    • Kullanıcılarınıza sahip olduğunuz yeni piyasaya sürülen modelleri kullanma imkanı sağlamak için henüz eklentinize eklenmedi.

    Bir eklentinin DefineModel işlevi genellikle ai.DefineModel ön ucudur bir oluşturma fonksiyonu tanımlar ancak kullanıcının model adını belirtmesine olanak tanır ve model özellikleri.