工作と競馬2

電子工作、プログラミング、木工といった工作の記録記事、競馬に関する考察記事を掲載するブログ

小型LLM Bonsai-8B を OpenWebui を動かす(playwright-cli と組み合わせ、Webブラウザを操作してみる)

概要

小型のLLM Bonsai-8BをOpenWebuiで動かすことができた。




背景と目的

以前より、ローカルでLLMを動かして遊んできた。

dekuo-03.hatenablog.jp

dekuo-03.hatenablog.jp

今回は、

Bonsai-8B

というモデルを試してみる。このモデルは、

  • 1ビット量子化前提で作られている

というのが特徴で、パラメータ数が少なく(2,3B)、量子化ビット数が3,4ビットあるものと比較してビット数は小さいがパラメータが多いことで、精度と速度のバランスが良いと評判なので、ぜひ試してみたい。



詳細

0. 環境

  • CPU: Core-i5 14400F
  • GPU: RTX4060 8GB
  • RAM: DDR5-4800 16GB
  • Windows11


1. Bonsai-8B セットアップ~起動

まず、以下のサイトからclone。

github.com

Windowsのセットアップ方法に従い、以下を実行。8Bのモデルがダウンロードされる。

.\setup.ps1

次に、起動するのだが、Windows向けは、LinuxやMacと異なりスクリプトが用意されていない。bin/cudaというところに、llama-cliやllama-serverというexeファイルが用意されているので、それらを利用する。llama-cli.exeを用いれば、直接チャット画面が現れるが、今回はOpenWebuiから利用するため、以下のようなバッチファイルを作成し、サーバーモードで動作させ、OpenAI 互換 API経由でリクエストを待ち構える状態にする。ポートは8081とした。

cd /d %~dp0
.\bin\cuda\llama-server.exe --model .\models\gguf\8B\Bonsai-8B.gguf --port 8081 --host 0.0.0.0


2. OpenWebui セットアップ~起動

OpenWebuiは、Windows環境ではWSL Linux上でDockerコンテナとして実行することが推奨されているが、Linux(Docker)側からWindows側で待ち構えているAPI(1で起動したもの)にアクセスするための設定周りが面倒なので、Windows側で完結する。すなわち、

python -m venv
call venv\Scripts\activate
pip install openwebui

インストールが完了したら、以下を実行。ここでは、8085ポートを使用する。

open-webui serve --port 8085

で起動する。Webブラウザで、localhost:8085にアクセスすると、OpenWebuiの画面が出てくる。


3. playwright-cliを用いたツールの作成

Bonsai-8Bは、function calling(Tool calling)に対応している。そのため、OpenWebuiのツールを設定することで、ツールを使用したチャットのやり取りができる。そこで、Webブラウザの操作用ツールを作成して、Bonsai-8Bから呼び出してみたい。

方法としては、

  • playwright-cli

を呼び出すPythonスクリプトとする。playwright-cliは、Webブラウザを操作するAPIを提供するplaywrightというフレームワークのCLI版である。CLIを叩くには、Pythonのsubprocessモジュールを使ってコマンドを組み立ててあげるようにすればよい。したがって、以下の例のように、

    def open_browser(self) -> str:
        """ブラウザを起動。"""

        cli_command = ["playwright-cli", "open", "--headed"]

        resp = subprocess.run(
            cli_command,
            shell=True,
            check=True,
            text=True,
            encoding="utf-8",
            errors="ignore",
            capture_output=True,
        )

        return "ブラウザを起動しました."

ツールを実装することで動くはずである。


4. 動作確認

ブラウザを起動、終了、URLへ移動、スナップショット(アクセシビリティツリーを取得)など、基本的なものをいくつか実装し、

https://????/に移動してスナップショットを取得

というようなプロンプトを入力したところ、

うまくツールを呼び出してブラウザ起動し、当該URLへ移動してアクセシビリティツリーを取得することができた。

しかも、トークンの出力速度は 80token/秒 程度となっていて、他の小型といわれるような2,3Bで3,4ビット量子化クラスのLLMに比べてもかなり体感的に速い。そして、プロンプトに対してツール呼び出しが正確に行えている印象である。

したがって、この小さなモデルとツールを組み合わせれば、ストレスなくブラウザの操作ができてしまう、ということがわかった。



まとめと今後の課題

小型LLM Bonsai-8B を OpenWebui + playwright-cli で動かし、Webブラウザを操作できることがわかった。定型的な操作を自動化したり、他にもツールのバリエーションを増やすことでローカルでいろいろな操作に活用してみたい。