BEACHSIDE BLOG

Azure と GitHub と C# が好きなエンジニアの個人メモ ( ・ㅂ・)و ̑̑

Azure OpenAI の Code Interpreter を気軽に試す (2024年2月編)

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 のバージョンについては料金が安くなった最新のバージョンを使いましょう。バージョンに関して詳しくは以下のブログで言及しています。

blog.beachside.dev

リソースを作成したら、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               

参考