プロンプト

プロンプトの操作は、アプリ デベロッパーがアプリに影響を与える主な方法であり、 生成 AI モデルの出力です。たとえば、LLM を使用するときは、単語、すなわち トーン、形式、長さ、その他の特性に影響を与える 学習します。

Genkit は、プロンプトはコードであるという前提に基づいて設計されています。データ アナリストが ソースファイル内のプロンプトを維持し、同じバージョンを使用してプロンプトへの変更を 制御システムを作成し、コードとともにデプロイできます。 生成 AI モデルを呼び出すことができます

ほとんどのデベロッパーには、付属の Dotprompt ライブラリがあります。 Genkit のプロンプトを操作するニーズを満たしています。ただし、 プロンプトを直接操作することでもサポートされます。

プロンプトの定義

Genkit の生成ヘルパー関数は文字列プロンプトを受け入れ、 単純なユースケースでは モデルを呼び出すことができます

Go

request := ai.GenerateRequest{Messages: []*ai.Message{
  {Content: []*ai.Part{ai.NewTextPart("You are a helpful AI assistant named Walt.")}},
}}
model.Generate(context.Background(), &request, nil)

ほとんどの場合、プロンプトにはユーザー指定の入力を含める必要があります。 それらをレンダリングする関数を次のように定義できます。

Go

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)
}
request := ai.GenerateRequest{Messages: []*ai.Message{
  {Content: []*ai.Part{helloPrompt("Fred")}},
}}
response, err := model.Generate(context.Background(), &request, nil)

ただし、コードでプロンプトを定義する場合の欠点の 1 つは、テストを実行するときに できます。より迅速なイテレーションを促進するために、Genkit には プロンプトを定義し、デベロッパー UI で実行できます。

Go

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 を返す関数を定義します。 あらゆるモデルで使用できます必要に応じて、入力スキーマを定義する これは、フローの入力スキーマに似ています。 プロンプトでは、次のような一般的なモデル構成オプションも定義できます。 温度または出力トークンの数です。

用意されているヘルパー関数を使用して、このプロンプトをモデル リクエストにレンダリングできます。 プロンプトで想定される入力変数と、呼び出すモデルを指定します。

Go

request, err := helloPrompt.Render(context.Background(), HelloPromptInput{UserName: "Fred"})
if err != nil {
  return err
}
response, err := model.Generate(context.Background(), request, nil)

Genkit デベロッパー UI では、この方法で定義した任意のプロンプトを実行できます。 これにより、学習範囲外の個々のプロンプトを試すことができます。 使用されるフローを定義します。

ドットプロンプト

Genkit には Dotprompt ライブラリが含まれており、これを使用して プロンプトに追加できます。

  • .prompt 個のソースファイルからプロンプトを読み込んでいます
  • ハンドルバーベースのテンプレート
  • マルチターン プロンプト テンプレートとマルチメディア コンテンツのサポート
  • 簡潔な入出力スキーマ定義
  • generate() での一般的な使用