話題のOpen InterpreterをM3 Macにインストールして使う方法

# Open Interpreterとは？
Open Interpreterとは、ChatGPTに搭載されている[Code interpreter](https://openai.com/blog/chatgpt-plugins#code-interpreter)をローカルPC上で実行できるようにするものです。噛み砕いて表現すると、AIとの会話の中でPythonコードを自動で実行してもらって結果を得るといったものになります。
さらに、Macのシステム設定変更も可能で、[公式のデモ](https://github.com/OpenInterpreter/open-interpreter?tab=readme-ov-file#demo)によれば自然言語で尋ねるだけでMacを自動的にダークモードに変更しています。

今回は、M3 MacBookAirにインストールして使用してみます。なお、LLMにはOpenAIのAPIを使用します。

## 用意するもの
- Mac（本ページではM3 MacBook Airを使用して試しています）
- OpenAI API Key

:::note warn
OpenAI API について
OpenAI APIは、API経由でOpenAI社のLLM（大規模言語モデル）を利用できる仕組みです。APIを使用すると利用量に応じて料金が発生します。価格について詳しくは次のページを参照してください。
https://openai.com/pricing
APIの利用開始には登録とクレジット追加が必要です。登録後にAPI Keyを取得してください。登録については次のページを参照してください。
https://platform.openai.com/
:::

:::note info
LLMについて
Open InterpreterではOpenAI APIを使用する以外にローカルのモデルを使用する方法があります。interpreterコマンドに`--local`オプションをつけて実行するとモデルを選択してダウンロードができます。他にも、LM Studioを使用してローカルにAPIサーバーをたてて実行し、interpreterから参照することもできます。
しかし筆者の環境で動作が安定しなかったため、本ページではOpenAI APIを利用した方法を紹介します。ローカルモデルを使用する方法は[リポジトリページ](https://github.com/OpenInterpreter/open-interpreter/tree/main?tab=readme-ov-file#running-open-interpreter-locally)か[公式ドキュメント](https://docs.openinterpreter.com/guides/running-locally)を参考にしてください。
:::

# インストール
## インストール概要
以下の方法でインストールを進めます。
1. python環境を用意する（インストール条件を満たしていればスキップ可能）
1. Open Interpreterをインストールする

## インストール条件
- python 3.11 以下

:::note info
pythonバージョンについて
python 3.11.8と 3.10.13で、Open Interpreter 0.2.4が動作することを確認しました。v3.12.2ではOpen Interpreterのインストールに失敗しました。

pythonバージョンはターミナルで`python --version`または`python3 --version`を実行することで確認できます。
手元のMacには標準で3.9.6がインストールされていました。
:::


## インストール手順
ここからはインストール手順の詳細を説明します。pythonのバージョンが満たしている場合にはpythonインストールの手順までスキップしても問題ありません。

pyhton自体のインストールと、pythonのバージョンを切り替える方法として、pyenvというツールがあります。ここではpyenvを使用してpythonのインストールを行なっていきます。また、pyenvのインストールのためにHomebrewを使用します。

さらに、pythonでは用途に応じて専用の実行環境を用意することが一般的で、これを仮想環境呼びます。仮想環境を使用することで他のpython環境への影響を抑えることができるため、本ページでも仮想環境を使っていきます。仮想環境にはvenvを使用します。

### Homebrewのインストール
HomebrewはMac向けのパッケージ管理ソフトです。pyenvを簡単にインストールする目的で導入します。
インストールは[公式ページ](https://brew.sh/ja/)の通り、スクリプトを実行します。
ターミナルを起動して、以下を貼り付けて実行します。

```zsh
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
インストール後にパスを通すようにメッセージが出るので、出力された内容をそのままコピペします。macでのデフォルトのシェルはzshです。以下のようになると思います。
```zsh
(echo; echo 'eval "$(/opt/homebrew/bin/brew shellenv)"') >> /Users/ユーザー名/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
```
`brew`とコマンドを入力して実行し、ヘルプメッセージが表示されればインストール成功です。

### pyenvのインストール
Homebrewでpyenvをインストールします。
```zsh
brew install pyenv
```
`pyenv`とコマンドを入力して実行し、ヘルプメッセージが表示されればインストール成功です。

### Python 3.11のインストール
pyenvによりpythonをインストールします。Macに標準でインストールされているpythonとは競合しません。

ここでは3.11.8をインストールします。
```
# インストール可能なバージョンを一覧する
pyenv install -l
...略
3.11.8
...略

# pythonの特定バージョンをインストールする
pyenv install 3.11.8

# インストールされているバージョンを確認する
## 3.11.8がインストールされているが、systemのpythonが使用されていることがわかる
pyenv versions
* system
  3.11.8 (set by /Users/reiji/Dev/.python-version)

# 使用するpythonバージョンを切り替える
pyenv global 3.11.8

# バージョン切り替えを確認する
pyenv versions
  system
* 3.11.8 (set by /Users/reiji/Dev/.python-version)

# pythonを実行し、バージョンを確認する
python --version
Python 3.11.8
```

### 仮想環境の用意
仮想環境を作成します。ここでは、ホームディレクトリ以下に`pythonenv`というディレクトリを作ってここを仮想環境とします。
```zsh
mkdir ~/pythonenv
cd pythonenv
python -m venv venv
source venv/bin/activate
```
プロンプトに`(venv)`というのが付与されていれば仮想環境が支えています。仮想環境から出る場合は`deactivate`と入力して実行します。

以上で、Open Interpriterをインストールする準備ができました。

### Open Interpriterのインストール
Open Interpriterはpipでインストールします。pipはpythonのパッケージ管理ツールです。
仮想環境で、以下のコマンドを実行してインストールします。
```zsh
pip install open-interpreter
```

以上でインストール手順は終わりです。ここから先は実際の使用感を書きます。


# Open Interpreter を使用してみる

## OpenAI APIを使用する設定
Open InterpreterにはLLMが必要です。OpenAIのAPIを使用する方法と、LM Studioを使用する方法と、ローカルのモデルを直接利用する方法があります。後者の二つは本ページでは解説しないので、詳しく知りたい方は[ドキュメント](https://github.com/OpenInterpreter/open-interpreter?tab=readme-ov-file#running-open-interpreter-locally)を参照してください。

OpenAIのAPIを使用するには登録とクレジット追加が必要です。その後、API Keyを取得してください。APIのページは次のURLです。  
https://platform.openai.com/

API Keyを取得したら、ターミナルで以下を実行します。
```
export OPENAI_API_KEY=your_api_key
```

## Hello World
まずは簡単にHello Worldという文字列を出力してもらいましょう。
Open Interpreterの実行には`interpreter`コマンド実行します。
実行すると、`>` というプロンプトが表示されるので、ここに命令を入力します。

:::note info
`-y`オプションについて
interpreterはプログラムを実行する際に実行可否をユーザーに尋ねます。具体的には`Would you like to run this code? (y/n)`とメッセージが表示され、`y`を入力することでコードを実行することができます。この質問を省略して処理を実行するには`interpreter -y`のように`-y`オプションをつけて実行します。
:::

では、「Hello Worldを出力してください」と命令してみましょう。
```
% interpreter -y
> Hello Worldを出力してください。
```

結果は以下の通りです。
![スクリーンショット 2024-03-28 0.52.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/94965/97a26084-f4a9-b943-2721-c33fcc6348b5.png)
pythonで`print('Hello World')`というコードを生成し、これを実行した結果を表示してくれました。

## Macをダークモードへ変更する
Open Interpreterを使えば、Macの設定を変更してダークモードに変えることもできます。

```zsh
> システムをダークモードに変更できますか？

  もちろん、あなたのシステムをダークモードに切り替えることができます。以下のプランを実行します：      
                                        
   1 AppleScriptを使用して、システムのダークモードを有効にします。
   2 このスクリプトをexecute関数を使用して実行します。                    
   
   tell application "System Events"
   　　tell appearance preferences
    set dark mode to not dark mode
    end tell
 　　　　end tell

  コードを実行しました。システムの表示がダークモードに変更されていることを確認してください。もし変更がされていない場合は、再度お知らせください。  
```
実行前はライトモードですが、
![スクリーンショット 2024-03-29 15.19.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/94965/9bfc0d53-b5a9-8cc6-b5e2-e586e5d643a3.png)
実行するとダークモードになりました。
![スクリーンショット 2024-03-29 15.18.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/94965/b664b3c4-0e4f-81c8-461e-b3d48809673b.png)

以下のページにデモ動画があります。
https://github.com/OpenInterpreter/open-interpreter/tree/main?tab=readme-ov-file#demo


## 株価の正規化

[公式のサンプル](https://github.com/OpenInterpreter/open-interpreter?tab=readme-ov-file#quick-start)にもある通り、株価の正規化も行えます。
原文では`Plot AAPL and META's normalized stock prices`となっていますが、日本語訳した`AAPLとMETAの正規化株価をプロットする。`を命令してみます。
この命令の意味は、AppleとMetaの最近の株価を正規化してくださいということです。この場合の正規化とは、異なる株価持つ株式間で比較しやすくするために、株価データを一定の範囲内に調整することです。正規化することで、AppleとMetaの株の価格帯が近くなり、比較しやすくなります。

では実際にやってみましょう。処理量が多いため途中でプロンプトが返ってくる場合がありますが、何も入力せずEnterを押せば処理を継続してれます。

```
> AAPLとMETAの正規化株価をプロットする。
  まず、ユーザーのシステムにpandasとmatplotlibライブラリがインストールされているか確認しましょう。そ  
  れらが存在しない場合、パッケージをインストールします。次に、pandas_datareaderを使用して、AAPLとMET  
  Aの過去数年間の株価データを取得します。正規化とは、いくつかの異なる尺度を比較可能にするために使用   
  されます。データを正規化することにより、特定の期間でのパフォーマンスを比較できます。最後に、matplo  
  tlibを使用してこのデータをプロットします。
  
  • pandasとmatplotlibがインストールされているか確認します。存在しない場合、パッケージをインストールします。
  • Yahoo FinanceからAAPLとMETAの株価データを取得します。
  • 正規化関数を作成し、株価データを正規化します。
  • 正規化されたデータをプロットします。

...略

  私が表示した正規化された株価データの最初の5つと最後の5つのエントリーは、時間の経過とともに株価がどのように変動したかを示しています。この情報は、それぞれの株価が1年間でどれだけ増減したかの全体的な概念を提供します。
  • AAPLの株価は初日を基準にしており、最終日には約7%増加しています。
  • 一方、METAの株価は同じ期間で約138%増加しています。
したがって、この1年間でMETAの株価はAAPLの株価よりも大幅に増加しています。 
```

最終的には、正規化した株価から分析してMetaの株価の増加が多いことを示しています。
さらに、株価をプロットしたデータを可視化した画像ファイルをpngで保存してくれています。

![normalized_stock_prices.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/94965/e1c2277c-fb51-eb5c-ade5-49711de3ac0e.png)

# まとめ
Open InterpreterをMacにインストールしてマシンの設定変更や株価の正規化をすることができました。これまではChatGPTでしかできなかったことが、ローカル端末で可能になったということです。LLM自体も軽量なものが続々とリリースされていますし、将来的にはローカル端末の操作は多くのことが自然言語による命令で処理されるようになっていくことでしょう。
本ページには基本的なことをまとめましたが、もっと幅広く応用的なこともできると思います。皆さんもOpen Interpreterで試した結果があればぜひコメントで教えてください。

最後までご覧いただきましてありがとうございました。