セマンティック カーネル プロンプト テンプレートの構文
セマンティック カーネル プロンプト テンプレート言語は、プレーン テキストを使用して AI 関数を定義および作成する簡単な方法です。 これを使用すると、自然言語プロンプトの作成、応答の生成、情報の抽出、他のプロンプトの呼び出し、テキストで表現できるその他のタスクの実行を行うことができます。
この言語では、1) 変数、2) 外部関数の呼び出し、3) 関数へのパラメーターの渡しを可能にする 3 つの基本的な機能がサポートされています。
コードを記述したり、外部ライブラリをインポートしたりする必要はありません。中かっこ {{...}}
を使用して、プロンプトに式を埋め込むだけです。
セマンティック カーネルはテンプレートを解析し、その背後にあるロジックを実行します。
これにより、最小限の労力と最大限の柔軟性で AI をアプリに簡単に統合できます。
ヒント/アドバイス/チップ
さらに多くの機能が必要な場合は、Handlebars および Liquid テンプレート エンジンもサポートしています。これにより、ループ、条件、その他の高度な機能を使用できます。
変数
プロンプトに変数値を含めるには、{{$variableName}}
構文を使用します。
たとえば、ユーザーの名前を保持する name
という変数がある場合は、次のように記述できます。
Hello {{$name}}, welcome to Semantic Kernel!
これにより、ユーザーの名前を含むあいさつが生成されます。
スペースは無視されるため、読みやすい場合は、次のように記述することもできます。
Hello {{ $name }}, welcome to Semantic Kernel!
関数呼び出し
外部関数を呼び出して結果をプロンプトに埋め込むには、{{namespace.functionName}}
構文を使用します。
たとえば、特定の場所の天気予報を返す weather.getForecast
という関数がある場合は、次のように記述できます。
The weather today is {{weather.getForecast}}.
これにより、input
変数に格納されている既定の場所の天気予報を含む文が生成されます。
input
変数は、関数を呼び出すときにカーネルによって自動的に設定されます。
たとえば、上記のコードは次のようになります。
The weather today is {{weather.getForecast $input}}.
関数パラメーター
外部関数を呼び出してパラメーターを渡すには、{{namespace.functionName $varName}}
と {{namespace.functionName "value"}}
構文を使用します。
たとえば、天気予報関数に別の入力を渡す場合は、次のように記述できます。
The weather today in {{$city}} is {{weather.getForecast $city}}.
The weather today in Schio is {{weather.getForecast "Schio"}}.
これにより、city
変数に格納されている都市と、プロンプト テンプレートにハードコーディングされた "Schio" 場所の値を使用して、2 つの異なる場所の天気予報を含む 2 つの文が生成されます。
特別な文字に関する注意事項
セマンティック関数テンプレートはテキスト ファイルであるため、改行やタブなどの特殊な文字をエスケープする必要はありません。 ただし、特別な構文が必要なケースは 2 つあります。
- プロンプト テンプレートに二重中かっこを含める
- 引用符を含むハードコーディングされた値を関数に渡す
二重中かっこが必要なプロンプト
二重波括弧には特別な用途があり、変数、値、関数をテンプレートに挿入するために使われます。
プロンプトに {{
シーケンスと }}
シーケンスを含める必要がある場合は、特別なレンダリング ロジックをトリガーする可能性があります。最適な解決策は、{{ "{{" }}
や {{ "}}" }}
などの引用符で囲まれた文字列値を使用することです。
例えば:
{{ "{{" }} and {{ "}}" }} are special SK sequences.
は次の内容にレンダリングされます。
{{ and }} are special SK sequences.
引用符とエスケープを含む値
値は、一重引用符 および 二重引用符を使用して囲むことができます。
特別な構文の必要性を避けるために、一重引用符
例えば:
...text... {{ functionName "one 'quoted' word" }} ...text...
...text... {{ functionName 'one "quoted" word' }} ...text...
値に単一引用符と二重引用符の両方が含まれている場合は、特別な
値の周りに二重引用符を使用する場合は、«\"
» を使用して、値内に二重引用符記号を含めます。
... {{ "quotes' \"escaping\" example" }} ...
同様に、単一引用符を使用する場合は、«\'
» を使用して値内に単一引用符を含めます。
... {{ 'quotes\' "escaping" example' }} ...
どちらも以下の通りにレンダリングされます。
... quotes' "escaping" example ...
一貫性を保つために、シーケンス «\'
» と «\"
» は、エスケープが不要な場合でも、常に «'
» と «"
»にレンダリングされます。
例えば:
... {{ 'no need to \"escape" ' }} ...
〜に相当します。
... {{ 'no need to "escape" ' }} ...
そして両方が次にレンダリングされます。
... no need to "escape" ...
引用符の前に円記号(バックスラッシュ)を表示する必要がある場合、«\
» は特別な文字であるため、それもエスケープして、特別なシーケンス «\\\'
» と «\\\"
»を使用する必要があります。
例えば:
{{ 'two special chars \\\' here' }}
として表示されます。
two special chars \' here
単一引用符と二重引用符と同様に、シンボル «\
» は必ずしもエスケープする必要はありません。 ただし、一貫性を保つため、不要な場合でもエスケープできます。
例えば:
... {{ 'c:\\documents\\ai' }} ...
に等しいです:
... {{ 'c:\documents\ai' }} ...
両方が次の値にレンダリングされます。
... c:\documents\ai ...
最後に、バックスラッシュは、«'
»、«"
» 、そして «\
»の前でのみ特別な意味を持ちます。
その他のすべての場合、バックスラッシュ文字は影響を与えず、そのままレンダリングされます。 例えば:
{{ "nothing special about these sequences: \0 \n \t \r \foo" }}
にレンダリングされます。
nothing special about these sequences: \0 \n \t \r \foo
次の手順
セマンティック カーネルでは、独自の組み込み形式に加えて、他の一般的なテンプレート形式もサポートされています。
次のセクションでは、追加の形式として、ハンドルバー