MENU

プロンプトを改善するには?具体的な手法を徹底解説 その2

  • URLをコピーしました!

前回のコラムでは、プロンプトの改善方法の基礎として、プロンプトの構成要素について詳しく解説しました。

今回は、「禁止事項」と「出力の形式」という制約についてです。身近な例を使って、応答の質を改善する方法と、ChatGPT がもっともらしく嘘をつく場合の対策について解説します。

ChatGPTを少し使っているんだけど、いまいち欲しい内容が出てこない

もっと改善するヒントはないかな?

という場合に役立つ内容です。ぜひ試してみてください。

もくじ

禁止事項(ネガティブ・プロンプト)

人間の世界で、物知りの人に質問をしたら、求めている答えの10倍もの情報が返ってきて圧倒されたことはありませんか?

ChatGPTも、そのような知識豊かな人のように幅広い分野を深く理解しているので、私たちが欲しい内容以上の情報を回答することがあります。そのため、ChatGPTを上手に活用するには「何をやってもらうか」だけでなく、「何をやらせないか」も大切です。

禁止事項(ネガティブ・プロンプト)は制約の一種です。特定の種類の応答やトピックを除外するために指定します。

よくある禁止事項の目的とその例を見てみましょう。

目的
不適切なコンテンツの排除成人向けの言葉や表現を含めないでください。
感情的な不快感の防止戦争や災害などのトラウマに関連するトピックを避けてください。
個人的な意見の排除個人的な見解や推測を述べないでください。
特定の視点の排除政治的または宗教的な立場を示さないでください。
商業的利益の排除 特定の商品やサービスを推奨しないでください。

禁止する内容は、禁止事項として別途指定することも、制約の一部として組み込むこともできます。

禁止事項として指定する場合:

# 禁止事項- 成人向けの言葉や表現を含めないでください。- 機密情報の生成または共有をしないでください。

制約の一部として指定する場合:

# 制約- 初心者が理解しやすい言葉を使用してください。- 成人向けの言葉や表現を含めないでください。

禁止事項は、その会話に対してだけでなく、例えば勤務先などで企業のコンプライアンスに基づいて、組織レベルで要求される場合は、独立した「#禁止事項」として改めて追加するのもありです。

安全な応答を得るための、一般的な禁止事項の例は次のとおりです。

# 禁止事項
– 成人向けの言葉や表現の使用を禁止します。
– 機密情報の生成または共有をしないでください。
– 差別的または侮辱的な内容の生成を禁止します。
– 違法行為の助言または推奨をしないでください。
– 虚偽の情報の生成を禁止します。
– 著作権で保護されたコンテンツの不正使用をしないでください。
– 危険または害を引き起こす行動の促進を禁止します。
– 政治的、宗教的なプロパガンダの生成をしないでください。

会話形式では、「役割」や「背景」と同じように、会話の早い段階で「禁止事項」を指定することで、その会話全体で禁止事項の効果が得られます。

出力の形式(output format)を具体的に指定する

ChatGPTに適切なプロンプトを渡すことで、私たちが求めている情報を得ることができますが、その情報の「形式や表現方式」が、希望したものと異なり、そのままでは利用できない場合があります。

たとえば、段落で構成された「小説形式の文章」を望んでいたのに、生成された内容が「数字付きの箇条書き形式」だった時などです。

このような場合は、出力の形式を具体的に指定することで、求めていた情報を希望する形式で得ることができます。

出力の形式は、ChatGPTが提供する情報の構造と表示方法を指定するプロンプト要素で、制約の一種と考えることもできます。これによって、情報が目的に応じた方法で整理されます。また、出力の形式を明確に指定することで、応答の効果性と使いやすさがグッと良くなって、特定のタスクや要求に対して最適な形式で情報を提供できます。

主な出力形式の種類をまとめました。

形式目的
リスト形式複数の要点や項目を簡潔にまとめることができ、情報の概要を迅速に把握するのに役立ちます。情報を箇条書きで提供してください。
段落形式複雑なトピックや説明を詳細に展開し、深い理解を促すのに適しています。情報を詳細な段落で説明してください。
表形式数値や統計データを視覚的に整理し、比較や分析を容易にします。データを表で整理して表示してください。
Q&A形式特定の疑問に対して直接的かつ明確な回答を提供し、情報の探索を効率化します。質問と回答の形式で情報を提供してください。
チェックリスト形式操作手順や必要なアクションを明確にリストアップし、ユーザーが段階的にタスクを追跡しやすくなります。実行すべきタスクのチェックリストを作成してください。
物語形式トピックを物語性のある形で提示し、より引き込みやすく、記憶に残りやすい内容にします。情報を物語のように提示してください。

出力形式を指定する方法はいくつかあります。

単純な出力形式の場合は、指示や質問の一部として指定する。

親子丼を4人分作るために必要な材料を表の形式で教えてください。

出力形式を細かく指定する場合、#出力形式という要素を別途設けます。

親子丼を作る手順をステップバイステップで教えてください。
#出力形式
– 各ステップで必要な材料を表形式で表す。
– 各ステップで使う道具を箇条書きで表す。
– 各ステップでの作業手順を番号付き箇条書きで表す。
– 各ステップでの注意点をボールド文字で強調する。

出力の形式をテンプレートで制御する

出力の形式をさらに細かくコントロールしたい時は、「テンプレート」と呼ばれるテクニックが効果的です。テンプレートとは、変わらない部分(固定部分)に、変わる部分(変動部分)を埋め込んで、一貫性のある出力を効率的に得る方法です。

例えば、ある旅行代理店に務める人が、顧客宛てに次のような旅行計画の概要メールを送信するとします。

A様、京都への旅行計画は以下の通りです。
出発日:2024年4月15日、滞在日数:3日間、予算:50,000円。

B様、北海道への旅行計画は以下の通りです。
出発日:2024年5月10日、滞在日数:5日間、予算:80,000円。

C様、沖縄への旅行計画は以下の通りです。
出発日:2024年6月20日、滞在日数:4日間、予算:65,000円。

これらの文章は、目的地や滞在日数が異なるだけで、文章全体の構造は全く同じです。このような場合、実際の目的地などを{}で囲った記号で文中に埋め込み、テンプレート化することが可能です。

{顧客名}さま、
{目的地}への旅行計画は以下の通りです。
出発日:{出発日}、滞在日数:{滞在日数}日間、予算:{予算}円。

仮に、目的地などの情報が次のようなデータとして存在しているなら、テンプレートとデータをプロンプトに含めることで、メールの内容を効率よく生成することができます。(このデータは「コンマ区切りデータ」と呼ばれるポピュラーな形式で、最上段の行に「ヘッダ」を置き、その下にヘッダに従ってデータを記述しています)。

顧客名,目的地,出発日,滞在日数,予算
A,京都, 2024年4月15日, 3日間, 50,000円
B,北海道, 2024年5月10日, 5日間, 80,000円
C,沖縄, 2024年6月20日, 4日間, 65,000円
D,東京, 2024年7月5日, 2日間, 40,000円
E,奈良, 2024年8月25日, 3日間, 50,000円

以下のプロンプトでは、「#出力の形式」要素で求めている形式をテンプレートで示し、「#データ」要素で、カンマ区切りデータを指定しています。

旅行プランの概要文をテンプレートに従って作成してください。
#出力の形式
– テンプレート:
{顧客名}さま、
{目的地}への旅行計画は以下の通りです。
出発日:{出発日}、滞在日数:{滞在日数}日間、予算:{予算}円。
– 次の概要文は1行空白を空けて続ける。

#禁止事項
– テンプレート以外の内容を生成しない。

#データ
顧客名,目的地,出発日,滞在日数,予算
A,京都, 2024年4月15日, 3日間, 50,000円
B,北海道, 2024年5月10日, 5日間, 80,000円
C,沖縄, 2024年6月20日, 4日間, 65,000円
D,東京, 2024年7月5日, 2日間, 40,000円
E,奈良, 2024年8月25日, 3日間, 50,000円

ChatGPTはテンプレートに埋め込んでいる変動部分の名前と、カンマ区切りデータのヘッダの名前を対応させて自動的に以下のように結果を生成します。

このプロンプトを使ったChatGPTからの応答は、次のようになります。

このような使い方は、複数のデータに対して同じ処理を行う時に便利です。

テンプレートに埋め込む項目の記号は{名前}の代わりに [名前] や <名前> などを使っても構いません。{}はよく使われるプログラミング言語で、ここでも同じ目的で使用しました。重要なのはプロンプトの中で記号とその目的に一貫性を持たせることで、どの記号を選ぶかは、さほど重要ではありません。

例を使って、応答の質を向上させる

ここまで主なプロンプトの要素を見てきましたが、そのいくつかは「例」を示すことで、応答の質をグッと良くすることが期待できます。特に、「指示」と「出力形式」は、例を使うことは効果的で、ChatGPTに自分の要望を明確かつ具体的に伝えることができ、期待に沿った回答を引き出しやすくなります。

人と人とのコミュニケーションで具体的な例を示すことが、意図した結果を効果的に伝える方法であるのと同じく、ChatGPTにおいても、例を交えたプロンプトがとても有効です。このセクションでは、指示と出力形式を指定するのに例を用いる方法について解説します。

指示に例を使う

パターン化された例を使うことで、期待する結果をChatGPTに推論させる方法は、もっとも初歩的な「例を使った指示プロンプト」です。

これは、人に対して使う「日本と言えば東京、イギリスと言えばロンドン。では、フランスと言えば?」といった質問によく似ています。このような質問をされたら、自然と「パリ」という答えが口に出てきますね。これは人がパターンを理解できるからです。ChatGPTもパターンを理解するのが得意です。

例えば、ChatGPTに以下のプロンプトを渡したとします。

日本:東京
イギリス:ロンドン
オーストラリア:キャンベラ
フランス:

すると、「首都は何ですか?」といった、直接的な指示・質問は含まれていないにもかかわらず、きちんと意図が伝わり、正しい応答が返ってきます。

ここで注目してもらいたいことは「フランス:」の行で、答えがわざと空欄になっていることです。実は、ChatGPTは「文章を完結する」ように訓練されているので、「この文章(会話)に続く内容として、最も可能性の高いもの」を推論して返してくれるのです。ChatGPTがパターンを使って推論できることを理解しておくと、プロンプトを効率的に書くための選択肢が広がります。

出力の制御に例を使う

ChatGPTの主力を制御するために、期待する出力を例で示す方法があります。

例えば、いくつかの国とその主要な都市が東京からどのぐらい離れた距離にあるかを知りたいとします。この場合、「国」と「その国の都市」という「入れ子の関係」があり、できればその関係が視覚的・直観的にわかるように、次のようなインデントを用いた階層構造にしたいとします。

しかし、このような構造を言葉で表すのは大変です。その代りに、例を使って制御することができます。

以下の国について、指定した特徴をまとめてください。韓国、中国、インド、スペイン、アイスランド
#出力の形式以下のフォーマットに従って階層構造で表示してください
– {国名1} 
 - {都市1日本語} ({都市1英語}) – {東京からの距離をKmで} 
 - {都市2日本語} ({都市2英語}) – {東京からの距離をKmで} 
 - {都市3日本語} ({都市3英語}) – {東京からの距離をKmで}
– {国名2} 
 - {都市1日本語} ({都市1英語}) – {東京からの距離をKmで} 
 - {都市2日本語} ({都市2英語}) – {東京からの距離をKmで}  
 - {都市3日本語} ({都市3英語}) – {東京からの距離をKmで}

ここではまず、先に解説した「テンプレート」を用いて文字情報のフォーマットを指定しています。そして、特に注目してもらいたいのが、国と都市の項目がインデントされていること、そして {国名1}と{国名2} また {都市1日本語}と{都市2日本語}のように、変動部分に数字を付けていることです。ChatGPTはこの数字付きのテンプレートを見て、「繰り返しパターン」が求められていることを理解し、それに従って指定されたそれぞれの国について階層構造になるように情報をアレンジしています。

ChatGPTからの誤情報を減らすには?

ChatGPTは、誤った情報を本当のことのように応答することがあります。これは「Hallucination(ハルシネーション/幻覚」とも呼ばれます。応答内容のほとんどは正しくても、詳細に誤りが含まれる可能性があるので、注意が必要です。

これは、ChatGPTはインターネット上のさまざまなテキストから学習しているので、誤った情報や偏った内容も学習してしまうことが理由のひとつです。さらに、情報そのものは正しくても、最新の情報を持っていないため、古い情報や時代遅れの情報を提供する場合もあります。

正確性が重要な場合、できるだけ誤情報を排除する必要があります。このセクションでは、その方法について解説します。

最新のバージョンを使用する

ChatGPTの最新バージョンを使うと、情報が最新で、回答の質も向上します。

この方法は、最も手っ取り早い対策ですが、最新版を利用するためには有料オプションに加入しなくてならないという短所があります。

質の高いプロンプトを使用する

今回の記事で解説したような、具体的で、正確で、明確なプロンプトを使うことが、正確な情報をChatGPTから得るための最も基本的な条件と言えます。それには、プロンプトの要素を理解して、効果的なプロンプトを構成することが大切です。

追加情報を提供する

最新の情報や複数の情報源を提供することで、ChatGPTはより正確な回答を提供できます。

例えば、特定のニュース記事のリンクを提供して、それに基づいた質問をすると、ChatGPTはそのニュース記事を読み込んだ上で応答してくれます。また、PDFなどの文章をあらかじめアップロードし、その内容を元に応答するように指示することもできます。

リンクやファイルのアップロードなどの機能は、このコラムの執筆時点では有料版でしか提供されていません。無料版の場合は、ニュース記事の内容やPDFの内容をコピーしてChatGPTの会話にペーストして利用することもできます(ただし、ChatGPTに送信できる量には制限があるので大量の情報は扱えません)。

内容の根拠を求める

回答の内容に根拠を求めることを「グラウンディング(grounding)」と呼びます。日本語では「接地」とも呼ばれます。「実世界と結びついた情報」とイメージするとわかりやすいでしょう。

例えば、「この情報の出典は何ですか?」と質問することで、情報の信頼性を確かめることができます。また、「応答に含まれる内容は、外部情報元をリンクで示してください」と指示することで、根拠のない主張を減らすことができます。前述の「追加情報を提供する」と合わせて、「追加情報から主張を支える根拠を探してください。見つからない場合は回答に含めないでください」といった制限を加えることも効果的です。

指示プロンプトをいくつかのステップに分ける

プロンプトの指示項目を工夫することで、正確な回答を引き出す手法が研究されています。その中でも、複雑な処理や質問をより単純ないくつかのステップに分解して、それを順番に記述する方法の効果は広く認められています。

例えば、東京の山手線沿いの有名な観光スポットを、順番に効率よく回りたいとします。まず、次のプロンプトを試してみました。

プロンプト:

以下の手順に従ってください
東京の山手線沿いの観光に適した駅を5つまでリストする。
それぞれの駅から近い著名な観光スポットをひとつあげる。
リストを出力する。

ChatGPTの応答:

新宿駅 – 新宿御苑
・新宿御苑は、都会の真ん中にある広大な自然公園で、四季折々の美しい景色を楽しむことができます。
渋谷駅 – 渋谷スクランブル交差点
・渋谷のスクランブル交差点は、世界でも有名な繁華街の象徴で、数多くの人々が行き交う光景は圧巻です。
上野駅 – 上野恩賜公園(上野動物園)
・上野恩賜公園は、上野動物園や複数の博物館がある文化の中心地で、桜の名所としても知られています。
秋葉原駅 – 電気街
・秋葉原の電気街は、最新の電化製品、アニメグッズ、メイドカフェなど、サブカルチャーの中心地です。
原宿駅 – 明治神宮
・明治神宮は、緑豊かな神聖な空間であり、日本の伝統的な神社の美しさを感じることができます。

残念ながら、このChatGPTの応答には問題があります。駅が山手線の順番になっていないので、このリストに従って観光すると移動の効率が悪くなってしまいます。(原宿は新宿駅の次に寄った方がいいですよね)。

このような場合、ChatGPTにより細かく処理のステップを教えることで、希望する結果に近づけることができます。

改善したプロンプト:

以下の手順に従ってください
東京の山手線沿いの観光に適した駅を5つまでリストする。
それぞれの駅について、新宿駅から何駅目になるかを確認する。
新宿駅から何駅目かの情報を元に、新宿駅か新宿駅に最も近い駅をスタートにして順番に並び替える。
それぞれの駅から近い著名な観光スポットをひとつあげる。
リストを出力する。

改善されたChatGPTの応答:

新宿駅 – 新宿御苑
・新宿駅は山手線の中で中心的な駅の一つです。新宿御苑は、都会の真ん中にある広大な自然公園で、四季折々の美しい景色を楽しむことができます。
原宿駅 (新宿駅から2駅) – 明治神宮
・明治神宮は、緑豊かな神聖な空間であり、日本の伝統的な神社の美しさを感じることができます。
渋谷駅 (新宿駅から3駅) – 渋谷スクランブル交差点
・渋谷のスクランブル交差点は、世界でも有名な繁華街の象徴で、数多くの人々が行き交う光景は圧巻です。
秋葉原駅 (新宿駅から9駅) – 電気街
・秋葉原の電気街は、最新の電化製品、アニメグッズ、メイドカフェなど、サブカルチャーの中心地です。
上野駅 (新宿駅から11駅) – 上野恩賜公園(上野動物園)
・上野恩賜公園は、上野動物園や複数の博物館がある文化の中心地で、桜の名所としても知られています。

この例では「新宿駅から何駅目か」を元にリストを作成するように指示することで、駅が順番通りになりました。

重要な点を再強調する

正確な応答が重要であることを強調すると、ChatGPTの応答精度が上がる傾向があることがわかっています。

例えば、プロンプトの中段にあった「#指示」項目の文言「必ず根拠を示してください」を、プロンプトの最後にもう一度「#重要事項」などの項目で記述するといったやり方があります。ChatGPTは直近の内容に重点を置く傾向があり、効果があるとされています。

まとめ

今回のコラムでは、プロンプトの改善方法として「禁止事項」と「出力の形式」を指定する方法、例を使った改善方法、そしてハルシネーション対策について紹介しました。

プロンプトの要素を詳しく解説するため、俯瞰的に理解するために「フォーム形式」を例に使いました。「フォーム形式」のプロンプトは「プロンプトエンジニアリング」という分野で一般的に最終目標として作成されるプロンプトの種類で、正確で一貫性のある応答をChatGPTから引き出すことに焦点を当てています。

でも、私たちが普段ChatGPTを活用する場合は、「会話形式」が圧倒的に多いでしょう。実際、「フォーム形式」として完成するまでに「会話形式」で改善していくというプロセスを経るのが一般的なので、「会話形式」も重要です。

次回のコラムでは、「会話形式」でのChatGPTの使い方に焦点を当ててご説明します。

執筆:渡邊毅(わたなべ つよし)
マイクロソフト本社ソフトウェアエンジニア - Dynamics 365/カスタマーケア/データアナリティクス・チームに所属。ビジネスインテリジェンスおよびAI機能の統合などを主に担当。趣味は釣りとゲームと3D印刷。プログラミング教育やChatGPTの活用方法についての無料マガジンを note にて公開しています。その他のブログはこちら。
個人ブログ
技術ブログ

  • URLをコピーしました!

この記事が気に入ったら
フォローをお願いします!

もくじ