心を読むことはできない
大規模言語モデルは強力ですが、残念ながら人の心は読めません。
欲しいものがあるなら、できるだけ明確に伝え、心の中で何を考えているかをモデルに推測させないことが大切です。
推測が少ないほど、結果は要件に近づきやすくなります。
ここでは、簡単でよく使う六つの方法を紹介します。
1. 明確な説明を書く
求める回答を得るには、本当に重要な詳細とコンテキストを伝える必要があります。そうしなければ、モデルは推測するしかありません。
| 曖昧な表現 | より明確な表現 |
|---|---|
| Excel で数値を足すには? | Excel で 1 行に並んだドル金額を合計し、右側の「合計」列へ結果を自動入力するには? |
| 大統領は誰? | 2021 年のアメリカ大統領は誰?アメリカ大統領選挙は通常何年ごとに行われる? |
| フィボナッチ数列のメソッドを書いて | Python でフィボナッチ数列を計算するメソッドを書き、各部分の役割をコメントで説明して。 |
| 会議記録を書いて要約して | 架空の会議記録を書き、発言者、要点、明示されたアクション項目を Markdown で列挙して。 |
Prompt は長いほどよいわけではありません。結果に影響する情報が、明確に伝えられているかが重要です。
2. 文体、読者、役割を指定する
特定の語調で出力してほしい場合は、直接指定できます。
文体を指定する
文章作成を依頼したときは、回答の各段落に少なくとも一つ、冗談または気の利いた一言を入れてください。
仕事を紹介してくれた同級生の張三に、感謝の手紙を書いてください。
同じ感謝の手紙でも、堅い公文書のように書くか、気軽な会話のように書くかで、読み心地はまったく変わります。モデルに推測させるより、望む文体を直接伝えたほうが明確です。
もちろん、「各段落に冗談を一つ」は違いを分かりやすくするための例です。実際には「誠実で自然な語調にし、大げさな称賛は使わないでください」と指定することもできます。
役割を指定する
タスクに明確な視点が必要なら、役割も指定できます。
あなたは「大学の中国文学教授」です。授業で作品を解説する視点から回答してください。
李白が「天生我材必有用、千金散尽還復来」と書いたときの感情の変化と、伝えようとした思いを説明してください。
役割と読者を組み合わせる
では、同じ知識を 10 歳の子どもにも分かるように説明したい場合はどうでしょうか?
あなたは「ノーベル物理学賞を受賞した天体物理学者」です。天体物理学の科学解説という視点から回答してください。
回答は 10 歳の子ども向けに、理解しやすく、想像力が広がる内容にしてください。
ブラックホールが形成される仕組みと、その特徴を説明してください。
ここでは、回答の視点、対象読者、表現のしかたを同時に指定しています。「ブラックホールを説明して」とだけ書くより、三つの情報が増えています。
役割の説明は、モデルが視点、読者、基準を理解する助けになります。モデルが実際にその肩書を得るわけではなく、回答が必ず専門的だと証明するものでもありません。
「あなたは世界一優秀な専門家です」と書くより、本当に必要な判断基準を書きましょう。
3. 区切りを使って内容を分ける
一つの Prompt にタスクの説明、元の資料、出力形式が同時に含まれる場合は、三重引用符、Markdown の見出し、XML タグなどを使って分けられます。
三重引用符内の文章を、短い詩で要約してください。
"""
果てしない海の上で、強い風が黒雲をかき集めている。海燕は黒い稲妻のように、誇らしげに飛んでいる。
"""
次のように書くこともできます。
<task>黄鶴楼に関係する二つの詩を比較し、理由を説明してください。</task>
<article>昔人已乘黄鶴去,此地空余黄鶴楼……</article>
<article>故人西辞黄鶴楼,煙花三月下揚州……</article>
フィールド名をそのまま使って、要約と見出しを分けることもできます。
記事の要約と見出しを提示します。
見出しが要約を正確に表し、読者に記事の主題が伝わるかを判断してください。
この二つの基準を満たさない場合は、見出し案を 5 個出してください。
要約:長時間にわたる強い雨が中国北部の複数地域に影響し、広い範囲で雨が続き、一部では激しい豪雨となる可能性がある。
見出し:中国北部の各地で強い雨、一部地域では激しい豪雨に注意
この「要約:」と「見出し:」も区切りです。特殊な記号は使っていませんが、どこが要約で、どこが見出しかをモデルへ明確に伝えられます。
簡単なタスクでは、区切りの有無による明確な違いが見えないかもしれません。タスクが複雑で、資料が長くなるほど、明確な境界が重要になります。
区切りによってモデルが突然賢くなるわけではありません。「何が指示で、何が資料で、何が形式か」を明確に示す助けになるだけです。
4. タスクを完了する手順を指定する
多くのタスクは、もともと複数の段階に分けて進める必要があります。手順を書けば、モデルは私たちの進め方をたどりやすくなります。
次の順序でタスクを完了してください。
1. 三重引用符内の文章を一文で要約し、先頭に「要約:」と書く。
2. その要約を英語に翻訳し、先頭に「翻訳:」と書く。
"""
{{処理する文章}}
"""
ただし、手順は多いほどよいわけではありません。本当に結果に影響する手順を先に書き、簡単なタスクを見栄えのためだけに何十段階にも分けないでください。
5. 例を示す
求める文体や形式を、一つのルールだけでは説明しにくいことがあります。
そのようなときは、例を直接示せます。
あなたは「不思議な動物の命名器」です。例の雰囲気に合わせて動物に名前を付けてください。
動物:猫
名前:暗夜のエージェント
動物:犬
名前:スーパーライトニング
次に「馬」の名前を一つ考えてください。
一つから三つの質の高い例があれば、求めている対応関係をモデルに示せることがよくあります。
ただし、モデルは例の問題点もまねます。そのため、例は理想的なケースだけでなく、実際のタスクで起こる境界条件も扱う必要があります。
6. 出力の長さを指定する
おおよその文字数、文数、段落数、要点数で出力を制限できます。
ただし、これらの指定をモデルが守る難しさは、すべて同じではありません。
同じ文章を使って、三回続けて試してみましょう。比較しやすいように、次の三つの Prompt では元の文章をまったく同じにしています。
1 回目:約 50 文字
三重引用符内の内容を、約 50 文字で要約してください。
"""
果てしない海の上で、強い風が黒雲をかき集めている。海燕は黒い稲妻のように、誇らしげに飛んでいる。
翼で波に触れたかと思うと、矢のように黒雲へ突き進む。その叫び声には、嵐への渇望が満ちている。
"""
「約 50 文字」は明確に見えますが、モデルは Token 単位で文章を生成し、一文字書くたびに文字数を数えているわけではありません。50 文字に近づくこともあれば、大きく超えることもあります。
2 回目:二段落
三重引用符内の内容を、二段落で要約してください。
"""
果てしない海の上で、強い風が黒雲をかき集めている。海燕は黒い稲妻のように、誇らしげに飛んでいる。
翼で波に触れたかと思うと、矢のように黒雲へ突き進む。その叫び声には、嵐への渇望が満ちている。
"""
今回は、結果が二段落かどうかをひと目で確認できます。厳密な文字数より、段落数のほうが通常は観察しやすい指定です。
3 回目:三つの要点
三重引用符内の内容を、三つの要点にまとめてください。
"""
果てしない海の上で、強い風が黒雲をかき集めている。海燕は黒い稲妻のように、誇らしげに飛んでいる。
翼で波に触れたかと思うと、矢のように黒雲へ突き進む。その叫び声には、嵐への渇望が満ちている。
"""
要点数も分かりやすく、結果が三項目かどうかをすぐに確認できます。
三回とも同じ文章を処理し、変えたのは長さの指定方法だけです。「約 50 文字」は文字数の範囲を指定し、「二段落」と「三つの要点」は構造を指定します。同じ種類の要件ではありません。
段落数や要点数は通常、文字数より確認しやすいものです。それでも検査を省略してはいけません。業務で文字数、段落数、要点数を厳密に満たす必要がある場合は、生成後にプログラムや編集工程でもう一度検証してください。
最後にもう一度確認する
この六つのコツを、すべての Prompt で必ず使う必要はありません。
簡単なタスクなら、直接明確に伝えるだけで十分です。複雑なタスクでは、コンテキスト、区切り、手順、例を少しずつ追加します。
本当の目標は Prompt を長くすることではありません。モデルの推測を減らし、私たちが結果を確認しやすくすることです。