프롬프트 조작은 앱 개발자가 생성형 AI 모델의 출력에 영향을 주는 기본 방식입니다. 예를 들어 LLM을 사용할 때는 모델 응답의 어조, 형식, 길이 및 기타 특성에 영향을 주는 프롬프트를 만들 수 있습니다.
Genkit는 프롬프트가 코드라는 전제 하에 설계되었습니다. 개발자는 소스 파일에 프롬프트를 작성 및 유지 관리하고, 코드에 사용하는 것과 동일한 버전 제어 시스템을 사용하여 변경사항을 추적하며, 생성형 AI 모델을 호출하는 코드와 함께 배포합니다.
대부분의 개발자는 포함된 Dotprompt 라이브러리가 Genkit의 프롬프트 작업에 대한 요구사항을 충족한다는 점을 알게 될 것입니다. 그러나 프롬프트를 직접 사용한 대체 방법도 지원됩니다.
프롬프트 정의
Genkit의 생성 도우미 함수는 문자열 프롬프트를 허용하며, 간단한 사용 사례에서는 이러한 방식으로 모델을 호출할 수 있습니다.
ai.Generate(context.Background(), model, ai.WithTextPrompt("You are a helpful AI assistant named Walt."))
대부분의 경우 프롬프트에 사용자가 제공한 입력을 일부 포함해야 합니다. 다음과 같이 렌더링하는 함수를 정의할 수 있습니다.
func helloPrompt(name string) *ai.Part {
prompt := fmt.Sprintf("You are a helpful AI assistant named Walt. Say hello to %s.", name)
return ai.NewTextPart(prompt)
}
response, err := ai.GenerateText(context.Background(), model,
ai.WithMessages(ai.NewUserMessage(helloPrompt("Fred"))))
그러나 코드에서 프롬프트를 정의할 때 한 가지 단점은 테스트 시 프롬프트를 흐름의 일부로 실행해야 한다는 점입니다. 보다 빠른 반복을 용이하게 하기 위해 Genkit는 프롬프트를 정의하고 개발자 UI에서 실행하는 기능을 제공합니다.
DefinePrompt
함수를 사용하여 Genkit에 프롬프트를 등록합니다.
type HelloPromptInput struct {
UserName string
}
helloPrompt := ai.DefinePrompt(
"prompts",
"helloPrompt",
nil, // Additional model config
jsonschema.Reflect(&HelloPromptInput{}),
func(ctx context.Context, input any) (*ai.GenerateRequest, error) {
params, ok := input.(HelloPromptInput)
if !ok {
return nil, errors.New("input doesn't satisfy schema")
}
prompt := fmt.Sprintf(
"You are a helpful AI assistant named Walt. Say hello to %s.",
params.UserName)
return &ai.GenerateRequest{Messages: []*ai.Message{
{Content: []*ai.Part{ai.NewTextPart(prompt)}},
}}, nil
},
)
프롬프트 작업은 GenerateRequest
를 반환하는 함수를 정의하며 이는 모든 모델에서 사용할 수 있습니다 원하는 경우 프롬프트의 입력 스키마도 정의할 수 있습니다. 이는 흐름의 입력 스키마와 유사합니다.
또한 프롬프트는 온도 또는 출력 토큰의 수와 같은 모든 일반적인 모델 구성 옵션을 정의할 수 있습니다.
제공된 도우미 함수를 사용하여 이 프롬프트를 모델 요청에 렌더링할 수 있습니다. 프롬프트에서 예상되는 입력 변수와 호출할 모델을 제공합니다.
request, err := helloPrompt.Render(context.Background(), HelloPromptInput{UserName: "Fred"})
if err != nil {
return err
}
response, err := model.Generate(context.Background(), request, nil)
Genkit 개발자 UI에서 이 방식으로 정의한 모든 프롬프트를 실행할 수 있습니다. 이렇게 하면 프롬프트가 사용되는 흐름의 범위를 벗어나 개별 프롬프트를 실험할 수 있습니다.
Dotprompt
Genkit에는 프롬프트에 기능을 추가하는 Dotprompt 라이브러리가 포함됩니다.
.prompt
소스 파일에서 프롬프트 로드- Handlebars 기반 템플릿
- 여러 번의 프롬프트 템플릿 및 멀티미디어 콘텐츠 지원
- 간결한 입력 및 출력 스키마 정의
generate()
를 통한 능숙한 사용