Copilotがどうとか言われ始めて不安になったオッサンが、学んだプロンプトをオッサン視点で解説します。
(注)誤釈や主観がおおいに含まれていますがご勘弁を。
以下のサイトに書かれているプロンプトの用語を要約しています。
https://www.promptingguide.ai/jp
基礎知識
プロンプトの基本フォーマット
指示 + 文脈(前提条件)+ 入力(データ)+ 出力(のフォーマット)」
で構成する。
重要な考慮事項
考慮事項 | 概要 |
---|---|
具体性と明瞭性 | 人間に指示を与えるのと同様に、曖昧さは、予期せぬ結果につながる可能性がある |
構造化された入力 | JSONやXMLなどの形式を用いて入力を構造化することで、LLMの情報理解・処理能力が大幅に向上する。 |
構造化された出力 | 出力形式(リスト、段落、コードスニペットなど)を指定することで、回答の関連性が向上する。 |
構造強化のための区切り文字 | 特殊文字を区切り文字として使用すると、構造が明確に分離されるため、モデルの理解が向上する。 |
複雑な操作のためのタスク分解 | LLMに複数のタスクを包含するプロンプトを提示するのではなく、単純なサブタスクに分解することで、モデルが各サブタスクに個別に焦点を合わせることができ、最終的な精度が向上する。 |
few-shot
例を与えてLLMが出力を予測できるようにすること。
例を与えない場合は one-shot と呼ぶ。
続きの指示を繰り返し入力する手法を Prompt Chaining と呼ぶ。
確率パラメータを減らし、答えがわからない場合はそれを認める(たとえば、「わかりません」)ように指示することで、モデルが生成する応答の多様性を少なくすることができる。
例
わからなければ、わからないと答えてください
zero-shot CoT (Chain-of-Thought)
「正しい答えを得るために、ステップバイステップで考えてみましょう。」という文言を追加する。(※)
※zero-shot CoTでは「ステップバイステップで考えてみましょう」が使われる。
"正しい答えを〜" は、より高いパフォーマンスを発揮するプロンプトとしてAPEで発見された。
私は市場に行って10個のリンゴを買いました。隣人に2つ、修理工に2つ渡しました。それから5つのリンゴを買って1つ食べました。残りは何個ですか?
正しい答えを得るために、ステップバイステップで考えてみましょう。
すでにGTP-3.5以上では上記文言を入れなくてもCoTしてくれる。
しかしプロンプトとして入力すると明確にCoTを意識した回答を得られる。
zero-shot CoTで期待回答が得られない場合、few-shotで多数の例を提示する。
これにより誤った推論を置き換える手法を Self-Consistency と呼ぶ。
「thought」は「ソーt」と発音し、日本語では「ソート」とは読みません。
知識生成プロンプティング&RAG
LLMに前提とする(新しいルールなどの)知識を注入するプロンプト技法。
「このURLのドキュメントに基づき...」のような外部ソース参照には別名「RAG(Retrieval Augmented Generation)」がついている。
※RAGはVectorStoreのような外部ソースとの接続するケースでよく使われる。
質問:ゴルフの一部は、他の人よりも高いポイント総数を得ようとすることです。「はい」か「いいえ」?
知識:ゴルフの目的は、できるだけ少ない打数で一連のホールをプレイすることです。通常、ゴルフのラウンドは18ホールで構成されます。1回のホールは、標準のゴルフコースに1回プレイされます。各打数は1ポイントとしてカウントされ、総打数がゲームの勝者を決定するために使用されます。
説明と回答:
Tree of Thoughts (ToT)
(正確には論文を見るべきだが)人間がLMに追加条件を与えることで、中間回答を自己評価させる。
LM版の壁打ち(LMの1回目の回答→条件を付け加えて再回答→期待値になるまで繰り返し)のこと。
プロンプト例
この質問について、3人の異なる専門家が回答していると想像してください。
すべての専門家は、自分の思考の1つのステップを書き留め、
それをグループと共有します。
その後、すべての専門家は次のステップに進みます。以後同様です。
もし専門家の中に、いかなる時点で誤りに気づいた場合は、退場します。
質問は...
PAL(プログラム支援言語モデル)
このプロンプトはチャットプロンプトにとって直接有益ではありませんが、プログラマがファインチューニングについての洞察を得られると思い紹介に含めました。
解決策を取得するための自由形式テキストの代わりに、Pythonインタプリタのようなプログラム実行時に解決ステップをオフロードします。
他にも、以下のような考え方があります。
プロンプト名 | 効果 | 製品イメージ |
---|---|---|
Automatic Reasoning and Tool-use (ART) & ReAct | タスク入力→Agentがツールの使用を求める→ツールが呼ばれる度に一時停止→ツール出力を統合する | Copilot Agent |
自動プロンプトエンジニア(APE) | 検索キーワード入力→検索手順を指導→評価スコアに基づいて次の指示を選択 | Perplexity(Proサーチ) |
Active-Prompt | CoT例をいくつか含めて問い合わせ→k個の可能な回答が生成される→不確実な質問が人間によって注釈付け→新しい注釈付きの例を推論に利用 | (?) |
方向性刺激プロンプティング | 小さなポリシーLMを用意→入力をフィルタ→LLMを誘導するヒントを生成 | Copilot等(知財の回答を抑止など) |
Reflexion | a) タスクを定義する、b) 軌跡を生成する、c) 評価する、d) 反省を行う、e) 次の軌跡を生成する | (?) |
Prompt Function
プロンプトに関数名をつけて再利用する。
Memorize the following Prompt Function
function_name: [trans_word]
input: ["text"]
rule: [Translate input text from any language to Japanese]
trans_word('婆罗摩火山处于享有“千岛之国”美称的印度尼西亚. 多岛之国印尼有4500座之多的火山, 世界著名的十大活火山有三座在这里.')
マルチモーダルCoTプロンプティング
テキストとビジョンを2段階のフレームワークに組み込んでいます。最初のステップは、マルチモーダル情報に基づく理由生成です。これに続いて、情報量の多い生成された理由を活用した回答推論が行われます。
(引用元) https://www.promptingguide.ai/jp/techniques/multimodalcot