編寫 Genkit 模型外掛程式

Genkit 模型外掛程式能在 Genkit 中加入一或多個生成式 AI 模型 註冊資料庫模型代表任何能接收輸入內容的生成式模型 做為輸入內容並生成文字、媒體或資料

事前準備

如需編寫程式的相關資訊,請參閱「編寫 Genkit 外掛程式」一文 任何類型的 Genkit 外掛程式,包括模型外掛程式請特別注意 每個外掛程式都必須匯出 Init 函式,且使用者應呼叫該函式。 完成後才能使用外掛程式

模型定義

一般而言,模型外掛程式會在其 ai.DefineModel 呼叫 Init 函式:針對每個模型,每個模型都會提供一個介面 。

模型定義由三個元件組成:

  1. 宣告模型功能的中繼資料。
  2. 具有模型支援任何特定參數的設定類型。
  3. 可接受 ai.GenerateRequest 並傳回 ai.GenerateResponse,假設使用 AI 模型產生後者。

程式碼大致如下:

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

宣告模型功能

每項模型定義都必須包含屬於其中繼資料、 ai.ModelCapabilities 值會宣告模型支援的功能。 Genkit 會根據這項資訊判斷特定行為,例如 特定輸入內容是否適用於模型。舉例來說 不支援多輪互動,如果無法傳送訊息,就會發生錯誤 。

請注意,這些宣告所指模型功能 (依規定提供) ,而且不一定要統一對應 基礎模型和模型 API舉例來說 提供定義系統訊息的明確方式,您的外掛程式可能仍然 宣告支援系統角色,並將其實作為特殊邏輯, 會在使用者提示中插入系統訊息

定義模型的設定結構定義

如要指定模型支援的生成選項,請定義並匯出 設定類型Genkit 的 ai.GenerationCommonConfig 類型包含 生成式 AI 模型服務經常支援的選項 嵌入或單獨使用

您的產生函式應會驗證要求是否包含正確的 選項類型。

轉換要求與回應

生成功能執行 Genkit 模型外掛程式的主要工作: 將 ai.GenerateRequest 從 Genkit 通用格式轉換為格式 然後將回應轉換為 將您的模型轉換為 Genkit 使用的 ai.GenerateResponse 格式

有時候,您可能需要大規模處理資料或操縱資料才能因應模型 例如,如果您的模型原生支援 system 訊息,您可能需要將提示的系統訊息轉換為使用者模型 訊息配對。

匯出項目

除了所有外掛程式都必須匯出的資源外,Init 函式和 Config 類型—模型外掛程式也應匯出 包括:

  • 產生設定類型,如前文所述。

  • Model 函式,會傳回外掛程式定義模型的參照。 通常這可以是:

    func Model(name string) *ai.Model {
        return ai.LookupModel(providerID, name)
    }
    
  • 選用DefineModel 函式,可讓使用者定義能 外掛程式可以提供,但您無法自動定義,另有 建議您提供此類函式的兩個主要原因:

    • 外掛程式可存取過多模型,實際註冊 第一項。舉例來說,Ollama 外掛程式能提供 並頻繁加入不同的模型因此 自動定義所有模型,並要求使用者呼叫 DefineModel

    • 讓使用者能使用您擁有的新模式 尚未新增到外掛程式中。

    外掛程式的 DefineModel 函式通常是連結至 ai.DefineModel 的前端 會定義生成函式,但讓使用者指定模型名稱 以及模型功能