ChatGPTなどの生成AIチャットサービスには、ファイルを添付することができます。
同じファイル添付でも、生成AIがファイルを扱う内部の処理には複数のパターンがあります。
-
検索(RAG)
- OpenAI Assistants APIでは 「File Search」 と呼ばれる
- 添付ファイルを検索して、回答を生成
- テキストやPDFなどの非構造化データの一部分を抽出して、定性的な処理をするのが得意
-
データ分析
- OpenAI Assistants APIでは 「Code Interpreter」 、Claude.aiでは「分析ツール(analysis tool)」と呼ばれる
- 添付ファイルをプログラムで処理して、回答を生成
- CSVやExcelなどの構造化データの全体に対して、定量的に処理するのが得意
-
直接入力
- 添付ファイルをプロンプトとして直接モデルに入力
- モデルによっては画像などの入力も扱える
- (というか、おもにマルチモーダルモデルへの画像の入力で使われる方法だと思います)
AIチャットサービスによっては、これらを暗黙的に自動で使い分ける物もあれば、特定の操作をして切り替える必要があるものもあります。
「直接入力」は単純なので置いておいて、「検索」と「データ分析」については、どっちがどっちなのか、どう使い分ければ良いのか、分かりにくいと思います。
OpenAI Assistantsでは、「File search(検索)」と「Code interpreter(データ分析)」の両方にファイル添付できます。どっちを使うと良いんでしょうか。
実際に違いが出るタスクをやって体験してみましょう。
実験
以下のような、架空のイタリアンレストランのメニューデータを用意しました。これについて、生成AIチャットに簡単な質問をします。
メニュー名 | 価格 |
---|---|
渡り蟹のトマトクリームパスタ | 1,480円 |
4種きのこのポルチーニクリームパスタ | 1,380円 |
ベーコンと彩り野菜のペペロンチーノ | 1,280円 |
牛肉とゴルゴンゾーラのピザ | 1,680円 |
シーフードミックスピザ | 1,580円 |
彩り野菜とモッツァレラチーズのピザ | 1,480円 |
海老とブロッコリーのドリア | 1,380円 |
4種チーズのドリア | 1,280円 |
スパイシーミートドリア | 1,480円 |
冬野菜のミネストローネ | 580円 |
鶏肉のハーブグリル | 780円 |
フォンダンショコラ | 580円 |
焼きりんご | 480円 |
(この架空のメニューはGemini Advancedで生成しました)
このファイルをOpenAI Assistantsに添付して、簡単な以下ふたつの質問をしてみます。
- 質問1「パスタの値段は?」
- 正解は「渡り蟹のトマトクリームパスタ1,480円」「4種きのこのボルチーニクリームパスタ1,380円」「ベーコンと彩り野菜のペペロンチーノ1,280円」です
- 質問2「いちばん高いメニューは?」
- 正解は「牛肉とゴルゴンゾーラのピザ1,680円」です
どの手法でどれがうまく答えられるか、調べてみましょう。
実験条件
- モデルはgpt-4o-2024-08-06
- Temperature、Top-pなどは既定値
- システムインストラクション無し
- File SearchまたはCode Interpreterのいずれか片方を有効にして実験
実験1: スプレッドシートの処理
メニューをスプレッドシートにまとめます。
検索(File search)
File searchのところにファイル添付します。
テキストだとアップロード時にうまく行かなかったのでPDFファイルにして添付しました。
また、今回は対象とするファイルが小さい都合上、Chunk sizeとMax num resultsを小さい値にして、小さいファイルでもちゃんとFile searchの特徴が出るようにします。
「パスタの値段は?」
成功しました。
「いちばん高いメニューは?」
間違えてしまいました。
データ分析(Code Interpreter)
Code interpreterの所にファイル添付します。
「パスタの値段は?」
なんか色々とプログラムが出力されて何かをしてくれましたが、ペペロンチーノが含まれていないため、不正解です。
実装されたプログラムを見てみると「パスタ」の文字列一致で調べているため、これでは「ペペロンチーノ」を検出できないことが分かります。
「いちばん高いメニューは?」
正解しました。
実験2: ドキュメントの処理
入力データをスプレッドシートではなく、文章にしてみました。こちらもGemini Advancedを用いてメニューデータを変換しました。
こちらをPDFにして添付してみます。
検索(File Search)
「パスタの値段は?」
正解しました。
「いちばん高いメニューは?」
失敗しました。
データ分析(Code Interpreter)
こちらのデータはCode Interpreterでは処理できませんでした。
実験結果まとめ
File Search | Code Interpreter | ||
---|---|---|---|
スプレッドシート | 「パスタの値段は?」 | 成功 | x |
スプレッドシート | 「いちばん高いメニューは?」 | x | 成功 |
ドキュメント | 「パスタの値段は?」 | 成功 | x |
ドキュメント | 「いちばん高いメニューは?」 | x | x |
きれいに分かれました。
- 検索機能を使うと、「パスタの値段は?」のように定性的な質問に回答でき、ドキュメントのような非構造化データも扱える
- データ分析機能を使うと、構造化されたデータに対して「いちばん高いメニューは?」のような定量的な質問に回答できる
これらの違いを理解して使い分けられると、より生成AIへのファイル添付を使いこなせるようになると思います。