OpenInterpreterをキレイな環境で動かす方法（Dockerコンテナ内で動作・AzureOpenAIService）

## はじめに
OpenInterpreter、便利ですね。
ただ直接ローカル環境にインストールすると、他のライブラリや環境との競合が生じる可能性があります。
賢いツールだからこそ、いい感じにパッケージをアップデートしてくれるのかもしれませんが、時にそれは取り返しのつかないことになってしまうかもしれません。

そんな環境が"汚れる"リスクを避けるために、「Dockerコンテナ内で動作させる」という方法があります。
今回はその手順についてご紹介します。

## 前提条件
・DockerDesktopがインストールされている状態
以下記事をご参照ください

https://qiita.com/san_bay3/items/2bd65508f8dd8ca70669

・Azureのサブスクリプションを持っている&AzureのOpenAIの利用申請を行い、GPT3.5 または GPT-4.0が使えるようになっている状態
今回は企業利用想定のため、AzureOpenAIServiceを使います。
まだ申請していない場合、以下記事をご参照ください

https://qiita.com/AGV_morinaga/items/04c1b3f505efca8b1511#2azure-openai-service%E3%81%AE%E5%A7%8B%E3%82%81%E6%96%B9

以下、WindowsPCのコマンドプロンプトを使った手順になります。

## 手順
1.Dockerfileを作成
2.DockerImageを作成
3.Dockerコンテナを起動
4.コンテナ内でinterpreterを起動
5.Let’s openinterpreter

### 1.Dockerfileを作成
以下のようなDockerfileを作成してください。環境変数はご自身の環境にあわせて変えましょう。
``` Dockerfile
FROM ubuntu:latest

# 必要なツールのインストール
RUN apt-get update && apt-get install -y \
    curl \
    software-properties-common

# 最新のPythonをインストール
RUN add-apt-repository ppa:deadsnakes/ppa && \
    apt-get update && \
    apt-get install -y python3.10 python3.10-distutils python3.10-venv && \
    update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1 && \
    apt-get install -y python3-pip

# OpenInterpreterのセットアップ
RUN pip3 install open-interpreter

# 環境変数の設定
ENV AZURE_API_KEY=******************** \
    AZURE_API_BASE=https://*********-***********.openai.azure.com \
    AZURE_API_VERSION=2023-07-01-preview
    
# PythonのREPLを起動するように設定
CMD ["python3"]
```

*OpeninterpreterはPythonのバージョンが3.10以上でないと動作しないようです。Pythonバージョンに気をつけましょう
*`AZURE_API_KEY`と`AZURE_API_BASE`は以下Azureポータル画面より確認できます。`AZURE_API_VERSION`は現時点だと`2023-07-01-preview`以降であれば動くようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414468/6091bc91-fafd-6b64-c967-cd8768cfaad0.png)

### 2.DockerImageを作成
Dockerfileがあるフォルダに移動しましょう
例えば以下のフォルダにある場合、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414468/5b9386bd-d378-7309-2a06-1a28dfbe89cd.png)
このコマンドで移動できます
```
cd C:\Users\administrator\Documents\openinterpreter
```

移動できたら、以下コマンドでDockerImageを作成しましょう。
「openinterpreter」はImage名なので好きな名前に変えていただいてもOKです。
```
docker build -t openinterpreter .
```

イメージが作成できたか以下のコマンドで確認しておきましょう。
```
docker images
```
以下のようなものが表示されていればOKです。
```
REPOSITORY            TAG       IMAGE ID       CREATED       SIZE
openinterpreter       latest    bec5dc270a32   3 hours ago    857MB
```

### 3.Dockerコンテナを起動
Imageが作成完了したら、さっそくコンテナを起動させましょう。以下コマンドです。
```
docker run -it --rm openinterpreter /bin/bash
```
それぞれの引数については以下の通りです。
`-it`：コンテナ内でのインタラクティブなシェルセッションをサポートする
`--rm`：コンテナが終了したときに自動的にそれを削除する
`/bin/bash`：コンテナが起動した後に実行するコマンド。Bashシェルを起動することでユーザーがコンテナ内でコマンドを実行することができる

実行後、`root@da1dd551c219:/#`みたいな表示がされたら無事コンテナの中でBashシェルが起動されました。

### 4.コンテナ内でinterpreterを起動
さっそくinterpreterを起動してみましょう。以下コマンドです。
```
interpreter -m azure/gpt-4-model
```

`-m`はモデル名を指定する引数です。
AzureOpenAIServiceを使用するときは`azure/<デプロイ名>`を指定する必要があるようです。
デプロイ名は以下から確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414468/4eac074f-2510-3e16-d802-954d4856b074.png)

これで準備は整いました！

### 5.Let’s openinterpreter

さっそく「Googleの株価情報を過去1年分取得して、グラフにしてください。」と入力してみました。
以下のように作業を進めてくれます。


```bash
Press CTRL-C to exit.
> Googleの株価情報を過去1年分取得して、グラフにしてください。

  了解しました。Googleの過去1年間の株価を折れ線グラフで表示します。そのために以下のステップを行います：

   1 必要なパッケージをインストールします。特に pandas, pandas_datareader, matplotlib が必要です。
   2 pandas_datareaderを使用して、過去1年間のGoogleの株価データを取得します。
   3 matplotlibを使用して、取得したデータをグラフに表示します。

  それでは、はじめに必要なパッケージのインストールから始めましょう。



  pip install pandas pandas_datareader matplotlib


  Would you like to run this code? (y/n)

  y


  pip install pandas pandas_datareader matplotlib


  Collecting pandas
    Downloading pandas-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (12.3 MB)
       ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.3/12.3 MB 11.4 MB/s eta 0:00:00
  Collecting pandas_datareader
    Downloading pandas_datareader-0.10.0-py3-none-any.whl (109 kB)
       ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 109.5/109.5 KB 26.4 MB/s eta 0:00:00
  Collecting matplotlib
    Downloading matplotlib-3.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.6 MB)
       ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.6/11.6 MB 11.1 MB/s eta 0:00:00
  Collecting tzdata>=2022.1
    Downloading tzdata-2023.3-py2.py3-none-any.whl (341 kB)
       ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 341.8/341.8 KB 11.4 MB/s eta 0:00:00
  Collecting python-dateutil>=2.8.2
    Downloading python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)
       ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 247.7/247.7 KB 10.8 MB/s eta 0:00:00
  Collecting numpy>=1.22.4
    Downloading numpy-1.26.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)
…
```

一部だけ表示しましたが、手順を示したのちに必要なパッケージをインストールするように進めています。`Would you like to run this code? (y/n)`で`y`を入力することでインストールが開始されますが、Dockerコンテナ内であればローカル環境を汚すことなく作業ができますね。

もし特定のパッケージを使うことが分かっているのであれば、事前にDockerfile内で`pip install`をしてもよいかもしれません。以下は例です。
``` Dockerfile
…
# OpenInterpreterのセットアップと他のライブラリのインストール
RUN pip3 install open-interpreter pandas pandas_datareader matplotlib
…
```
パッケージが多いのであればrequirements.txtを作るなど工夫はできそうですね。

これであなたもキレイな環境でOpenInterpreterを楽しみましょう！

:::note warn
注意
OpenInterpreterのGithubを見ていると「コストが30分で20ドルもかかった…！」など、費用が高くなってしまうという報告が多数あがっています。使いすぎるととんでもない費用が請求される可能性もあるため、Azureであればコストエクスプローラー等を確認しながらお使いくださいませ。
:::