- Code Interpreter とは
- Azure OpenAI での利用
- Azure OpenAI Studio でのはじめ方
- 他の活用例
- 余談: Code Interpreter の実行環境はどうなってるのか
- 参考
Code Interpreter とは
Assistants 機能のひとつとして 2024年2月に追加されました。
- まず Assisntants で既存にある Function calling は、自分で用意した関数のコードを、質問に応じて良しなに実行してくれる機能です。
- それに対し Code interpreter は、ユーザーの質問に応じて Assistant が動的にコードを生成し実行して、回答を生成してくれる機能です。
- Code interpriter の利用イメージとして、数学の問題を python のコードを生成して回答したり、データを与えることでグラフを生成してくれたりしますが、具体的な操作は後述します。
- コードの生成や実行は Azure OpenAI 側で用意されたサンドボックス環境で実行されますので、使えるモジュールや機能に制限があります。
- チャットで利用したコードやファイルは、他の Azure OpenAI の機能と同様に MS でサービス改善のために利用することはないのでご安心を。
Azure OpenAI での利用
2024年2月8日現在だと利用できるリージョンが少ないですので、とりあえず以下のドキュメントで使えるリージョンを確認しておきましょう。
自分でコードを実装してアプリに組み込むことが可能ですが、Azure OpenAI Studio の Playground でサクッと試すことが可能ですので、まずはここから始めるのが良いです。
Azure OpenAI Studio でのはじめ方
Azure OpenAI Studio (https://oai.azure.com) を開き、左側のメニューで Assistants (Preview) を選びます。
Code Interpreter を使うための準備
利用できないリージョンのリソースを使っていると以下の画面になります。
その場合は、使えるリージョンに Aazure OpenAI のリソースを作りましょう。2024年2月8日現在で日本からだと Australia East が近いです。
また、新しくリソースを作成したら model のデプロイも必要です。利用できる model もリージョンによって若干異なるので注意です。
model のバージョンについては料金が安くなった最新のバージョンを使いましょう。バージョンに関して詳しくは以下のブログで言及しています。
リソースを作成したら、Azure OpenAI Studio の右上の自分のアイコン付近をクリック → リソースの "Switch" をクリックして Assistants が利用できるリソースへ変更します。
これで、左側のメニュー "Assisntans" から Code interpreter が利用可能となります。
Code Interpreter を試す
あとは Assistants plyground で Assisntant をセットアップしていきます。下の方にある Code interpreter のトグルを ON にして、他の項目は適宜入力して "Save" をクリックすればセットアップです。
保存をすることで Assistant を永続的に保存できるため、後日 "Open" ボタンから再利用することもできるのもいいですね。
OpenAI では長らくある機能なので機能自体に新鮮味はないですが、軽くいじってみましょう。
数学の問題を試す
こんな問題を出してみました。正しい答えがでてますが、ChatGPT のように python のコードは表示されないのか。
ログを見てみましょう。Assistant playground では右側の Logs で API をコールしたログが記録されており、クリックするとその結果をみれたりするので便利です。
ということで Get run steps
をクリックしてみます。
以下の json が表示されました。Code interpreter を利用していることが確認できます。
{ "object": "list", "data": [ { "id": "step_gGd9LbQTrZLwRgJ8SDJhlKDm", "object": "thread.run.step", "created_at": 1707380860, "run_id": "run_Z3JoCJAcplU0D1NyFxACrg6y", "assistant_id": "asst_HEdZc4jN70am9nWVVKLI03Ng", "thread_id": "thread_aO9R4Y831UNG4NTyZGvwMith", "type": "message_creation", "status": "completed", "cancelled_at": null, "completed_at": 1707380861, "expires_at": null, "failed_at": null, "last_error": null, "step_details": { "type": "message_creation", "message_creation": { "message_id": "msg_QvzJI3BukC4vSAl40HqJsc1m" } } }, { "id": "step_Zq7Aou6UPd0C9dw7UGf52weJ", "object": "thread.run.step", "created_at": 1707380845, "run_id": "run_Z3JoCJAcplU0D1NyFxACrg6y", "assistant_id": "asst_HEdZc4jN70am9nWVVKLI03Ng", "thread_id": "thread_aO9R4Y831UNG4NTyZGvwMith", "type": "tool_calls", "status": "completed", "cancelled_at": null, "completed_at": 1707380860, "expires_at": null, "failed_at": null, "last_error": null, "step_details": { "type": "tool_calls", "tool_calls": [ { "id": "call_6BofWwu80F1aKK9DEv09ZXSP", "type": "code_interpreter", "code_interpreter": { "input": "from sympy import symbols, Eq, solve\r\n\r\n# シンボル定義\r\nx, y = symbols('x y')\r\n\r\n# 方程式の設定\r\neq1 = Eq(x, 0.3*x + 5*y)\r\neq2 = Eq(100*x + 200*y, 1000)\r\n\r\n# 方程式を解く\r\nsolutions = solve((eq1, eq2), (x, y))\r\nsolutions[x] # レンガ1個の重さを求める", "outputs": [ { "type": "logs", "logs": "7.81250000000000" } ] } } ] } }, { "id": "step_e9mJVVS3GZ46549jInuhUCyH", "object": "thread.run.step", "created_at": 1707380838, "run_id": "run_Z3JoCJAcplU0D1NyFxACrg6y", "assistant_id": "asst_HEdZc4jN70am9nWVVKLI03Ng", "thread_id": "thread_aO9R4Y831UNG4NTyZGvwMith", "type": "message_creation", "status": "completed", "cancelled_at": null, "completed_at": 1707380845, "expires_at": null, "failed_at": null, "last_error": null, "step_details": { "type": "message_creation", "message_creation": { "message_id": "msg_Wbj9Ww5YDeV5l7Log50KD55j" } } } ], "first_id": "step_gGd9LbQTrZLwRgJ8SDJhlKDm", "last_id": "step_e9mJVVS3GZ46549jInuhUCyH", "has_more": false }
ちなみにコードを表示してとコメントすると、表示してくれます。
他の活用例
よくありそうな例を書いておきます。
- Assistant set up の Files に分析させたいデータをアップロードして、チャットで指示して分析させたりチャートを作らせたりすることができます。
- 後述で詳しく書きますが実行環境に pptx や xlsx を生成するモジュールも入っていたので、パワポの資料を作ることもできるはずです (が、試したら生成はしてくれたけど何度やってもファイルが破損してて開けなかった... まぁ OpenAI の方では普通にできるので、きっとどうにかなるでしょう...)
余談: Code Interpreter の実行環境はどうなってるのか
2024年2月8時点の pip list は以下です。つまりこの中にないライブラリを使うことはできないはず。それもどうにかしたければ Code Interpreter を諦めて Open Interpreter でも使う感じですかね。
👉ここをクリックして開くと pip list が表示されます👈
Package Version -------------------------- -------------------- absl-py 2.1.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 23.1.0 argon2-cffi-bindings 21.2.0 arviz 0.15.1 asn1crypto 1.5.1 asttokens 2.4.1 async-timeout 4.0.3 attrs 23.2.0 audioread 3.0.1 Babel 2.14.0 backcall 0.2.0 backoff 1.10.0 backports.zoneinfo 0.2.1 basemap 1.3.2 basemap-data 1.3.2 bcrypt 4.1.2 beautifulsoup4 4.8.2 bleach 6.1.0 blinker 1.7.0 blis 0.7.11 bokeh 2.4.0 branca 0.7.1 Brotli 1.1.0 cachetools 5.3.2 cairocffi 1.6.1 CairoSVG 2.5.2 camelot-py 0.10.1 catalogue 2.0.10 certifi 2019.11.28 cffi 1.16.0 chardet 4.0.0 charset-normalizer 2.1.1 click 8.1.7 click-plugins 1.1.1 cligj 0.7.2 cloudpickle 3.0.0 cmudict 1.0.18 comm 0.2.1 compressed-rtf 1.0.6 countryinfo 0.1.2 cryptography 3.4.8 cssselect2 0.7.0 cycler 0.12.1 cymem 2.0.8 Cython 0.29.36 databricks-sql-connector 0.9.1 dbus-python 1.2.16 debugpy 1.8.0 decorator 4.4.2 defusedxml 0.7.1 deprecat 2.1.1 dill 0.3.8 distro-info 0.23+ubuntu1.1 dlib 19.22.1 dnspython 2.5.0 docx2txt 0.8 ebcdic 1.1.1 EbookLib 0.18 einops 0.3.2 email-validator 2.1.0.post1 entrypoints 0.4 et-xmlfile 1.1.0 exceptiongroup 1.2.0 exchange-calendars 3.4 executing 2.0.1 extract-msg 0.28.7 Faker 8.13.2 fastapi 0.95.2 fastjsonschema 2.19.1 fastprogress 1.0.3 ffmpeg-python 0.2.0 ffmpy 0.3.1 filelock 3.13.1 Fiona 1.8.20 flask 3.0.2 Flask-CacheBuster 1.0.0 Flask-Cors 4.0.0 Flask-Login 0.6.3 folium 0.12.1 fonttools 4.48.1 fpdf 1.7.2 frozenlist 1.4.1 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.6.0 hpack 4.0.0 html5lib 1.1 httpcore 1.0.2 httptools 0.6.1 httpx 0.26.0 hypercorn 0.14.3 hyperframe 6.0.1 idna 2.8 imageio 2.33.1 imageio-ffmpeg 0.4.9 IMAPClient 2.1.0 imgkit 1.2.2 importlib-metadata 7.0.1 importlib-resources 6.1.1 iniconfig 2.0.0 ipykernel 6.29.1 ipython 8.12.3 ipython-genutils 0.2.0 isodate 0.6.1 itsdangerous 2.1.2 jax 0.2.28 jedi 0.19.1 Jinja2 3.1.3 joblib 1.3.2 json5 0.9.14 jsonpickle 3.0.2 jsonschema 4.21.1 jsonschema-specifications 2023.12.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.5 korean-lunar-calendar 0.3.1 librosa 0.8.1 llvmlite 0.41.1 loguru 0.5.3 lxml 5.1.0 markdown2 2.4.12 markdownify 0.9.3 MarkupSafe 2.1.5 matplotlib 3.4.3 matplotlib-inline 0.1.6 matplotlib-venn 0.11.6 mistune 3.0.2 mizani 0.9.3 mne 0.23.4 monotonic 1.6 moviepy 1.0.3 mpmath 1.3.0 mtcnn 0.1.1 multidict 6.0.5 munch 4.0.0 murmurhash 1.0.10 mutagen 1.45.1 nashpy 0.0.35 nbclassic 0.4.5 nbclient 0.9.0 nbconvert 7.15.0 nbformat 5.9.2 nest-asyncio 1.6.0 networkx 2.6.3 nltk 3.6.3 notebook 6.5.1 notebook-shim 0.2.3 numba 0.58.1 numexpr 2.8.6 numpy 1.21.2 numpy-financial 1.0.0 odfpy 1.4.1 olefile 0.47 opencv-python 4.5.2.54 openpyxl 3.0.10 opt-einsum 3.3.0 orjson 3.9.13 oscrypto 1.3.0 packaging 23.2 pandas 1.3.2 pandocfilters 1.5.1 paramiko 3.4.0 parso 0.8.3 pathlib-abc 0.1.1 pathy 0.11.0 patsy 0.5.6 pdf2image 1.16.3 pdfkit 0.6.1 pdfminer.six 20191110 pdfplumber 0.5.28 pdfrw 0.4 pexpect 4.9.0 pickleshare 0.7.5 Pillow 8.3.2 pip 20.0.2 pkgutil-resolve-name 1.3.10 platformdirs 4.2.0 plotly 5.3.0 plotnine 0.10.1 pluggy 1.4.0 pooch 1.8.0 preshed 3.0.9 priority 2.0.0 proglog 0.1.10 prometheus-client 0.19.0 prompt-toolkit 3.0.43 pronouncing 0.2.0 psutil 5.9.8 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.20.0 pycryptodomex 3.20.0 pydantic 1.10.2 pydot 1.4.2 pydub 0.25.1 pydyf 0.8.0 pygments 2.17.2 PyGObject 3.36.0 pygraphviz 1.7 PyJWT 2.8.0 pylog 1.1 pyluach 2.2.0 pymc3 3.11.5 PyMuPDF 1.19.6 PyNaCl 1.5.0 pyOpenSSL 21.0.0 pypandoc 1.6.3 pyparsing 3.1.1 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.1 python-multipart 0.0.7 python-pptx 0.6.21 pyttsx3 2.90 pytz 2024.1 PyWavelets 1.4.1 pyxlsb 1.0.8 PyYAML 6.0.1 pyzbar 0.1.8 pyzmq 25.1.2 qrcode 7.3 rarfile 4.0 rasterio 1.2.10 rdflib 6.0.0 referencing 0.33.0 regex 2023.12.25 reportlab 3.6.1 requests 2.31.0 requests-unixsocket 0.2.0 resampy 0.4.2 rpds-py 0.17.1 scikit-image 0.18.3 scikit-learn 1.0 scipy 1.7.1 seaborn 0.11.2 semver 3.0.2 Send2Trash 1.8.2 sentencepiece 0.1.99 setuptools 45.2.0 shap 0.39.0 Shapely 1.7.1 six 1.14.0 slicer 0.0.7 smart-open 6.4.0 sniffio 1.3.0 snowflake-connector-python 2.7.12 snuggs 1.4.7 sortedcontainers 2.4.0 SoundFile 0.10.2 soupsieve 2.5 spacy 3.1.6 spacy-legacy 3.0.12 SpeechRecognition 3.8.1 srsly 2.4.8 stack-data 0.6.3 starlette 0.27.0 statsmodels 0.13.1 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.3 terminado 0.18.0 text-unidecode 1.3 textblob 0.15.3 textract 1.6.4 Theano-PyMC 1.1.2 thinc 8.0.17 threadpoolctl 3.2.0 thrift 0.16.0 tifffile 2023.7.10 tinycss2 1.2.1 toml 0.10.2 tomli 2.0.1 toolz 0.12.1 torch 1.10.0 torchaudio 0.10.0 torchtext 0.6.0 torchvision 0.11.1 tornado 6.4 tqdm 4.64.0 traitlets 5.14.1 trimesh 3.9.29 typer 0.4.2 typing-extensions 4.5.0 tzlocal 5.2 ujson 5.9.0 unattended-upgrades 0.1 urllib3 1.25.8 uvicorn 0.27.0.post1 uvloop 0.19.0 Wand 0.6.13 wasabi 0.10.1 watchfiles 0.21.0 wcwidth 0.2.13 weasyprint 53.3 webencodings 0.5.1 websocket-client 1.7.0 websockets 10.3 werkzeug 3.0.1 wheel 0.34.2 wordcloud 1.8.1 wrapt 1.16.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.9 xml-python 0.4.3 yarl 1.9.4 zipp 3.17.0 zopfli 0.2.3