HUOXIU

大規模モデルテンプレートに効果的なプロンプトを書くには?コンテスト優勝者の体験談(上級レベル)

編集者注:近年、プロンプトエンジニアリングを通して大規模モデルのポテンシャルを最大限に引き出す方法が注目を集めています。プロンプトエンジニアリングの手法を用いて大規模モデルを効果的かつコスト効率よく活用する方法への注目が高まっています。

本日お勧めする記事では、プロンプト エンジニアリングには芸術と科学の融合が必要であり、技術的背景を理解しながら創造性と戦略的思考が求められると主張しています。

このシリーズの記事では、シンガポールで開催された第1回GPT-4プロンプトエンジニアリングコンペティションで著者が使用した戦略と手法について詳しく説明します。具体的には、CO-STARフレームワークを用いたプロンプトの構築、区切り文字を用いた意味単位の定義、システムプロンプトを利用した行動制約の追加、データセット分析におけるGPT-4のみの利用などです。これらの手法はすべて例を通して検証されており、プロンプトエンジニアリングの重要性を実証しています。

この記事はこのシリーズの第 2 部であり、上級ユーザーに適した高度なプロンプト エンジニアリング戦略について詳しく説明します。

著者 | シーラ・テオ

編纂者:岳陽

先月、私はシンガポール政府技術庁(GovTech)が主催し、400人を超える優秀な参加者を集めたシンガポール初のGPT-4プロンプトエンジニアリングコンテストで賞を受賞するという栄誉に浴しました。

プロンプトエンジニアリングは、芸術と科学を融合させた分野です。テクノロジーの理解だけでなく、創造性と戦略的思考も求められます。以下は、私が学習中に学んだプロンプトエンジニアリングの戦略をまとめたものです。これらの戦略は、あらゆる大規模言語モデル(LLM)を要件を正確に実行し、さらにはそれを超える成果へと導くことができます。

著者注:

この記事を執筆するにあたり、オンラインで広く議論され、文書化されている従来のプロンプトエンジニアリング手法を避けるよう努めました。その代わりに、この記事の目的は、私が実験を通して得た新たな知見と、特定の手法に対する異なる理解を紹介することです。この記事を楽しんでいただければ幸いです。

このシリーズの記事には以下の内容が含まれており、🔵 は初心者に適したプロンプト手法 (基本セクションを参照) を指し、🔴 は高度な戦略 (この記事の焦点) を指します。

1. [🔵] CO-STAR フレームワークを使用してプロンプトを構築します。

2. [🔵] 区切り文字を使用してプロンプトをセクションに分割します。

3. [🔴] LLMガードレールを使用してシステムプロンプトを作成します。 (翻訳者注:「ガードレール」とは、大規模言語モデルによって生成されたコンテンツが特定の標準または要件に準拠していることを保証し、不正確、不適切、または有害な情報の生成を防止するために使用される保護メカニズムまたは制限を指します。)

4. [🔴] LLM のみを使用してデータセットを分析する (プラグインやコードは不要) – このセクションでは、GPT-4 を使用して実際の Kaggle データセットを分析する実用的な例を紹介します。

01 [🔴] LLMガードレールを使ったシステムプロンプトの作成

本題に入る前に、このセクションはシステムプロンプト機能を備えたLLMにのみ適用される点にご注意ください。これは、この記事の基礎セクションや他の章がすべてのLLMに適用されるのとは異なります。最も有名なLLMは当然ChatGPTなので、このセクションではChatGPTを例として使用します。

1.1 システムプロンプトに関する用語

まず、用語、特にChatGPTにおける3つの用語、「システムプロンプト」、「システムメッセージ」、「カスタム指示」について明確にしておきましょう。これらの用語はChatGPTではほぼ同義語として扱われています。そのため、多くの人が(私も含めて!)混乱し、OpenAIがこれらの用語を解説する記事を公開するほどでした。以下に概要を示します。

  • 「システム プロンプト」と「システム メッセージ」は、Chat Completions API を介してプログラムで ChatGPT と対話するときに使用される用語です。
  • 一方、「カスタム指示」は、https://chat.openai.com/ ユーザー インターフェースを通じて ChatGPT と対話するときに使用される用語です。

画像はEnterprise DNAブログより

一般的に、これら3つの用語は同じものを指すので、混同しないでください。この記事の以降のセクションでは、「システムプロンプト」という用語を使用します。それでは始めましょう!

1.2 システムプロンプトとは何ですか?

システムプロンプトは、LLMの動作に関する指示を与えるための追加プロンプトです。システムプロンプトは、LLMに渡す「通常の」プロンプト(つまり、ユーザープロンプト)の一部ではないため、追加プロンプトとみなされます。

チャットでは、LLMに新しいプロンプトを送信するたびに、システムプロンプトがフィルターのように機能し、LLMが応答する前に自動的にこれらのプロンプトを適用します。つまり、LLMが応答する際にシステムプロンプトが考慮されるということです。

1.3 システムプロンプトはいつ使用すればよいですか?

最初に思い浮かぶ疑問は、なぜ LLM との新しい会話の最初のプロンプトではなくシステム プロンプトで指示を与え、その後 LLM とさらに会話をする必要があるのか​​、ということです。

答えは、LLMの会話記憶能力には限界があるということです。後者の場合、会話が続くにつれて、LLMはチャットで最初に提供した指示を「忘れて」しまい、その指示が古くなる可能性があります。

一方、システムプロンプトで指示が提供されている場合、これらのシステムプロンプトはチャットで提供される新しいプロンプトごとに送信されます。これにより、チャットの長さに関係なく、LLMはチャット全体を通してこれらの指示を受信し続けることができます。

要約:

チャット全体を通して、システム プロンプトを使用して、応答時に LLM に記憶してほしい指示を提供します。

1.4 システム プロンプトには何を含めるべきですか?

システム プロンプトには通常、次のカテゴリの指示が含まれます。

  • 目標は、会話全体を通じて LLM が実行する必要があることを記憶できるようにタスクを定義することです
  • 出力形式、これにより LLM は会話全体を通じてどのように応答すべきかを記憶します。
  • ガードレールとは、LLMが会話全体を通してどのように反応すべきでないかを記憶しておくための措置です。ガードレールはLLMガバナンスにおける新たな領域であり、LLMの許容される動作の境界を指します。

たとえば、システム プロンプトは次のようになります。

次のテキストを使用して質問に回答します: [テキストを挿入]。

次の形式の JSON オブジェクトで応答します: {“Question”: “Answer”}。

質問に答えるのに十分な情報がテキストに含まれていない場合は、情報を作り上げず、「NA」と回答してください。

[対象範囲を挿入]に関連する質問にのみ回答できます。年齢、性別、宗教などの人口統計情報に関する質問には回答しないでください。

各セクションで扱われるカテゴリは次のとおりです。

システムプロンプトの分解 — 著者による画像

1.5 しかし、「通常の」チャット メッセージとは正確には何でしょうか?

ここで、「システムプロンプトで既に多くの情報が提供されているようだ。では、通常のチャットプロンプト(つまりユーザープロンプト)には何を書けばいいのだろうか?」と疑問に思われるかもしれません。

システムプロンプトは、現在の一般的なタスクの概要を示します。上記のシステムプロンプトの例では、タスクは特定のテキストのみを使用して質問に答えるというように定義されており、LLMは{“質問”: “回答”}という形式で回答するように指示されています。

次のテキストを使用して質問に回答します: [テキストを挿入]。

次の形式の JSON オブジェクトで応答します: {“Question”: “Answer”}。

このシナリオでは、チャット中の各ユーザープロンプトは、LLMにテキストで回答してほしい質問に簡略化されます。例えば、ユーザーが「このテキストの内容は何ですか?」と質問すると、LLMは「このテキストの内容は…」と回答します。

このタスクの例をさらに要約してみましょう。この場合、上記のシステムプロンプトの最初の行は次のようになります。

次のテキストを使用して質問に回答します: [テキストを挿入]。

編集後:

提供されたテキストを使用して質問に答えます。

これで、各ユーザーのチャット プロンプトに、質問に回答するためのテキストと回答する質問が含まれるようになります。例:

<テキスト>

[テキストを挿入]

</テキスト>

<質問>

[質問を挿入]

</質問>

ここでは、XMLタグを区切り文字として用いて、LLMに必要な2つの情報フラグメントを構造化された形式で提供します。XMLタグで使用されている「テキスト」と「質問」という名詞は、システムプロンプトで使用されている名詞に対応しており、LLMはタグとシステムプロンプトの指示の関係を理解できます。

要約すると、システムプロンプトはタスク全体の指示を提供し、ユーザープロンプトはタスク実行の具体的な詳細を提供する必要があります。例えば、この場合、具体的な詳細とはテキストと質問です。

1.6 動的LLMガードレール

上記のコードは、システムプロンプトに数行のコードを追加することでガードレールを追加します。これらのガードレールは固定されており、チャット中は変更されません。しかし、会話のさまざまな段階で異なるガードレールを設定したい場合はどうすればよいでしょうか?

ChatGPTウェブインターフェースのユーザーがこれを直接行う方法は現在ありません。しかし、ChatGPTをプログラムで操作している場合は、幸運です!効果的なLLMガードレールの構築に焦点が移るにつれ、より詳細で動的なガードレールをプログラムで設定できるオープンソースパッケージがいくつか登場しています。

特に注目すべきは、NVIDIAチームが開発したNeMo Guardrails[1]です。これは、ユーザーとLLM間の想定される会話フローを設定することで、チャットのさまざまなポイントで異なるガードレールを設定し、チャットの進行に合わせて進化する動的なガードレールを実現できます。ぜひ習得することをお勧めします。

02 [🔴] LLM のみを使用してデータセットを分析する(プラグインやコードは不要)

ChatGPTのGPT-4向けのOpenAIによる高度なデータ分析プラグインについてご存知かもしれません。これはプレミアム(有料)アカウントでのみ利用可能です。このプラグインを使用すると、ChatGPTにデータセットをアップロードし、データセット上で直接コードを実行して、正確なデータ分析を行うことができます。

しかし、LLMを使用してデータセットを分析するために、必ずしもそのようなプラグインが必要ではないことをご存知でしたか?まずは、LLMを使用してデータセットを分析することの利点と限界を理解しましょう。

2.1 大規模言語モデルが解析に適さないデータセットの種類

ご存知のとおり、LLM は正確な数学的計算を実行する能力が限られているため、次のようなデータセットの正確な定量分析を必要とするタスクには適していません。

  • 記述統計:平均や分散などの尺度を通じて一連の値を定量的に要約します。
  • 相関分析: 列間の正確な相関係数を取得します。
  • 仮説検定などの統計分析は、データ ポイントのグループ間に統計的に有意な差があるかどうかを判断するために使用されます。
  • 機械学習: 線形回帰、勾配ブースティングツリー、ニューラルネットワークなどを使用して、データセットに対して予測モデリングを実行します。

OpenAI が Advanced Data Analytics プラグインをリリースした理由は、データセット上でのこれらの定量的タスクの実行を容易にし、プログラミング言語でデータセット上でコードを実行してそのようなタスクを実行できるようにするためです。

では、なぜデータセットを分析するためにそのようなプラグインを使用せずに LLM を使用することを選択するのでしょうか?

2.2 大規模言語モデルが得意とするデータセット分析の種類

LLMはパターンや傾向を特定することに優れています。この能力は、多様かつ膨大な量のデータに関する広範なトレーニングによって培われ、一見すると分かりにくい複雑なパターンを認識することを可能にします。

これにより、次のようなデータセットに基づいてパターン認識タスクを実行するのに最適です。

  • 異常検出: 1 つ以上の値列に基づいて、標準から逸脱する異常なデータ ポイントを識別します。
  • クラスタリング: 類似した特性を持つデータ ポイントをグループ化します。
  • 列間の関係: 異なる列間の関係を分析することで、データ内の複雑なパターンや傾向を明らかにすることができます。
  • テキスト分析 (テキストベースの列の場合) : トピックまたは感情に基づく分類。
  • 傾向分析 (時間特性を持つデータセットの場合) : 列内の時間の経過に伴うパターン、季節変動、傾向を識別します。

このようなパターンベースのタスクでは、LLM のみを使用すると、コードを使用するよりも短時間でより良い結果が得られる可能性があります。この点を例で説明しましょう。

2.3 LLMのみを使用したKaggleデータセットの分析

我々は、企業が顧客をより深く理解するために顧客ベースをセグメント化しようとしている顧客の性格分析のために設計された、人気のある実際のKaggleデータセット[2]を使用します。

LLM分析結果のその後の検証を容易にするため、データセットから50行をサブセットとして抽出し、最も関連性の高い列のみを保持しました。分析に使用するデータセットは以下のようになります。各行は顧客を表し、各列は顧客情報を表します。

データセットの最初の3行 — 著者による画像

ある企業のマーケティングチームで働いていると想像してみてください。あなたの仕事は、この顧客情報データセットを用いてマーケティング活動を導くことです。これは2つのステップから成ります。まず、データセットを用いて顧客を複数の意味のある顧客セグメントに細分化します。次に、各顧客セグメントに最適なクリエイティブマーケティングのターゲティング方法を決定します。これはまさに現実のビジネス課題であり、LLMのパターン検出機能(ステップ1)は、この分野で真価を発揮します。

このタスクのプロンプトを、4つのプロンプトエンジニアリング手法(後ほど詳しく説明します[3])を使用して次のように定義します。

1. 複雑なタスクを簡単なステップに分解します。

2. 各ステップの中間出力を参照します。

3. LLM ファイルのフォーマットに関する回答。

4. データセットから指示を分離します。

システムプロンプト:

データサイエンティストとしてデータセットを分析していただきたいのですが、データセットに存在しない情報を捏造しないでください。私が依頼する分析ごとに、正確かつ明確な回答を提供してください。他のプラットフォームで分析を行うためのコードや手順は提供しないでください。

プロンプト:

# コンテクスト #

私はワインを販売しています。顧客に関する情報のデータセット(生年、婚姻状況、収入、子供の数、前回の購入からの日数、購入金額)を保有しています。

#############

#客観的#

データセットを使って顧客をグループ分けし、各グループに向けたマーケティング活動のターゲティング方法についてアイデアを出していただきたいです。以下のステップバイステップのプロセスに従ってください。コードは使用しないでください。

1. クラスター:データセットの列を使用してデータセットの行をクラスター化します。同じクラスター内の顧客は類似した列値を持ち、異なるクラスター内の顧客は明確に異なる列値を持つようにします。各行が1つのクラスターにのみ属するようにしてください。

見つかったクラスターごとに、

2. CLUSTER_INFORMATION: データセット列の観点からクラスターを説明します。

3. CLUSTER_NAME: [CLUSTER_INFORMATION] を解釈して、このクラスター内の顧客グループの短い名前を取得します。

4. MARKETING_IDEAS: この顧客グループに製品を販売するためのアイデアを生み出します。

5. 根拠: [MARKETING_IDEAS] がこの顧客グループにとって関連性があり効果的である理由を説明します。

#############

#スタイル#

ビジネス分析レポート

#############

#トーン#

専門的、技術的

#############

#観客#

ビジネスパートナーの皆様。あなたのマーケティング戦略は綿密に練られ、データに裏付けられていることを納得していただきたいと思っています。

#############

# 回答: マークダウンレポート #

<[CLUSTERS]内の各クラスターについて>

— 顧客グループ: [CLUSTER_NAME]

— プロファイル: [CLUSTER_INFORMATION]

— マーケティングアイデア: [MARKETING_IDEAS]

— 根拠: [根拠]

<別紙>

分析を裏付けるために、各クラスターに属する行番号のリストを表形式で示してください。表のヘッダーには[[CLUSTER_NAME], 行リスト]を使用してください。

#############

# 分析を開始 #

理解できたら、データセットを私に尋ねてください。

GPT-4 のレスポンスは次のとおりです。次に、データセットを CSV 文字列として渡します。

GPT-4の応答 — 著者による画像

GPT-4 は、必要なマークダウン形式で分析結果を返します。

GPT-4の応答 — 著者による画像

GPT-4の応答 — 著者による画像

GPT-4の応答 — 著者による画像

2.4 LLMの分析結果の検証

簡潔にするために、検証のために LLM によって生成された 2 つの顧客グループ (若い家族と目の肥えた愛好家) を選択します。

2.4.1 若い家族

  • LLM はこのグループの特徴を次のようにまとめました。1980 年以降に生まれ、結婚または同棲しており、中低所得で、子供がおり、頻繁に小額の買い物をする人々です。
  • LLMはデータセット内のこれらの行を若い家族グループにクラスタリングしました:3、4、7、10、16、20

データセットを詳しく調べると、これらの行の完全なデータは次のようになります。

若い家族に関する完全なデータ — 著者による画像

LLMによって識別された顧客データは、識別された顧客グループに正確に一致しています。事前の前処理なしで、null値を持つデータでさえクラスタリングできます。

2.4.2 こだわりのある愛好家

  • LLM はこの人口の特徴を次のようにまとめました:年齢範囲が広く、婚姻状況はさまざま、収入が高く、子供の状況はさまざま、購入支出額が高い。
  • LLM は、この母集団グループに対応するデータ行を 2、5、18、29、34、36 として識別します。

データセットを詳しく調べると、これらの行の完全なデータは次のようになります。

目の肥えた愛好家のための完全なデータ — 著者による画像

これも、LLM によって特定された人口統計データと非常によく一致しています。

この例は、LLM がパターンを発見し、多次元データセットを解釈および改良し、そこから有意義な洞察を抽出しながら、その分析がデータセットに深く根ざしていることを保証する能力を示しています。

2.5 ChatGPT の高度なデータ分析プラグインを使用するとどうなるでしょうか?

分析の完全性を確保するため、同じプロンプトを使用し、ChatGPTにコードを使って同じ分析を実行させようとしました。このコードでは、高度なデータ分析プラグインが起動しました。プラグインは、データセットに対してK-Meansなどのクラスタリングアルゴリズムのコードを直接実行することで各ユーザーグループの特性を取得し、各グループのデータを統合してマーケティング戦略を提供するという構想でした。

ただし、データセットには 50 行しかないにもかかわらず、複数回の試行で次のエラー メッセージが表示され、出力はありませんでした。

試行1でエラーが発生し、出力なし — 著者による画像

試行2ではエラーが発生し、出力はなし — 著者による画像

高度なデータ分析プラグインを使用すると、データセットに対してより単純なタスク (記述統計の計算やグラフの作成など) を実行するのは簡単に思えるかもしれませんが、特定の計算アルゴリズムを必要とするより高度なタスクでは、計算上の制限やその他の理由により、エラーが発生したり、出力されなかったりすることがあります。

2.6 では、データセットを分析するために LLM を使用するのはいつでしょうか?

答えは分析対象のデータの種類によって異なります。

正確な数学的計算や複雑なルールベースの処理を必要とするタスクの場合、従来のプログラミング手法は依然として優位性を持っています。

パターン認識タスクにおいて、従来のプログラミングやアルゴリズムを用いたアプローチは困難であったり、時間のかかる場合があります。しかし、LLMはそのようなタスクに優れており、分析を裏付ける添付ファイルやMarkdown形式の完全な分析レポートなど、追加の出力も提供できます。

最終的に、LLM を使用するかどうかの決定は、手元のタスクの性質と、パターン認識における LLM の利点と、従来のプログラミング手法によって提供される精度および特異性との間のバランスをとることに依存します。

2.7 さて、プロンプトエンジニアリングに戻りましょう。

このセクションを終了する前に、このデータセット分析を生成するために使用されたプロンプトを確認し、使用されたプロンプト エンジニアリングの主要な手法を分析してみましょう。

プロンプト:

# コンテクスト #

私はワインを販売しています。顧客に関する情報のデータセット(生年、婚姻状況、収入、子供の数、前回の購入からの日数、購入金額)を保有しています。

#############

#客観的#

データセットを使って顧客をグループ分けし、各グループに向けたマーケティング活動のターゲティング方法についてアイデアを出していただきたいです。以下のステップバイステップのプロセスに従ってください。コードは使用しないでください。

1. クラスター:データセットの列を使用してデータセットの行をクラスター化します。同じクラスター内の顧客は類似した列値を持ち、異なるクラスター内の顧客は明確に異なる列値を持つようにします。各行が1つのクラスターにのみ属するようにしてください。

見つかったクラスターごとに、

2. CLUSTER_INFORMATION: データセット列の観点からクラスターを説明します。

3. CLUSTER_NAME: [CLUSTER_INFORMATION] を解釈して、このクラスター内の顧客グループの短い名前を取得します。

4. MARKETING_IDEAS: この顧客グループに製品を販売するためのアイデアを生み出します。

5. 根拠: [MARKETING_IDEAS] がこの顧客グループにとって関連性があり効果的である理由を説明します。

#############

#スタイル#

ビジネス分析レポート

#############

#トーン#

専門的、技術的

#############

#観客#

ビジネスパートナーの皆様。あなたのマーケティング戦略は綿密に練られ、データに裏付けられていることを納得していただきたいと思っています。

#############

# 回答: マークダウンレポート #

<[CLUSTERS]内の各クラスターについて>

— 顧客グループ: [CLUSTER_NAME]

— プロファイル: [CLUSTER_INFORMATION]

— マーケティングアイデア: [MARKETING_IDEAS]

— 根拠: [根拠]

<別紙>

分析を裏付けるために、各クラスターに属する行番号のリストを表形式で示してください。表のヘッダーには[[CLUSTER_NAME], 行リスト]を使用してください。

#############

# 分析を開始 #

理解できたら、データセットを尋ねてください。

ヒント1: 複雑なタスクを簡単なステップに分解する

LLMは単純なタスクには優れていますが、複雑なタスクに関してはそれほど優れたパフォーマンスを発揮しません。そのため、このような複雑なタスクの場合は、LLMが実行できるような、簡潔で段階的な指示に分解することが重要です。目標は、LLMがタスクを実行する際に取る手順をLLMに提供することです。

この例では、手順は次のとおりです。

次のステップバイステップのプロセスを使用し、コードは使用しないでください。

1. クラスター:データセットの列を使用してデータセットの行をクラスター化します。同じクラスター内の顧客は類似した列値を持ち、異なるクラスター内の顧客は明確に異なる列値を持つようにします。各行が1つのクラスターにのみ属するようにしてください。

見つかったクラスターごとに、

2. CLUSTER_INFORMATION: データセット列の観点からクラスターを説明します。

3. CLUSTER_NAME: [CLUSTER_INFORMATION] を解釈して、このクラスター内の顧客グループの短い名前を取得します。

4. MARKETING_IDEAS: この顧客グループに製品を販売するためのアイデアを生み出します。

5. 根拠: [MARKETING_IDEAS] がこの顧客グループにとって関連性があり効果的である理由を説明します。

「顧客をセグメント化し、各グループごとにマーケティング戦略を立案する」といったタスク全体を LLM に単純に委ねるよりも、LLM アプローチでは、ステップごとの指示を提供することで、適切な結果が得られる可能性が高くなります。

ヒント2: 各ステップの中間出力を使用する

LLM にステップごとの指示を提供する場合は、各ステップの中間出力に、CLUSTERS、CLUSTER_INFORMATION、CLUSTER_NAME、MARKETING_IDEAS、RATIONALE などの大文字の変数名を付けることができます。

これらの変数名と指定された命令を区別するために、大文字が使用されています。これらの中間出力は、後で[VARIABLE_NAME]のように角括弧を使用して参照できます。

ヒント3:大規模な模範解答のフォーマットを標準化する

ここでは、LLMレスポンスの見栄えを良くするために、Markdown形式のレポートが必要です。中間出力内の変数名もレポートの構造を決定する上で役立ちます。

# 回答: マークダウンレポート #

<[CLUSTERS]内の各クラスターについて>

— 顧客グループ: [CLUSTER_NAME]

— プロファイル: [CLUSTER_INFORMATION]

— マーケティングアイデア: [MARKETING_IDEAS]

— 根拠: [根拠]

<別紙>
分析を裏付けるために、各クラスターに属する行番号のリストを表形式で示してください。表のヘッダーには[[CLUSTER_NAME], 行リスト]を使用してください。

実際、その後 ChatGPT にレポートをダウンロード可能なファイルとして提供するようリクエストし、その応答を使用して最終レポート ドキュメントを作成することもできます。

GPT-4の応答をファイルとして保存する — 著者による画像

ヒント 4: タスクの説明をデータセットから分離します。

最初のプロンプトでは、LLMにデータセットを提供していないことにお気づきでしょう。代わりに、プロンプトにはデータセット分析のタスクの説明のみが含まれ、次のように締めくくられています。

# 分析を開始 #

理解できたら、データセットを尋ねてください。

ChatGPT は理解したと応答し、次のプロンプトでデータセットを CSV 文字列として渡すように指示しました。

GPT-4の応答 — 著者による画像

しかし、なぜ命令をデータセットから分離するのでしょうか?

端的に言えば、LLMのコンテキストウィンドウには制限があり、具体的には1つのプロンプトに入力できるトークンの数に制限があります。命令とデータの両方を含む長いプロンプトはこの制限を超え、切り捨てや情報の損失につながる可能性があります。

より複雑な答えは、指示をデータセットから分離することで、LLM の明瞭性を維持し、情報を見落とす可能性を減らすことができるということです。例えば、100語の回答を要求したのに、LLM がそれよりも長い段落を返したなど、長めのプロンプトで与えられた特定の指示を LLM が「うっかり忘れてしまう」という状況に遭遇したことがあるかもしれません。まず指示を受け取り、次に指示が処理するデータセットを受け取ることで、LLM は実行すべきタスクを理解し、その後に提供されるデータセットで指示を実行することができます。

ただし、チャットベースの LLM のみが対話メモリを保持するため、指示とデータセットの分離を実現できますが、補完 LLM はそうではないことに注意してください。

読んでくれてありがとう!

終わり