プロンプト

プロンプトの操作は、アプリ デベロッパーが生成 AI モデルの出力に影響を与える主要な方法です。たとえば、LLM を使用する場合は、モデルのレスポンスのトーン、形式、長さなどの特性に影響を与えるプロンプトを作成できます。

Genkit は、「プロンプトはコードである」という考え方で設計されています。プロンプトは、ソースファイルの形で作成、管理します。そして、コードに使用するのと同じバージョン管理システムを使用してプロンプトの変更を追跡し、生成 AI モデルを呼び出すコードとともにデプロイします。

ほとんどのデベロッパーは、Genkit でプロンプトを扱う際に、付属の Dotprompt ライブラリがニーズを満たすことに気付くでしょう。ただし、プロンプトを直接操作することで、別のアプローチもサポートされます。

プロンプトを定義する

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() の自然な使用方法