ChatGPTの新機能「Code Interpreter」

# Code interpreterとは

> An experimental ChatGPT model that can use Python, handle uploads and downloads
> 
> https://openai.com/blog/chatgpt-plugins#code-interpreter

Code interpreter は OpenAI ChatGPT の最新機能であり、Python コードをライブな作業環境で実行することができます。基本的にはサンドボックス化された Python 環境であり、Python コードを実行して任意のタスクを実行できる場所です。コーダー向けに作られた機能のように聞こえるかもしれませんが、一般ユーザーにも多くのタスクに役立ちます。

# サンドボックス環境

Python の実行には OpenAI のサンドボックス環境が使用されています。

## Python バージョン
2023年7月現在で Python のバージョンは `3.8.10` です。
## ライブラリ
`pip freeze`コマンドを使用すると、ライブラリのバージョン情報を出力できます。
```
  absl-py==1.4.0
  affine==2.4.0
  aiohttp==3.8.1
  aiosignal==1.3.1
  analytics-python==1.4.post1
  anyio==3.7.1
  anytree==2.8.0
  argcomplete==1.10.3
  argon2-cffi==21.3.0
  argon2-cffi-bindings==21.2.0
  arviz==0.15.1
  asttokens==2.2.1
  async-timeout==4.0.2
  attrs==23.1.0
  audioread==3.0.0
  Babel==2.12.1
  backcall==0.2.0
  backoff==1.10.0
  backports.zoneinfo==0.2.1
  basemap==1.3.2
  basemap-data==1.3.2
  bcrypt==4.0.1
  beautifulsoup4==4.12.2
  bleach==6.0.0
  blinker==1.6.2
  blis==0.7.9
  bokeh==2.4.0
  branca==0.6.0
  Brotli==1.0.9
  cachetools==5.3.1
  cairocffi==1.6.0
  CairoSVG==2.5.2
  camelot-py==0.10.1
  catalogue==2.0.8
  certifi==2019.11.28
  cffi==1.15.1
  chardet==4.0.0
  charset-normalizer==2.1.1
  click==8.1.4
  click-plugins==1.1.1
  cligj==0.7.2
  cloudpickle==2.2.1
  cmudict==1.0.13
  comm==0.1.3
  compressed-rtf==1.0.6
  countryinfo==0.1.2
  cryptography==3.4.8
  cssselect2==0.7.0
  cycler==0.11.0
  cymem==2.0.7
  dbus-python==1.2.16
  debugpy==1.6.7
  decorator==4.4.2
  defusedxml==0.7.1
  deprecat==2.1.1
  dill==0.3.6
  distro-info===0.23ubuntu1
  dlib==19.22.1
  dnspython==2.3.0
  docx2txt==0.8
  ebcdic==1.1.1
  EbookLib==0.18
  einops==0.3.2
  email-validator==2.0.0.post2
  entrypoints==0.4
  et-xmlfile==1.1.0
  exceptiongroup==1.1.2
  exchange-calendars==3.4
  executing==1.2.0
  extract-msg==0.28.7
  Faker==8.13.2
  fastapi==0.92.0
  fastjsonschema==2.17.1
  fastprogress==1.0.3
  ffmpeg-python==0.2.0
  ffmpy==0.3.0
  filelock==3.12.2
  Fiona==1.8.20
  Flask==2.3.2
  Flask-CacheBuster==1.0.0
  Flask-Cors==4.0.0
  Flask-Login==0.6.2
  folium==0.12.1
  fonttools==4.40.0
  fpdf==1.7.2
  frozenlist==1.3.3
  future==0.18.3
  fuzzywuzzy==0.18.0
  gensim==4.1.0
  geographiclib==1.52
  geopandas==0.10.2
  geopy==2.2.0
  gradio==2.2.15
  graphviz==0.17
  gTTS==2.2.3
  h11==0.14.0
  h2==4.1.0
  h5netcdf==1.1.0
  h5py==3.4.0
  hpack==4.0.0
  html5lib==1.1
  httpcore==0.17.3
  httptools==0.6.0
  httpx==0.24.1
  hypercorn==0.14.3
  hyperframe==6.0.1
  idna==2.8
  imageio==2.31.1
  imageio-ffmpeg==0.4.8
  IMAPClient==2.1.0
  imgkit==1.2.2
  importlib-metadata==6.7.0
  importlib-resources==5.12.0
  iniconfig==2.0.0
  ipykernel==6.24.0
  ipython==8.12.2
  ipython-genutils==0.2.0
  isodate==0.6.1
  itsdangerous==2.1.2
  jax==0.2.28
  jedi==0.18.2
  Jinja2==3.1.2
  joblib==1.3.1
  json5==0.9.14
  jsonpickle==3.0.1
  jsonschema==4.18.0
  jsonschema-specifications==2023.6.1
  jupyter-client==7.4.9
  jupyter-core==5.1.3
  jupyter-server==1.23.5
  jupyterlab==3.4.8
  jupyterlab-pygments==0.2.2
  jupyterlab-server==2.19.0
  keras==2.6.0
  kerykeion==2.1.16
  kiwisolver==1.4.4
  korean-lunar-calendar==0.3.1
  librosa==0.8.1
  llvmlite==0.40.1
  loguru==0.5.3
  lxml==4.9.3
  markdown2==2.4.9
  markdownify==0.9.3
  MarkupSafe==2.1.3
  matplotlib==3.4.3
  matplotlib-inline==0.1.6
  matplotlib-venn==0.11.6
  mistune==3.0.1
  mizani==0.9.2
  mne==0.23.4
  monotonic==1.6
  moviepy==1.0.3
  mpmath==1.3.0
  mtcnn==0.1.1
  multidict==6.0.4
  munch==4.0.0
  murmurhash==1.0.9
  mutagen==1.45.1
  nashpy==0.0.35
  nbclassic==1.0.0
  nbclient==0.8.0
  nbconvert==7.6.0
  nbformat==5.9.0
  nest-asyncio==1.5.6
  networkx==2.6.3
  nltk==3.6.3
  notebook==6.5.1
  notebook-shim==0.2.3
  numba==0.57.1
  numexpr==2.8.4
  numpy==1.21.2
  numpy-financial==1.0.0
  odfpy==1.4.1
  olefile==0.46
  opencv-python==4.5.2.54
  openpyxl==3.0.10
  opt-einsum==3.3.0
  orjson==3.9.1
  packaging==23.1
  pandas==1.3.2
  pandocfilters==1.5.0
  paramiko==3.2.0
  parso==0.8.3
  pathy==0.10.2
  patsy==0.5.3
  pdf2image==1.16.3
  pdfkit==0.6.1
  pdfminer.six==20200517
  pdfplumber==0.5.28
  pdfrw==0.4
  pexpect==4.8.0
  pickleshare==0.7.5
  Pillow==8.3.2
  pkgutil-resolve-name==1.3.10
  platformdirs==3.8.0
  plotly==5.3.0
  plotnine==0.10.1
  pluggy==1.2.0
  pooch==1.7.0
  preshed==3.0.8
  priority==2.0.0
  proglog==0.1.10
  prometheus-client==0.17.0
  prompt-toolkit==3.0.39
  pronouncing==0.2.0
  psutil==5.9.5
  ptyprocess==0.7.0
  pure-eval==0.2.2
  py==1.11.0
  PyAudio==0.2.11
  pycountry==20.7.3
  pycparser==2.21
  pycryptodome==3.18.0
  pydantic==1.8.2
  pydot==1.4.2
  pydub==0.25.1
  pydyf==0.7.0
  Pygments==2.15.1
  PyGObject==3.36.0
  pygraphviz==1.7
  pylog==1.1
  pyluach==2.2.0
  pymc3==3.11.5
  PyMuPDF==1.19.6
  PyNaCl==1.5.0
  pypandoc==1.6.3
  pyparsing==3.1.0
  PyPDF2==1.28.6
  pyphen==0.14.0
  pyproj==3.5.0
  pyprover==0.5.6
  pyshp==2.1.3
  pyswisseph==2.10.3.2
  pytesseract==0.3.8
  pytest==6.2.5
  pyth3==0.7
  python-apt==2.0.1+ubuntu0.20.4.1
  python-dateutil==2.8.2
  python-docx==0.8.11
  python-dotenv==1.0.0
  python-multipart==0.0.6
  python-pptx==0.6.21
  pyttsx3==2.90
  pytz==2023.3
  PyWavelets==1.4.1
  pyxlsb==1.0.8
  PyYAML==6.0
  pyzbar==0.1.8
  pyzmq==25.1.0
  qrcode==7.3
  rarfile==4.0
  rasterio==1.2.10
  rdflib==6.0.0
  referencing==0.29.1
  regex==2023.6.3
  reportlab==3.6.1
  requests==2.31.0
  requests-unixsocket==0.2.0
  resampy==0.4.2
  rpds-py==0.8.8
  scikit-image==0.18.3
  scikit-learn==1.0
  scipy==1.7.3
  seaborn==0.11.2
  semver==3.0.1
  Send2Trash==1.8.2
  sentencepiece==0.1.99
  shap==0.39.0
  Shapely==1.7.1
  six==1.14.0
  slicer==0.0.7
  smart-open==6.3.0
  sniffio==1.3.0
  snuggs==1.4.7
  sortedcontainers==2.4.0
  SoundFile==0.10.2
  soupsieve==2.4.1
  spacy==3.1.7
  spacy-legacy==3.0.12
  SpeechRecognition==3.8.1
  srsly==2.4.6
  stack-data==0.6.2
  starlette==0.25.0
  statsmodels==0.12.2
  svglib==1.1.0
  svgwrite==1.4.1
  sympy==1.8
  tables==3.6.1
  tabula==1.0.5
  tabulate==0.8.9
  tenacity==8.2.2
  terminado==0.17.1
  text-unidecode==1.3
  textblob==0.15.3
  textract==1.6.4
  Theano-PyMC==1.1.2
  thinc==8.0.17
  threadpoolctl==3.1.0
  tifffile==2023.7.4
  tinycss2==1.2.1
  toml==0.10.2
  tomli==2.0.1
  toolz==0.12.0
  torch==1.10.0
  torchaudio==0.10.0
  torchtext==0.6.0
  torchvision==0.11.1
  tornado==6.3.2
  tqdm==4.64.0
  traitlets==5.9.0
  trimesh==3.9.29
  typer==0.4.2
  typing-extensions==4.5.0
  tzlocal==5.0.1
  ujson==5.8.0
  unattended-upgrades==0.1
  urllib3==1.25.8
  uvicorn==0.22.0
  uvloop==0.17.0
  Wand==0.6.11
  wasabi==0.
  
  10.1
  watchfiles==0.19.0
  wcwidth==0.2.6
  weasyprint==53.3
  webencodings==0.5.1
  websocket-client==1.6.1
  websockets==10.3
  Werkzeug==2.3.6
  wordcloud==1.8.1
  wrapt==1.15.0
  wsproto==1.2.0
  xarray==2023.1.0
  xarray-einstats==0.5.1
  xgboost==1.4.2
  xlrd==1.2.0
  XlsxWriter==3.1.2
  xml-python==0.4.3
  yarl==1.9.2
  zipp==3.15.0
  zopfli==0.2.2
  ```
## サポートされているファイルの種類
- テキストファイル（.txt）
- Python スクリプト（.py）
- Jupyter ノートブック（.ipynb）
- CSV ファイル（.csv）
- Excel ファイル（.xls, .xlsx）
- 画像ファイル（.jpeg, .jpg, .png, .gif, .bmp など）
- PDF ファイル（.pdf）
- ZIP ファイル（.zip）
- 動画ファイル（.mp4, .avi, .movなど）
- GIFファイル（.gif）
  
# Code Interpreter でできること
Code Interpreter には多くの機能があります、見てみましょう。
## 1. データ分析と可視化
データセットを Excel ファイルまたは CSV ファイルとしてアップロードすると、そのデータの内容を読み取り、可視化することができます。
### 例：アップロードされたファイルの可視化と分析
まずCSVファイルをアップロードします。
![スクリーンショット 2023-07-24 093250.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477149/f13eab3c-5e5a-c535-7012-1779c0ced577.png)
データセットの列を一覧表示する。
![スクリーンショット 2023-07-24 093326.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477149/243f199d-cf96-daf8-cb44-ab3d1796f105.png)
データセット内の行数を表示する。
![スクリーンショット 2023-07-24 093427.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477149/eba2a1ed-798b-cb19-9e10-f95d589d6204.png)
データセットの基本的な視覚化を実行する。
![スクリーンショット 2023-07-24 093529.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477149/ae58167e-3864-796f-16c6-6184f6239e63.png)
データセットの分析を実行し、関連するプロットを表示する。
![スクリーンショット 2023-07-24 093710.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477149/d9e448ce-401b-4aab-bb96-c07390c6eb9c.png)
![スクリーンショット 2023-07-24 093735.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477149/f1a34c3d-755e-cf79-ef88-b289d6b34828.png)
![スクリーンショット 2023-07-24 104136.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477149/351ae9d3-de73-0d06-e3fd-b68fef9c7588.png)



  
## 2. 数学と計算
  
  以前から ChatGPT は計算が苦手と言われていましたが、現在では Python による数学の問題も解決できます。
### 例：数学の質問を解く
数学の質問を解くように頼みます。
![スクリーンショット 2023-07-24 102606.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477149/84c4f91d-9301-f2bc-ff75-f3242c7170cb.png)
![スクリーンショット 2023-07-24 102643.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477149/ebd686ba-c885-ada9-fe16-c7f2bbdd2e4a.png)

### 例：数式のプロット
関数 $1/sin(x)$をプロットする。
![スクリーンショット 2023-07-24 084617.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477149/a9e17ac7-63fe-1fee-9682-f806a85e4c6c.png)
0 から 1 までの x 値の範囲にズームインする。
![スクリーンショット 2023-07-24 084705.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477149/f293fd01-825f-99b0-e0ec-9ec873b2bd24.png)
$x=0.3$でグラフに接線をプロットする。
![スクリーンショット 2023-07-24 084808.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477149/4029ce3e-c874-570a-5462-1a193d7a9da5.png)
  
## 3. ファイル変換
  
  ファイルを読み込み、別のファイル形式に変換することができます。

  
## 4. 長期記憶
  
  コンテキストの保持は課題でしたが、Code Interpreter を利用して、すべての対話を保存できる SQLite データベースを作成し、応答を生成するときに関連情報を参照できるようになりました。


# アクセス
Code Interpreter は、ChatGPT の無料版では利用できません。それを使用するには、ChatGPT Plus に課金し（月額$20）、GPT-4 モデルに切り替える必要があります。
# セットアップ

1. まず、左下隅から **「設定」** を開いてください。
  
2. **「ベータ機能」** に移動し、**「Code Interpreter」** のトグルを有効にしてください。
  
3. Code Interpreter を有効にしたら、**「GPT-4モデル」** を選択してください。
  
4. 次に、ドロップダウンメニューから **「Code Interpreter」** を選択してください。
  
5. その後、テキストボックスには**アップロードボタン**（**「+」** アイコン）が表示されます。これにより、ファイルをアップロードして ChatGPT の Code Interpreter を使用し、任意のタスクを実行できます。
  
# ファイルをダウンロード
会話中に code interpreter が有効にした場合は、プロンプトでダウンロードをリクエストしてください。チャットにファイルへのリンクが表示されます。そのリンクをクリックすると、ファイルをダウンロードできます。
# 使用制限
現段階での code interpreter には以下の制限があります。

## 1. 言語サポート
現時点で code interpreter は Python コードのみをサポートしています。
  
## 2. Python パッケージ
サンドボックス環境には、numpy、pandas、matplotlib、そして OpenCV などを含む330以上のパッケージが事前にインストールされていますが、外部の Python パッケージのインストールは許可されていません。
  
## 3. ファイルサイズ
アップロードできる最大ファイルサイズは 512MB です。これを回避するために、データを ZIP ファイルに圧縮してサイズを小さくすることができます。ただし、圧縮されていないデータは利用可能なメモリ内に収める必要があります。
  
## 4. 環境の永続性
Python の実行環境は一定時間経過したりセッションが切れると破棄されてしまう。もし環境が終了すると、すべての状態は失われてしまいます。生成されたファイルもダウンロードリンクが機能しなくなるため、アクセスできなくなります。