こんにちは、AIニュースアプリ Morning AI 開発者の矢野哲平です。この記事では、生成AIの特性からプロンプトを組み立てる方法について触れます。
生成AIは便利ですよね。テキストを入力するだけで文章を生成してくれます。ただ、生成AIは魔法の箱ではなく、内部ではその特性に従って動いています。この特性を知っておくと、プロンプトの書き方や運用の仕方も変わってきます。仕組みを理解して、生成AIをより精度高く使っていこう、というのがこの記事のねらいです。
この記事では、主に次の3つのポイントを解説します。
- 生成AIの仕組み
- 生成AIの4つの特性
- その4つの特性を踏まえた、良いプロンプトの書き方
まずは1問、クイズから
いきなりですが、質問です。次のうち、どちらが良いプロンプトでしょうか。ここでは翻訳のタスクで考えてみます。
- A: 「次の文章を日本語に翻訳してください」と先に書き、その後に英語の文章を貼り付ける
- B: 先に英語の文章を貼り付けて、その後に「この文章を日本語に翻訳してください」と書く
翻訳の対象となる英語の文章を、指示の前に持ってくるか後に持ってくるか、という違いです。
答えはAです。「次の文章を日本語に翻訳してください」と書いてから、英語の文章を貼り付ける順番ですね。
ではなぜAなのか。ここには生成AIの特性が関係しています。
生成AIの仕組み
生成AIの仕組みは「次の単語を予測しているだけ」と聞いたことがある人は多いと思います。文章から次に続く単語を確率的に予測して、それをどんどん生成していく。確率の高い単語が並べられていくので、最終的に自然な文章になる、というわけです。
さらに深掘りすると、このとき単語はトークンというものに分割されます。そして、このトークンが前から後ろへと、どんどん情報を渡していきます。トークンは、自分がどんな言葉を持っているか、文章の中でどの位置にいるか、何に注意を払うべきか、といった様々な情報を持っています。
これは人間で考えると分かりやすいです。たとえば、私がここまで数分いろいろ話してきたとして、こう質問したとします。「これまでの話の中に、数字はいくつ含まれていましたか?」と。
これに答えられる人は、おそらくいません。私も無理です。でも、最初に「今から話す中に数字がいくつ含まれるか数えてください」と伝えてから話し始めれば、答えられる人は一気に増えます。先に注意を向けるべきことを明示するかしないかで、結果に差が出るわけです。
ここで冒頭のクイズに戻ります。答えはAでした。先に「翻訳してください」と注意を向けるべき対象を明示するから、AIは英語の文章をどう処理すればいいかを分かった状態で読めます。
Bの場合、先に英語の文章が貼り付けられていても、それを翻訳するのか、要約するのか、人名を抽出するのか、最初の時点ではAIには分かりません。今のAIはとても優秀なので、後半に「翻訳してください」と書いても通ります。ただ、文章のボリュームが大きくなると、この順番の差が精度に効いてきます。
これが1つ目の特性、プロンプトの順番です。注意を向けてほしいことを先に明示する。これを押さえておきましょう。
コンテキストの重要性
2つ目はコンテキストの重要性です。コンテキストとは、文脈や背景情報のことです。生成AIではこのコンテキストがとても重要だと言われています。
先ほど、生成AIは前の文章をベースに、次に続く単語を確率的に予測すると説明しました。その「前の文章」が充実しているほど、予測の精度も上がります。
簡単なタスクなら、ここはあまり気にしなくても大丈夫です。ただ、ある程度の精度が欲しいタスクでは、コンテキストを充実させることで回答精度を上げられます。
たとえば「メールを作成してください」とだけ指示するよりも、
私の名前は矢野哲平です。こういう仕事をしています。これからメールを送る相手との関係性はこうです。伝えたい内容と意図はこうで、こんなトーンのメールを作成してください。
このように背景情報を盛り込むほど、精度の高い回答を引き出せます。
中間部の喪失(無関心の谷)
3つ目は中間部の喪失です。これは「Lost in the Middle」という論文で紹介されている内容で、AIは最初と最後の内容には関心を示すものの、中間部の情報を無視する傾向がある、というものです。「無関心の谷」と呼ばれたりもします。
これも人間で例えると分かりやすいです。会議に出席して、冒頭と終盤はよく覚えているけれど、途中で何を話したかはあまり覚えていない。先日読んだ小説の、冒頭と結末はよく覚えているけれど、中盤の展開は思い出せない。こういうこと、ありますよね。AIにも同じような傾向があると論文で述べられています。
ただ、これは2つ目で話したコンテキストの話と、ちょっと相反する内容です。コンテキストはたくさん渡すほど精度が上がる。でも渡すコンテキストが長くなるほど、中間部の喪失の問題も出てくる。論文でも、長い入力コンテキストはトレードオフを伴うと指摘されています。より多くのコンテキストはパフォーマンスに役立つ一方で、処理すべき量が増えて精度が低下する可能性もある、というわけです。
この問題は、根本的な解決策がまだ見つかっていないそうです。そこで、特性を踏まえた対策としては次のようなものがあります。
- 重要な情報は中間部に置かない
- プロンプトが長くなる場合は、大事な情報を最後にもう一度リマインドする
特に「絶対に守ってほしいルール」や注意事項は、プロンプトの最初か最後に持ってきたり、末尾で再掲したりすると、回答精度を保ちやすくなります。指示しているのにAIがルールを守ってくれないとき、これを試してみてください。
回答の方向性
4つ目はAIの回答の方向性です。
AIは確率的に次の単語を予測するため、文章全体を通してある程度一貫した内容を生成する傾向があります。これは自然な文章を作るうえでとても重要な仕組みですが、場合によっては融通が効かないと感じることもあります。
たとえばアイデア出しの場面で、途中から「全く違う切り口で出してほしい」と指示しても、前半のアイデアに引きずられて、大きく飛躍したアイデアが出てこない。あるいはAIとプログラミングをしていて、エラー解決を進める中で「最初の前提が間違っていた」と気づいてやり直しを求めても、最初に立てた前提に引っ張られて、なかなか軌道修正できない。特にAIとの会話を長く重ねた後に、こうしたことが起きやすいです。
こうしたケースの対処法は、主に2つあります。
- 「ここからは全く違う内容です。これまでの内容は完全に忘れてください」とAIに明示する
- シンプルに、新しいチャットを作成して仕切り直す
1つ目の「忘れてください」という指示だけでは不十分なことも多いので、思い切って新規チャットで仕切り直すのが手っ取り早いです。最初の会話の内容に引っ張られるケースは本当に多いので、ここも覚えておいてください。
なお、こうした「中間部を無視する」「最初の回答に引きずられる」といった特性は、ローカルLLMを含めて多くの言語モデルに共通する性質です。
まとめ
最後に、今回のポイントをまとめます。生成AIには大きく4つの特性があります。
- プロンプトの順番: AIに注意を向けてほしいことを先に書く。英語を貼り付けてから「翻訳して」と書くより、「翻訳して」と書いてから英語を貼り付ける方が望ましい
- コンテキストの重要性: 生成AIは前の文章から次の単語を予測する。文脈や背景情報を充実させることが回答精度の向上につながる
- 中間部の喪失: AIは最初と最後の情報に関心を示し、中間部は無視されやすい。大事な情報やルールは中間部に置かず、最後にリマインドする
- 回答の方向性: AIは自分が出した回答に引きずられる。軌道修正が難しいときは新規チャットで仕切り直す
仕組みを少し理解しておくだけで、プロンプトの作り方は変わってきます。より実践的なプロンプトのテクニックについてはプロンプトの書き方と回答精度を上げるテクニックや、例を渡して学習させるFew-shotプロンプティングもあわせて読んでみてください。