生成AI (LLM) は決して万能ではありません。道具として使いこなすためには、得意・不得意を理解する必要があります。
ここでは、生成AIの理解を深めるための3つの「苦手」を紹介します。
数値計算が苦手
プロンプト例:「1.9と1.11のどちらが大きいですか?」
回答:「1.11」
正解:「1.9」
プロンプト例:「198734918749178 足す 429875987 は?」
回答:「199164794737165」
正解:「198735348625165」
従来のITシステムにとって計算は非常に得意ですが、生成AIは苦手です。
Thinking機能で計算方法を生成させて正解に辿り着かせたり、外部ツールを使わせるなどして正解を得ることができますが、LLM自体は数値計算機能を備えていません。
数値計算には、従来のツールを使う方が確実です。
生成AIが見る世界はトークン
プロンプト例:「blueberryに含まれるbの数は?」
回答:「3」
正解:「2」
生成AIが扱う入力は、必ずトークン単位にエンコードされます。たとえば blueberry
は、LLMからは [18789, 19772]
のようなトークン列として認識されます。
そのため「単語にどのアルファベットが含まれるか」といった情報は、LLMにとって直接的に得る方法はありません。これは厳密な文字列操作があまり得意ではないことにつながっています。
JSON形式の扱いなどは比較的得意になってきていますが、100%従わせるには制約付きデコーディングなど特別な仕組みが必要になります。
コーディング規約への準拠も、LLM単体で100%従わせることはできません。
厳密な文字列処理には従来のツールを使ってチェックし補いましょう。
嘘をもっともらしく説明する
プロンプト例:「Python 3.12に追加された dict.compact()
メソッドの使い方を説明して。」
注意:Python 3.12にdict.compact()
メソッドは存在しません。
これはよく知られた問題ですが、LLMは学習していない情報を知りません。多くのLLMには学習データのカットオフ日があり、その時点までの情報を元に学習されています。
LLMは、知らないことを「知らない」と答えるのが確実ではなく、一見ありそうな情報ほど本当に実在するかのように説明してしまいます。
この問題を回避するため、Web検索で得た情報など確実性の高い情報に基づいて回答する手法が一般的です。検索機能が一般的でなかった頃は、存在しない出典URLを生成することもよく見られました。現在でもツールの利用を制限すると、誤情報の回答が起こります。
コーディングタスクをLLMに実行させるケースでは、未知の情報を多く扱います。最新のライブラリの仕様や、社内ライブラリの仕様、書きかけのコードの詳細などもモデルにとっては未知の情報です。
必要な情報を、検索やファイル参照などのツールで取得してLLMに与えない限り、有益な結果は得られません。
まとめ
生成AIは、与えられた入力に続く最も確率の高い文字列を出力するシステムです。原理上、どうしても苦手な処理が存在し、ハルシネーションのような問題は無くすことができないとも言われています。
ここでは、生成AIの理解を深めるための3つの課題を紹介しました。
LLMを活用する上でのヒントとなれば幸いです。