.NET Tools How-To's

カスタム AI プロンプトの作成

Read this post in other languages:

AI は野火のごとくすさまじい勢いでソフトウェア開発業界に普及しています。 そのため、AI を日常タスクで最大限に活用するための知識が求められています。 この記事では ReSharper と Rider の JetBrains AI Assistant で使用するカスタムプロンプトを作成し、AI を最大限に活用する方法を詳しく説明します。

プロンプト: AI を適切に機能させる

プロンプトは AI に期待する結果を生成させるためのクエリやコマンドを構築する手段です。 AI は人間と会話している感覚を実現するため、NLP(自然言語処理)をプロンプトに使用します。 AI ツールはクエリを受け取って LLM(大規模言語モデル)に送信し、LLM はユーザーに応答を返します。

開発者にとって、コンピューターが命令どおり実行することは常識です。 そのため、ユーザーの要件に合わないコードの実装は「バグ」と呼ばれています。 コンピューターは命令をそのまま実行するため、バグはコンピューターではなく、プログラマーが引き起こすものです。 これと同様に、AI に命令する場合も具体的な命令が必要です。 ユーザーが必要とするタスクを AI に完了させるには、クエリとコマンドですべての関連情報と指示を正確に記述する必要があります。 優れたプロンプトを作成する際には、要件、命令、またはクエリを完全に明確化することが最も重要です。

明確化を実現する要素の 1 つにコンテキストが挙げられます。AI ツールはタスクを完了するのにコンテキストに大きく依存しているためです。 コンテキストは現在作業中のプロジェクトそのものです。つまり、プロジェクトに含まれるすべてのファイルとアセットを指します。 また、このコンテキストの一部にはチャットの履歴や AI に組み込まれた問題領域に関する一般的な知識も含まれます。 さらに、その他のコンテキスト情報をプロンプト自体に含めることができます。 たとえば前のコマンドを繰り返したり、以前の会話の一部に含まれる情報を使用したりできます。 会話口調で文脈を追ってプロンプトを構築する作業は「対話型プロンプト」と呼ばれます。 

テニスなどのスポーツに参加して試合をするとしましょう。 しかし、あなたはテニスラケットを手にしたことがありません。 この場合、「テニスの全国大会に出場するにはどうすればいいですか?」と質問できます。それが最終目標だからです。 ただし、AI は人間と同様の推測をする可能性があります。このような質問は、あなたがテニスをプレーして地方大会で戦った経験があることを示唆している可能性があります。 AI がそのように推測した場合、単に大会への出場登録方法に関するデータが返され、競技レベルでプレースキルを習得する方法は返されないでしょう。 このような周辺情報は、より良い結果を得る際に役立ちます。 そこで、「テニスの試合に出場したい。 テニスのプレー経験はない。 全国大会で戦えるほどのテニススキルを習得するにはどうすればいいですか?」と最初の質問を書き換えれば、より良い結果が生成されるでしょう。そのほうが関連する背景情報が多いためです。 実際、AI はそういう意味で人間とよく似ています。AI は人間との対話を基に提供されたデータによってトレーニングされているためです。

コンテキストを構築するには、AI に問いかけるのがお勧めです。 「なぜそう思いますか?」や「その回答を裏付ける証拠は何ですか?」と質問し、その結果を見てみましょう。 常に回答を疑うことが大切です。AI は誤った情報を提供したり、単にでっち上げをしたりすることもあります。 LLM は非常にくどい応答を返す場合があるため、LLM に簡潔な応答を要求すると明確度が増します。 また、AI の過去の回答に基づいてプロンプトを修正し、明確にすることができます。 誤解が生じている場合は、誤解している部分のみを伝えて会話を実行できます。

基本的なプロンプトを作成する

プロンプトの作成準備が整ったら、いくつかの方法で進めることができます。 ReSharper AI Assistant を開いてチャットを開始するか、 以下のようにハイライトされたコードブロックから AI Assistant を呼び出すことができます。

ハイライトされたコードと AI Assistant のコンテキストメニューが表示された IDE。 このコードブロックをチャットに送信する、コードブロックを説明する、リファクタリングする等のさまざまな AI のオプションがメニューに表示されています。

Send to new chat(新しいチャットに送信)を選択すると、そのチャットのコンテキストが作成され、ハイライトされたコードが AI Assistant チャットに送信されます。 プロンプトに詳細を追加して送信します。 返信を受け取ったら、対話型プロンプトによってタスクを達成することができます。

以下の例では、AI Assistant が値の文字列から有効な JSON と C# クラスの両方を作成することを求められています。 ご覧のとおり、この応答は非常に基本的なものです。 JSON は単純な配列と同等であり、クラスにはその配列の値を格納している List オブジェクトが含まれています。

AI Assistant のチャットウィンドウと、そこに Alt+Enter の AI インテンションアクションで送信されたコードブロックの画像。 生成された JSON も配列として表示されています。

開発者の多くはモデルを実際に扱うデータ構造により近づけたいと考えるはずです。 この場合は以下のような対話型プロンプトを使用し、クラスを Entity Framework により近づけるための命令を追加することができます。

EF Core を使用するようにコードを変更することを求めている AI クエリの出力の画像。 Id と List 型の Temperture を含む TemperatureData クラスが表示されています。 メンバーの Id と Name、およびコードの簡単な説明が付いた個別の Temperture クラスも表示されています。

AI チャットが提案しているように、以前のバージョンの EF Core はプリミティブ型のコレクションをサポートしていないことに注意してください。 ただし、EF Core 8 はサポートしています。 これは、ユーザーの専門知識がプロンプト作成に作用することを示す素晴らしい例です。 適切なレビューを行わずに結果に依存するということは、このコードを動作しない古いコードベースに適用しようとする可能性があるということです。 AI ツールからの回答を単に受け入れるのではなく、よくレビューしてからプロの判断を下すようにしましょう。

このプロンプトで続行し、JSON を変更してモデルにより近づけるように依頼できます。 気温のリストが気温データの配列で返されます。

クラスに一致する JSON の画像。

ここからさらに実際に必要なものを得られるまで、結果に基づいてプロンプトを変更し続けることができます。

重要な注意事項: AI Assistant Tool(ツール)ウィンドウによってエディターの内容が変更されることはありません。 コードを生成するアクションを使用する場合、そのコードは AI Assistant ウィンドウ内に表示されます。 ユーザーは必要なファイルを作成し、該当する出力をコピーする必要があります。

カスタムプロンプトを保存する

素晴らしいプロンプトを作成しているところですが、その一部を保存して再利用したくなるかもしれません。 それは高度なクエリに対するコンテキストの作成にも非常に役立ちます。 ReSharper と Rider のどちらもカスタムプロンプトを保存できるプロンプトライブラリが備わっています。 プロンプトライブラリに保存されたカスタムプロンプトは、以下のような一般的なタスク用の「AI マクロ」を保存するのに最適です

  • オンボーディング手順
  • コードの説明
  • データまたはコードの移動と変換
  • コミットメッセージの作成または明確化
  • その他多数…

IDE のいくつかのアクションには、ライブラリにプロンプトを保存するオプションがあります。 たとえば、Alt+EnterAI Assistant を使用する場合、以下のようなプロンプトをすぐに使用できます。

  • Explain this…(…を説明して)
  • Find issues in…(…の問題を検出して)
  • Refactor this…(…をリファクタリングして)
  • Is this model complete?(このモデルは完全ですか?)

このようなプロンプトをカスタマイズしてプロンプトライブラリに追加するか、作成済みのプロンプトから独自のプロンプトを作成することができます。 プロンプトを作成するには、AI Assistant が処理すべきコードブロックを表す $SELECTION トークンを、LLM に送信されるクエリの一部のプレースホルダーとして使用します。

カスタムプロンプトを作成する間、AI を使用してさらにそのプロンプトを改善できます。 「プロンプトセプション」として考えるとよいでしょう。チームの役に立つプロンプトセットを準備できたら、手動で処理しなければならなかった一部のタスクを自動化できます。たとえば、JSON またはデータベーススキーマに基づくクラスの作成やテストの生成、または自分のタスクから外したい作業などを自動化できます。

まとめ

AI 時代に突入したことで、開発者は個人やチームの日常的なプロセスに AI を採り入れる必要があります。コードで効率的かつ正確に AI を 使用するには、JetBrains AI Assistant を使用するのが最も近道です。 AI ではプロンプトと取得した出力が信頼できるものかを正確に判断することが重要であることを覚えておきましょう。 人間が読み取れないまたは理解できないプロンプトを作成すると、AI も理解できない可能性があります。 おそらく良い結果も得られないでしょう。 同様に、AI が偽の情報を返した場合はそれを発見できなければなりません。 AI に関して実際に生きるこれらのスキルを磨きましょう。また、JetBrains AI Assistant の助けを借りれば、可能性は無限です。

オリジナル(英語)ブログ投稿記事の作者:

image description

Discover more