ChatGPTのCode interpreterの仕組みを、自分の理解で整理します。
※ 追記:「Code interpreter」は、現在「Advanced Data Analysis」に改名されました。 中身の機能に変更はありません。
はじめに
先日、ChatGPTのCode interpreterがbetaリリースされました。
非常に有用な機能で、世間的にもお祭り状態ですね。
私も色々試して遊んでいます。
一方で、「どう活用できるのか」ではなく、「どういう仕組みなのか」という観点は、Code interpreterを実際に触ってみるまで私も良く分かっていませんでした。
今回は、Code interpreterの仕組みに焦点を当てて、自分の理解を整理します。
ChatGPTのCode interpreter、裏側の仕組みを整理しました.
— BioErrorLog (@bioerrorlog) July 9, 2023
Code interpreterの仕組みを理解する | ChatGPT - BioErrorLog Tech Blog https://t.co/7xFRezLnbt pic.twitter.com/cDqA849CGw
Code interpreterの仕組みを理解する
Code interpreterの仕組み
Code interpreterは、Pythonを実行できるサンドボックス環境がChatGPTに割り当てられる機能です。
三人の登場人物を意識すると、この仕組みを理解しやすいでしょう。
- ChatGPT:
ユーザーからの入力に対して実行計画を立て、Pythonコードを生成する。 - Python実行環境:
ChatGPTが生成したPythonコードを実行できる。 - ディスクスペース:
実行されるPythonコードは、この領域にアクセスできる。
ユーザーはここにファイルをアップロード/ダウンロードできる。
このディスクスペースは一時的なもので、一定時間経過するとリセットされる(ephemeral/一時的な領域である)。
つまり、ユーザーの指示に応えるためのPythonコードが生成&実行される、その実行対象データたるファイルもアップロードできる、という訳ですね。
ChatGPTに出す指示はPythonが対応できる範囲(Pythonからコマンドも実行できるので範囲は非常に広いです)であればなんでも対応してくれますし、アップロードするファイルもPythonで扱えるファイルであればなんでも対応できます。
これまではChatGPTにコードを生成させることはできても、それをコピペして実行するのはあくまでユーザーの責務でした。 それが、ChatGPT側でコード実行までできるようになったのは嬉しいアップデートですね。
ケーススタディ:Code interpreter実行時の流れ
では例として、「ある動画ファイルをTwitterアップロード用に変換する」というケースを取り上げ、どのような処理がどこで起きているのかを追いかけてみます。
1. ユーザーからのファイルアップロードと指示
まず、動画ファイルをアップロードして指示を出します。
この段階では、ファイルが一時ディスクスペースにアップロードされ、ChatGPTに指示が飛んでいる状態です。
2. ChatGPTによる計画の立案
この指示対して、ChatGPTは「こういう処理を実行しようと思います。よろしいですか?」と計画を立案してきます。
今回は、下記のようにして実行計画を立ててきました。
- Twitterアップロード用の最適なフォーマットの整理
- アップロードされた動画ファイルのフォーマットを確認 (Python実行)
- Twitterアップロード用の最適なフォーマットと、現状の動画ファイルのフォーマットの差分から、どんな変換を行えば良いかを立案
3. 処理の実行と実行結果のダウンロード
提案された計画に対してユーザーがGOサインを出すと、ChatGPTはPythonコードを生成して実行します。
Python実行結果がエラーになったときは、そのエラーを解析して勝手に試行錯誤してくれます。 面白いですね。
処理結果のファイルは、ダウンロードリンクが提示されてユーザーがダウンロードできます。
以上、ユーザーからの指示を実現する処理(Python)を、ChatGPTがCode interpreterサンドボックス環境上で実行していく、という流れを追いました。
Code interpreterサンドボックス環境の詳細
最後に、Code interpreterで割り当てられるサンドボックス環境の詳細を調べます。
(全て執筆時2023/07時点の調査結果です)
カレントディレクトリ
カレントディレクトリは、作業開始時点で /home/sandbox
です。
Disk容量
- 全容量:約 133 GB
- 使用中:約 75 GB
- 利用可能:約 57 GB
思った以上のdisk容量が割り当てられていました。
Pythonバージョン
Pythonのバージョンは 3.8.10
です。
少し古くも感じますが、GPTが2021年までの情報で学習されていることを考えると妥当ですね。
OS情報
Linuxで、アーキテクチャはx86_64でした。
ちなみにplatform.linux_distribution()
がPython3.8から使えなくなっていることもあり、何のディストリビューションなのかまで辿り着けませんでした。
(わかったら是非教えてください)
おわりに
以上、Code interpreterの仕組みを整理しました。
止まる気配のないLLM界隈のアップデートを見ていると、まさに時代の変わり目といった機運で面白いですね。
どなたかの参考になれば幸いです。
[関連記事]