Genkit 모델 플러그인 작성

Genkit 모델 플러그인은 하나 이상의 생성형 AI 모델을 Genkit에 추가합니다. 레지스트리에 등록했습니다 모델은 인코더-디코더 출력 데이터를 수신할 수 있는 프롬프트를 입력으로 사용하고 텍스트, 미디어 또는 데이터를 출력으로 생성합니다.

시작하기 전에

작성에 관한 자세한 내용은 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에 대해 배웠습니다 예를 들어 모델 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의 프런트엔드입니다. 생성 함수를 정의하지만 사용자가 모델 이름을 지정할 수 있습니다. 모델 역량에 중점을 둡니다