프롬프트

프롬프트 조작은 앱 개발자가 생성형 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()를 통한 능숙한 사용