Genkit 모델 플러그인은 하나 이상의 생성형 AI 모델을 Genkit 레지스트리에 추가합니다. 모델은 프롬프트를 입력으로 수신하고 텍스트, 미디어 또는 데이터를 출력으로 생성할 수 있는 모든 생성형 모델을 나타냅니다.
시작하기 전에
모델 플러그인을 포함한 모든 종류의 Genkit 플러그인 작성에 관한 자세한 내용은 Genkit 플러그인 작성을 참조하세요. 특히 모든 플러그인은 사용자가 플러그인을 사용하기 전에 호출해야 하는 Init
함수를 내보내야 합니다.
모델 정의
일반적으로 모델 플러그인은 Init
함수에서 하나 이상의 ai.DefineModel
호출을 수행합니다(플러그인이 인터페이스를 제공하는 각 모델에 대해 한 번씩).
모델 정의는 다음 세 가지 구성요소로 구성됩니다.
- 모델의 기능을 선언하는 메타데이터
- 모델에서 지원하는 특정 파라미터가 있는 구성 유형
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 모델 서비스에서 자주 지원하는 옵션이 포함된 ai.GenerationCommonConfig
유형이 있습니다. 이를 삽입하거나 사용할 수 있습니다.
생성 함수는 요청에 올바른 옵션 유형이 포함되었는지 확인해야 합니다.
요청 및 응답 변환
생성 함수는 Genkit 모델 플러그인의 기본 작업을 수행합니다. ai.GenerateRequest
를 Genkit의 일반 형식에서 모델의 API에서 지원하는 형식으로 변환한 다음, 모델의 응답을 Genkit에서 사용하는 ai.GenerateResponse
형식으로 변환합니다.
때로는 모델의 제한사항을 해결하기 위해 데이터를 변환하거나 조작해야 할 수도 있습니다. 예를 들어 모델이 기본적으로 system
메시지를 지원하지 않는 경우 프롬프트의 시스템 메시지를 사용자-모델 메시지 쌍으로 변환해야 할 수도 있습니다.
내보내기
모든 플러그인이 내보내야 하는 리소스(Init
함수 및 Config
유형) 외에 모델 플러그인은 다음 항목도 내보내야 합니다.
앞에서 설명한 생성 구성 유형
플러그인의 정의된 모델에 대한 참조를 반환하는
Model
함수. 보통 다음과 같을 수 있습니다.func Model(name string) *ai.Model { return ai.LookupModel(providerID, name) }
선택사항: 플러그인이 제공하는 모델을 사용자가 정의하도록 하는
DefineModel
함수. 하지만 사용자가 모델을 자동으로 정의하지는 않습니다. 이러한 함수를 제공해야 하는 두 가지 주요 이유는 다음과 같습니다.플러그인에서 실질적으로 각 모델을 등록하기에는 너무 많은 모델에 대한 액세스를 제공합니다. 예를 들어 Ollama 플러그인은 수십 개의 모델에 대한 액세스를 제공하며, 이는 더 자주 추가됩니다. 따라서 모델을 자동으로 정의하지 않으며 대신 사용자가 사용하려는 각 모델에 대해
DefineModel
을 호출해야 합니다.아직 플러그인에 추가하지 않은 새로 출시된 모델을 사용자가 사용할 수 있도록 하기 위함입니다.
플러그인의
DefineModel
함수는 일반적으로 생성 함수를 정의하는ai.DefineModel
의 프런트엔드지만, 사용자가 모델 이름과 모델 기능을 지정할 수 있습니다.