以下の内容はhttps://thinkami.hatenablog.com/entry/2025/05/05/231057より取得しました。


LM Studio + ローカルLLM (Qwen3、Gemma3、Mellum) なモデルを設定した JetBrains AI Assistant に、Chrome拡張を作らせてみた

JetBrains AI Assistant では、チャットモードとして ChatEdit を選択できます。
AI chat | AI Assistant Documentation

AI Assistant上の Edit モードの説明には「Modify Code」とあります。また、公式ドキュメントにも

use this mode when working on your code. In this mode, AI Assistant focuses on providing adjustments for the code in the current project. The required context is gathered automatically but can also be added or removed manually if needed.

と書かれています。もしかしたら多少はコーディングエージェント的な動きができるかもしれないと感じ、試してみたくなりました。

 
試す際、AIモデルを何にしようか考えたところ、AI Assistant ではAIモデルとしてローカルLLMも使えるようでした。
Switch to offline mode | AI Assistant Documentation

そこで、ローカルLLMで Edit モードを指定したとき、どこまでファイルの変更ができるかを試してみたことから、メモを残します。

 
目次

 

環境

 

環境構築

LM Studioのセットアップ

JetBrains AI Assistant でローカルLLMモデルを使う場合、次のどちらかを設定します。
Models | AI Assistant Documentation

  • LM Studio
  • Ollama

今までローカルLLMを使ったことがないので扱いやすいGUIがあると嬉しいのと、自分のマシンで適切にローカルLLMが動作するかの目安があると嬉しいことから、LM Studioを選択しました。

LM Studioの場合、モデルをダウンロードする際に、自分のマシンで扱うのは厳しい場合は次のような表示が出るのでわかりやすいです。

 
LM Studioの公式サイトからダウンロードしてインストールします。
LM Studio - Discover, download, and run local LLMs

 

JetBrains IDEとLM Studioの連携

次に、JetBrains IDE (WebStorm) とLM Studioを連携します。
Connect AI Assistant chat to your local LLM | AI chat | AI Assistant Documentation

まず、LM Studioの設定です。インストール直後は LM Studio の Developer タブにある Status が Stopped になっているはずです。そのトグルをクリックすると、Statusが Running になります。なお、LM Studioの設定は特に変更しないため、デフォルトのIPアドレス・ポート (http:127.0.0.1:1234)で起動することになります。

続いて、AI Assistant の設定を開き、 LM StudioのURLを設定します。あとは接続のテストをしてみて、接続できればOKです。

 

動作確認

今回は3つのローカルLLMモデルを使って動作確認します。それぞれ、LM Studioで動かせそうなもののうち一番良さそうなものを選択してみます。

 

各モデルに与える、プロンプトやREADMEについて

性能を比較しやすくするため、以前 Cline + Claude 3.7 sonnet 20250219 で作ったときのプロンプトを流用します。
Clineとともに、AmazonのURLをシンプル化するChrome拡張を作ってみた - メモ的な思考的な

AI Assistant が仕様を把握できるよう、Clineに渡した productContext.md を英語化したものを README として用意しました。詳しい内容は後述のソースコードを参照してください。

 
また、AI Assistantに渡すプロンプトは共通化し、以下の内容としました。やや雑かもしれませんが、これだけでどこまで作れるのか分からなかったため、今回は気にしないことにしました。

Please implement the Chrome extension based on the contents of the README.md

 

モデル

Qwen3

最近出た、Alibaba製のローカルLLMです。
Qwen3 の概要|npaka

Hugging Face ではいろいろなアカウントの Qwen3 があります。今回は LM Studio で動かすため、 lmstudio-community 版のものを使うことにします。

サイズとモデルについては、以下の記事を読んで気になった、 30B-A3B-MLX 系を使いたくなりました。
Qwen3はローカルLLMの世界を変えたかも - きしだのHatena

LM Studio にて確認したところ、 lmstudio-community/Qwen3-30B-A3B-MLX-4bit が動きそうでしたので、これを使うことにしました。
https://huggingface.co/lmstudio-community/Qwen3-30B-A3B-MLX-4bit

 
プロンプトを実行したところ、

  • manifest.json
  • background.js

の2ファイルができました。background.jsでは chrome.webNavigation.onBeforeNavigate.addListener を使っており、以前の Claude 3.7 Sonnet や Gemini 2.0 Flash とは異なる実装でした。

Chrome拡張として読み込ませたところエラーは発生しませんでしたが、動作しませんでした。

ソースコードはこちら。
https://github.com/thinkAmi-sandbox/amazon_url_redirector_by_local_llm-example/tree/main/qwen3-30b-a3b-mlx

 

2025/05/10 追記

コメントで14Bのことをお聞きしました。ありがとうございました。

試してみたところ、30Bと同じく chrome.webNavigation.onBeforeNavigate.addListener を使った実装が出ました。ファイルは manifest.jsonbackground.js です。

Chrome拡張として読み込んだところ、次のエラーが出て動作しませんでした。

Unchecked runtime.lastError: You do not have permission to use blocking webRequest listeners. Be sure to declare the webRequestBlocking permission in your manifest. Note that webRequestBlocking is only allowed for extensions that are installed using ExtensionInstallForcelist.

こちらで手を加えれば動くのかもしれませんが、今回は作らせてみるのが目的だったので、いったんこのままにしました。

ソースコードはこちら。
https://github.com/thinkAmi-sandbox/amazon_url_redirector_by_local_llm-example/tree/main/qwen3-14b-mlx

 

Gemma3

こちらはGoogle製のローカルLLMです。
Gemma explained: What’s new in Gemma 3 - Google Developers Blog

同じく lmstudio-community 版を探したところ、 lmstudio-community/gemma-3-12B-it-qat-GGUF がありました。LM Studioで確認しても動きそうだったため、使うことにしました。
https://huggingface.co/lmstudio-community/gemma-3-12B-it-qat-GGUF

 
こちらもプロンプトを実行したところ、3ファイルができました。

  • manifest.json
  • background.js
  • content.js

 
中身を見たところ、background.jsは console.log しか書いていないダミー的なスクリプトでした。また、 content.js は window.addEventListener("load", redirectAmazonURL) を使った実装でした。

こちらもChrome拡張として読み込ませたときにエラーとはならなかったものの、動作しませんでした。

 

Mellum

JetBrainsから出た、cloud-based code completion に特化したLLMです。
Mellum Goes Open Source: A Purpose-Built LLM for Developers, Now on Hugging Face | The JetBrains Blog

コーディング全般向けではない、かつ、サイズの小さなLLMですが、どこまでやれるか気になったため試すことにしました。こちらも Hugging Face にて公開されています。
https://huggingface.co/JetBrains/Mellum-4b-base

 
プロンプトを実行したところ、READMEの内容をレンスポンスしただけで止まってしまい、ファイルの作成などは行えませんでした。用途が違うので仕方ないですね。。。

 

おわりに

元々検証したかったAI Assistant の Edit モードについては、「ファイルを作成することもできるモード」とわかりました。ただ、まだ Beta と記載されているため、Betaが取れたときの挙動は変更になるかもしれません。

また、ファイルを作成したときは diff の表示や承認/否認を選べるなど、ややClineに近いような挙動をするということもわかりました。

 
現時点では、ローカルLLMは一発で動くソースコードを作成できませんでした。ただ、 manifest.jsonbackground.js の2ファイルを作っているので、プロンプトを工夫したりすればもう少し良い結果になるかもしれません。

他に、サイズが小さく、分野へ特化したLLMを使う場合、AI Assistant では適切な出力ができないということもわかりました。

 

ソースコード

GitHubに上げました。
https://github.com/thinkAmi-sandbox/amazon_url_redirector_by_local_llm-example

今回のプルリクはこちら。Qwen3が作ったものは qwen3-30b-a3b-mlx に、 Gemma3が作ったものは gemma-3-12b-it-qat に、それぞれ入っています。
https://github.com/thinkAmi-sandbox/amazon_url_redirector_by_local_llm-example/pull/1

2025/05/10で追記した分のプルリクはこちら。
https://github.com/thinkAmi-sandbox/amazon_url_redirector_by_local_llm-example/pull/2




以上の内容はhttps://thinkami.hatenablog.com/entry/2025/05/05/231057より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14