コンテキスト・マネジメントが重要
――確かにAIを使っていると、変なループが出たりよく嘘をつかれたりしますね。
牛尾 それが「AIがアホになる」問題なんですよ。今のLLMには、アホになるポイントがいくつかあって、例えばチャット欄でコンテキストのサイズが増え過ぎると、混乱してしまう確率が増えます。
「Needle in a Haystack」(干し草の山の中で針を探す)という有名なベンチマークテストがあります。一般的には、メモリがいっぱいになったら溢れて破綻するイメージかと思うのですが、実際テストをすると、メモリをすべて使い切らなくても真ん中ぐらいまで来た段階でAIは誤回答を出し始めるんです。
指示に矛盾がある場合も同様です。たとえばLLMに「このツールを使ってください」と言った時、そのツールに埋め込まれた定義と、指示した内容に矛盾があればAIは迷ってしまいます。あるいは、ツールを100個も200個も定義していたら、想定外のツールが勝手に起動して、混乱してしまうケースもあります。
ここで重要なのが「コンテキスト・マネジメント」の考え方です。コンテキストの量が増えれば増えるほど矛盾も起こりやすく、より破綻しやすくなります。「中間での喪失問題」と言って、コンテキストが長くなると、AIは最初と最後しか見なくて真ん中をすっ飛ばしがち。最近はかなりマシになりましたが、それでもあの手この手で「アホになること」を防ぐ必要があるわけです。
端的にいえば、チャット欄に書く指示も、エージェント定義やインストラクションも、リクエストに対して必要ない情報はたくさん書かない方がいいんです。「指示は端的に」の原則で、「余分な情報は与えずに」シンプルにしておいた方がパフォーマンスが出やすい。
最重要テクニック「Skills」
――プロンプトでは、できるだけ細かく指示したほうがいいのかと思ってました。
牛尾 それはありがちな誤解ですね(笑)。一般にAIの使い方というとプロンプトテクニックばかりがイメージされて、一生懸命プロンプトを集めている人もいますが、むしろコンテキスト・マネジメントとして「AIを混乱させない指示の出し方はなにか」と捉えたほうがわかりやすいと思います。
コンテキスト・マネジメントで最重要テクニックの一つは「Skills」です。本で詳しく書きましたが、Skillsを作成すると、毎回同じプロンプトを入力する手間を省けますし、特定のタスクをやってもらいたい時、作業手順やルールに沿って動いてもらえます。
実はこのSkillsが優れているのは、「プログレッシブ・ディスクロージャー」(段階的開示)という仕組みで、手順やルールが比較的長かったり複雑でも、AIがヘッダー部分だけを読んで「今この作業に必要だな」というものだけを実際に本文をロードする点にあります。必要な時に、必要なだけしか読み込まれないから、AIが混乱しにくい。
