AutoGenをガッツリ試してみる:グラフをプロットしてみる
概要
前回はAutoGenというマルチエージェントのフレームワークを触ってみるということで、FizzBazzのコードを生成して実行する流れを試し、上手く動くことを確認できた。今回は独自のDocker環境を利用すると共に、グラフを表示する流れについて紹介をしてみよう。
Pythonを実行する環境として、ローカル環境が挙げられるが、ライブラリのダウンロードなど環境を汚してしまう可能性がある。できればDocker環境で実行したいところであるが、GUIを利用した場合にはDocker環境下で直接動かすだけではグラフが表示されなかった。とはいえ、Docker環境で動かないというのは困るので、これを解決してみる。
今回の記事だは、まずはローカルの環境で実行をした後に、Docker環境でグラフを表示するというのもやってみよう。
株価のダウンロードとプロットをしてみる
ローカルの環境での実験
まずは前回と同様に、生成したPythonコードをローカル環境下で実行してみることとする。インストールと環境設定は前回と同様なのでここで省く。ソースコードは以下となる。前回との違いとしては、messageの部分だけで、「NVIDIAとTESLAの年間の株式のチャートをプロットしてください」という指示になっている。
from autogen import AssistantAgent, UserProxyAgent, config_list_from_json
code_execution_config = {
"work_dir": "coding",
"use_docker": False
}
config_list = config_list_from_json(env_or_file="OAI_CONFIG_LIST")
assistant = AssistantAgent("assistant", llm_config={"config_list": config_list})
user_proxy = UserProxyAgent("user_proxy", code_execution_config=code_execution_config)
message = "Plot a chart of NVDA and TESLA stock price change YTD."
user_proxy.initiate_chat(assistant, message=message)user_proxy.initiate_chat(assistant, message=message)
上記を実行すると、以下のように実行のプロセス(インストール、データ取得、プロット)を示してくれる。
user_proxy (to assistant):
NVIDIAとテスラの株式価格の年間の推移をプロットして
--------------------------------------------------------------------------------
assistant (to user_proxy):
それを達成するために、私たちはPythonのYahoo Financeライブラリ、pandas、およびmatplotlibを使用します。次の手順に従ってください:
1. 必要なモジュールがない場合はPythonのYahoo Financeライブラリ、pandas、およびmatplotlibをインストールします。
2. Yahoo FinanceからテスラおよびNVIDIAの株式データを取得します。
3. 年間の終値を取得してプロットします。
まず、必要なライブラリをインストールするためのコードを実行しましょう。
```shell
pip install yfinance pandas matplotlib
```
次に、以下のPythonコードを使用して株式データを取得し、年間の終値をプロットします:
```python
# filename: stock_plot.py
import yfinance as yf
import pandas as pd
from matplotlib import pyplot as plt
# Yahoo FinanceからNVIDIAとTeslaの株価データを取得します
nvidia = yf.download("NVDA", start="2021-01-01", end="2021-12-31")
tesla = yf.download("TSLA", start="2021-01-01", end="2021-12-31")
plt.figure(figsize=(14, 7))
# NVIDIAのデータをプロット
plt.plot(nvidia.index, nvidia.Close, label='NVIDIA')
# Teslaのデータをプロット
plt.plot(tesla.index, tesla.Close, label='Tesla')
# グラフのタイトルとラベルを設定
plt.title('Yearly Stock Price Trend')
plt.xlabel('Date')
plt.ylabel('Closing Price (USD)')
plt.legend()
# グラフを表示
plt.show()
```
このPythonスクリプトを保存して実行すると、2021年1月1日から2021年12月31日までのNVIDIAとTeslaの年間株価の推移が表示されます。株価は毎日の終値に基づいており、時間経過による変化を直線的に表示します。
そこで、このまま実行を続けると以下のようなグラフが表示される。
Dockerを利用してみる
Dockerを利用する際に、デフォルトで利用されるベースイメージであるpython:3-alpineだと、実行中にnumpyなどをインストールしようとして動かなかった。またそのままだとmatplotlibのグラフも表示されなかった。そこでこの記事では、独自のDockerイメージを作成しAutoGenから利用する方法について説明する。
まずはDockerをAutoGenから利用できるようにパッケージをインストールしておく。Docker自体のインストールなどは別途やっておこう。
pip install docker
Mac環境を対象として、コンテナ内で実行したGUIを表示するために以下を実行し、XQuartzというパッケージをインストールする。XQuartzはMac上でX11を動かす仕組みらしい。
brew install --cask xquartz
XQuartzを起動し以下のように環境を設定する。ネットワーク・クライアントからの接続を許可にチェックを入れておく。
open -a XQuartz
環境を設定したら一度XQuartzを終了し、再起動をしておく必要があるらしい。あとは、以下を実行しておこうとのこと。
xhost + 127.0.0.1
次にDockerのイメージを作る。コード中で使われるのでいくつかパッケージをインストールしておく。不要なものもあると思うけど気にしない。DISPLAYの環境変数を設定しておく。その上で、docker buildしておく。
FROM python:3
RUN apt-get update && apt-get install -y \
build-essential\
python3-pip\
python3-setuptools\
python3-distutils\
python3-dev
RUN pip install numpy pandas yfinance
ENV DISPLAY host.docker.internal:0
docker build -t autogen .
AutoGenから独自のDockerイメージを利用する際には、code_execution_configのuse_dockerに利用したいイメージを記載しておく。後はコードを実行すると動くはずだ。
code_execution_config = {
"work_dir": "coding",
"use_docker": ["autogen:latest"]
}
ファイルを保存する
ここまでにグラフをGUIで表示をしましたが、ファイルとして保存する事もできます。例えば以下のように、出力ファイル名を指示文を与えることで、codingディレクトリ下にstock_price_ytd.pngが出力することもできます。
message = "NVIDIAとテスラの株式価格の年間の推移をプロットし、stock_price_ytd.pngというファイル名で保存してください"
user_proxy.initiate_chat(
assistant,
message="message"
)
終わりに
独自のDocker環境下でAutoGenのコードを実行させるとともに、GUIでグラフをプロットする流れについて解説した。独自のDocker環境を使えるので、毎度パッケージをインストールするプロセスをせず、かつ、自分のPCの環境を汚さずにAutoGenを使えるようになった。まだ僕自身がAutoGenを使いこなせていないので、次に何をやるか決めたら、記事を書こうかなと思います。