Ubuntu Weekly Recipe

第906回さまざまな生成AIプロバイダーに対応したデスクトップAIアシスタント⁠Witsyを使用する

今回はAIアシスタントのWitsyを紹介します。

AIアシスタントは便利

第905回などをはじめとする過去の記事ではLLMのクライアントはWebブラウザーを前提としています。なにせ手軽であることが大きな理由ですが、LM Studioを例に出すまでもなく、専用のクライアントアプリがあったらいろいろ便利です。だったらLM Studioを使用すればいいのですが、クローズドソースなのであまり使用したくありません。

そんなときに次の候補にしたいのが、第883回でも簡単に紹介したWitsyです。LLM管理機能こそはありませんが、多くのクラウドLLMサービスに対応しているばかりでなく、ローカルLLMにも対応しています。対応するローカルLLM実行環境はLM StudioとOllamaですが、LM Studioのバックエンドはllama.cppなので、すなわちllama.cppが使用できます。あくまで今回の例なので、実際に試してみる場合はお好きなLLMサービスを選択してください。

Witsyは少し前のバージョンまでフォーカスに関する不具合があっておすすめしづらかったのですが、現在はそれも解消され、広くおすすめできる存在になっています。ただ、IBusで若干もたつくような挙動はあります。

動作環境

今回使用するのは第905回で紹介した、NVIDIA GeForce RTX 5060 Tiを使用したPCです。モデルはQwen3.5-27Bです。もちろん使用するのはCUDAなので、紹介した方法でビルドしてください。

ダウンロードとインストール

WitsyはDebパッケージとして提供されています。GitHubのReleasesページから「witsy_(バージョン)_amd64.deb」をダウンロードし、インストールします。

初期設定

最初起動した際にウィザードが表示されます(図1)。基本的に何もしなくても構いません。

図1 最初に表示されるウィザード

最低限必要な設定としては使用するLLMを選択することです。サイドバー左下の歯車アイコンをクリックして設定画面を表示し、⁠モデル」をクリックします。

多くのLLMクラウドサービスに対応していることがわかりますが、ここでは「LM Studio」をクリックします。

「APIベースURL」でllama.cppサーバーを指定します。第905回のとおりであれば、⁠http://localhost:8080」となります。続けて「チャットモデル」右の再読み込みアイコンをクリックすると、現在有効なモデルが表示されます(図2)

図2 モデルの設定例

これで設定完了です。

「チャット」を開き、⁠メッセージ送信ショートカット」を確認してください(図3)

デフォルトでは「Enterで送信、Shift+Enterで改行」となっています。このショートカットキーで慣れている場合にはいいのですが、直感的には「Enterで改行、Shift+Enterで送信」のほうがわかりやすいので、必要であればこの設定を変更してください。

図3 Enterキーで改行にもできる

基本的な使い方

サイドバーの上から2番目の「チャット」をクリックし、入力欄右側のモデルを選択するところで先程表示したモデルを選択し、ようやく使えるようになります(図4)

図4 現在使用できるモデルを選択する

なにか質問してみてください(図5)

図5 サンクトペテルブルクのパラドックスであることを一発で見抜いている

Witsyの便利なところ

Witsyの便利なところはいろいろありますが、まずは生成した表をCSV/Excel形式でダウンロードできるところです(図6)

図6 表のダウンロードの選択肢に「CSV」「エクセル」がある

またMarmaid形式で図が作成された場合、レンダリングしてダウンロードもできます(図7)

図7 図をレンダリングさせ、それをダウンロードできる

HTMLやPDFでの保存もできます(図8)

図8 HTMLやPDF形式での保存もできる

プラグイン

「設定⁠⁠-⁠プラグイン」にはさまざまなプラグインがあります。いくつか有効にしてみます。

ファイルシステム

これは指定されたディレクトリ(フォルダー)にアクセスを許可するプラグインです。

「有効」「書き込み操作を許可する」にチェックを入れ、アクセスを許可するディレクトリを指定します。例では/home/ikuya/Downloadsとしています。

図9 ファイルシステムプラグインでは対象のフォルダーを選択できる

有効にするため、いったんWitsyを再起動します。なおウィンドウを閉じただけでは終了せず、右上の万年筆アイコンをクリックしてメニューを表示し、⁠終了」をクリックしてください(図10)

図10 Witsyの終了方法

試しにローカルのファイルシステムにアクセスできるか確認してみましたが、特に問題なくできているようです。

図11 ローカルのファイルシステムにアクセスできていることを確認した

Python

Pythonのプログラムを実行できます。ただし別ウィンドウを表示するようなものには対応しておらず、あくまでコンソールで完結するもののみです。

「有効」にチェックを入れるとランタイムをインストールするか質問されます(図12)

図12 組み込みランタイムをインストールするか質問される

ダウンロード完了後、試しにランダムな文字列でパスワードを生成し、そのファイルを保存するPythonスクリプトを開発してもらいました(図13)

図13 Pythonスクリプトを生成し、さらに実行してもらった

このように、プラグインを跨いだ質問にも対応しています。

ウェブ検索

ウェブ検索にも対応しています。エンジンは6種類から選べます。ちょっと使うくらいであれば「ローカルGoogle検索」を選択してもいいのですが、使用には強い制限があるようなので、別のものがいいでしょう。

その中で一番手軽そうだったのはSearXNGですので、これを使用します。

Dockerを使用しますので、インストールしていない場合はインストールします。

$ sudo apt install docker.io docker-compose-v2 curl
$ sudo usermod -aG docker $USER

一旦ここで再起動します。

続けてSearXNGのコンテナを用意します。

$ mkdir -p ./searxng/core-config/
$ cd ./searxng/
$ curl -fsSL -O https://raw.githubusercontent.com/searxng/searxng/master/container/docker-compose.yml \
    -O https://raw.githubusercontent.com/searxng/searxng/master/container/.env.example
$ cp -i .env.example .env

SearXNGはデフォルトではポート8080で動作します。今回llama.cppもポート8080で動作しているため、被ってしまいます。したがって、先程コピーした.envをエディターで開き、一番下の行を#SEARXNG_PORT=8080からSEARXNG_PORT=8081に変更します。あくまで今回の例で、都合のいいポートに変更してください。

さらに続けて次のコマンドを実行します。

docker compose up -d
docker compose down

すると~/searxng/core-config/settings.ymlが生成されます。これをエディターで開き、85行目付近にある箇所を次のように編集します。なお開くときは管理者権限が必要のようです。

  formats:
    - html
    - json

Witsyから検索をする場合はJSON形式を使用するため、これを追加します。

あとはイメージを起動して完了です。

$ docker compose up -d

「設定⁠⁠-⁠プラグイン⁠⁠-⁠ウェブ検索」を開き、⁠有効」にチェックを入れます。⁠エンジン」「SearXNG」に変更し、⁠SearXNG URL」を、今回の例だと「http://localhost:8081」とします(図14)

図14 SearXNGの設定例

こちらも再起動しないと有効にならないようです。

歴代のUbuntuのバージョンを検索結果から表にしてもらいましたが、筆者の記憶にある限りでは正確なので、きちんと検索できているようです(図15)

図15 検索結果からUbuntuの歴代バージョンを表にしてもらった

また最初はタブ区切りで表を作ってもらい、それをCSV(カンマ区切り)に変更してもらったら、Pythonでプログラムを書いたところが面白かったです(図16)

図16 Pythonのプログラムで変換するとは筆者の予想を超えていた

もちろんそのファイルを直接保存できます(図17)

図17 コピペするのが面倒なので保存してもらった

おすすめ記事

記事・ニュース一覧