次の方法で共有


セマンティック カーネル コンポーネント

セマンティック カーネルには、個別に、または一緒に使用できるさまざまなコンポーネントが用意されています。 この記事では、さまざまなコンポーネントの概要と、それらの間の関係について説明します。

AI サービス コネクタ

セマンティック カーネル AI サービス コネクタは、共通インターフェイスを介して異なるプロバイダーから複数の AI サービスの種類を公開する抽象化レイヤーを提供します。 サポートされているサービスには、チャット完了、テキスト生成、埋め込み生成、テキストから画像、画像からテキスト、テキストからオーディオ、オーディオからテキストへの変換が含まれます。

実装がカーネルに登録されると、既定では、カーネルへのメソッド呼び出しによって、チャット完了またはテキスト生成サービスが使用されます。 サポートされている他のサービスは自動的に使用されません。

ヒント

AI サービスの使用方法の詳細については、「セマンティック カーネルへの AI サービスの追加」を参照してください。

ベクター ストア (メモリ) コネクタ

セマンティック カーネル ベクター ストア コネクタは、共通のインターフェイスを介して異なるプロバイダーからベクター ストアを公開する抽象化レイヤーを提供します。 カーネルは登録されたベクターストアを自動的に使用しませんが、ベクター検索はプラグインとしてカーネルに簡単に公開できます。その場合、プラグインはプロンプトテンプレートとチャット補完AIモデルで使用できます。

ヒント

メモリ コネクタの使用方法の詳細については、「セマンティック カーネルへの AI サービスの追加」を参照してください。

関数とプラグイン

プラグインは名前付き関数コンテナーです。 それぞれに 1 つ以上の関数を含めることができます。 プラグインはカーネルに登録できます。これにより、カーネルは次の 2 つの方法でそれらを使用できます。

  1. AI が呼び出し用に選択できるように、それらをチャット完了 AI にアドバタイズします。
  2. テンプレートのレンダリング中に、テンプレートから呼び出されるようにします。

関数は、ネイティブ コード、OpenAPI 仕様、RAG シナリオの ITextSearch 実装、プロンプト テンプレートなど、多くのソースから簡単に作成できます。

PromptTemplates、NativeCode、OpenAPI 仕様、TextSearch をプラグインに変換できます。

ヒント

さまざまなプラグインソースの詳細については、「プラグインとは」を参照してください。.

ヒント

チャット補完AIへのプラグイン広告に関する詳細情報については、チャット補完での関数呼び出しをご覧ください。

プロンプト テンプレート

プロンプト テンプレートを使用すると、開発者またはプロンプト エンジニアは、AI のコンテキストと指示をユーザー入力と関数の出力と組み合わせたテンプレートを作成できます。 たとえば、テンプレートには、チャット補完 AI モデルの指示と、ユーザー入力のプレースホルダー、およびチャット完了 AI モデルを呼び出す前に常に実行する必要があるプラグインへのハードコーディングされた呼び出しが含まれている場合があります。

プロンプト テンプレートは、次の 2 つの方法で使用できます。

  1. テンプレートをレンダリングし、レンダリングされた結果を使用してチャット完了 AI モデルを呼び出すようにカーネルに要求することで、チャット完了フローの開始点として。
  2. プラグイン関数として、他の関数と同じ方法で呼び出すことができるようにします。

プロンプト テンプレートを使用すると、最初にレンダリングされ、それに加えて、それに含まれるハードコーディングされた関数参照が実行されます。 レンダリングされたプロンプトは、チャット補完 AI モデルに渡されます。 AI によって生成された結果が呼び出し元に返されます。 プロンプト テンプレートがプラグイン関数として登録されている場合は、関数がチャット完了 AI モデルによって実行されるように選択されている可能性があります。この場合、呼び出し元は AI モデルに代わってセマンティック カーネルになります。

この方法でプロンプト テンプレートをプラグイン関数として使用すると、かなり複雑なフローが発生する可能性があります。 たとえば、プロンプト テンプレート A がプラグインとして登録されるシナリオを考えてみましょう。 同時に、別のプロンプト テンプレート B をカーネルに渡して、チャット完了フローを開始できます。 B は、Aへのハードコーディングされた呼び出しを持つことができます。 これにより、次の手順が実行されます。

  1. B レンダリングが開始され、プロンプトの実行で A への参照が見つかります
  2. A がレンダリングされます。
  3. A のレンダリングされた出力は、チャット完了 AI モデルに渡されます。
  4. チャット完了 AI モデルの結果が Bに返されます。
  5. B のレンダリングが完了しました。
  6. B のレンダリングされた出力は、チャット完了 AI モデルに渡されます。
  7. チャット完了 AI モデルの結果が呼び出し元に返されます。

また、B から Aへのハードコーディングされた呼び出しがないシナリオも検討してください。 関数呼び出しが有効になっている場合でも、チャット完了 AI モデルは、A が提供できるデータまたは機能を必要とするため、A を呼び出す必要があると判断する場合があります。

プロンプト テンプレートをプラグイン関数として登録すると、実際のコードではなく人間の言語を使用して記述される機能を作成できます。 このような機能をプラグインに分離することで、AI モデルは、これを主な実行フローとは別に推論でき、一度に 1 つの問題に集中できるため、AI モデルによって成功率が高くなる可能性があります。

プロンプト テンプレートから開始される単純なフローについては、次の図を参照してください。

PromptTemplates は、テンプレートをレンダリングし、必要な関数を呼び出し、チャット補完 AI モデルを呼び出して、呼び出す回答または複数の関数を取得するカーネルによって実行できます。

ヒント

プロンプト テンプレートの詳細については、「プロンプトとは」を参照してください。.

フィルター

フィルターは、チャット完了フロー中に特定のイベントの前後にカスタム アクションを実行する方法を提供します。 これらのイベントは次のとおりです。

  1. 関数呼び出しの前後。
  2. プロンプト表示の前後。

チャット完了フロー中に呼び出されるようにするには、カーネルにフィルターを登録する必要があります。

プロンプト テンプレートは実行前に常に KernelFunctions に変換されるため、プロンプト テンプレートに対して関数フィルターとプロンプト フィルターの両方が呼び出されることに注意してください。 複数のフィルターを使用できる場合、フィルターは入れ子になるため、関数フィルターは外側のフィルターであり、プロンプト フィルターは内部フィルターです。

セマンティック カーネル パイプラインへのフィルター統合。

アドバイス

フィルターの詳細については、「フィルターとは」を参照してください。.