2026/04/05

vscodeからLM Studioを使いたい (6)

では、今の環境でRustのコードを作ってもらおう。

LLM は mistralai/codestral-22b-v0.1。
Continue は Agentモード。MCPサーバは Deep Wiki だけだがデフォルトで有効になっている "Built-in Tools" はそのままにしている。
コンテキスト長などはデフォルトのままのはず。LM StudioのシステムプロンプトやMCPサーバの設定はAPIで使うときも意味があるのだろうか?
"Rules" には "Reply in Japanese." という設定だけ書いた。

cargo new でプロジェクトを作り、src/main.rsの中身を空にした状態で指示。 

@main.rs 関数名mainに"Hello World!"と標準出力に出力する関数を作成。

LM Studio の Developer ページを見ると処理が進んでいるのがわかる。

 

I understand that you want to create a Rust function named main which prints "Hello World!" to the standard output. Here's how it can be done:

main.rs 

fn main() {
    println!("Hello World!");
}

だいたい4分くらい。
Rules に書いたのに日本度では返してくれなかったか。Rust専用LLMがあったらそれでもいいかと思っていたが、よく考えると日本語でプロンプトを書いたらそれを解釈する機能もいるから最低限の日本語の読み書きもできてくれないといかんのか。

 

別のLLMでやってみよう 

LLMを変更するとどう変わるのか試しておく。今日 "code" で検索すると昨日とは違うLLMが出てきた。そういうものなのかな?

この essentialai/rnj-1 をダウンロードして(5.2GBくらい)、Continue で Config を Reload、LLM を変更して Chat を新しく開いて同じプロンプトを書いて実行。

Acceptを求められるのでハイハイとやっていたが同じことを繰り返してしまう。
あ、空ファイルがあるから「create src/main.rs」に失敗するのかな? しかし最初は edit しようとして失敗しているしなあ。 


空ファイルを削除してやってみる。
惜しい。

 

fn main() {
    println!(\"Hello World!\");
}

 

シングルクォーテーションって変数展開だけじゃなくてもエスケープシーケンスも無効になるんだっけ? そうらしい。 

それはともかく、直接ファイルを編集せずにコマンドラインを使おうとしてのはなぜだろう? もしかして WSL2 はリモート扱いなので直接編集できないと判断された?  Gemini Code Assist や GitHub Copilot は WSL側にもインストールされているが Continue はそれができないのよね。

 

いや、先ほどの mistralai/codestral のときはそうでもなかったような。どうだっけ。。。ボタンを押して反映させたような気がしなくもない。src/main.rs がある状態でしか試していないので、同じくファイルを削除してから mistralai/codestral でやってみる。
自動でファイルは作らないようだが、"Create file" をクリックすると作成して中身も書いてくれたのでそういうものかもしれない。Built-in Tools の設定で許可を求めるようにしているからかも。

 


ファイルを書き換えてほしい

LLM を rnj-1 に戻し、src/main.rs に fn main() {} だけ書いてプロンプトをちょっと変更。「反映せよ」とまで書いたら書き換えてくれないだろうか。
rnj-1 に戻したのはそちらの方が回答までの時間が短かったからだ。時間を比較したかったがこちらにしばしば確認を求めてきたので単純比較できなかった。

@main.rs 関数名mainに"Hello World!"と標準出力に出力する関数を作成して反映させる。

惜しい!  main.rs の方はこれでよいしファイルへの反映もしているのだが、 Tool 枠に書かれている内容も main.rs に出力してしまっている。✓を main.rs の方だけクリックしても両方反映されてしまった。


// src/main.rs の内容を以下のコードに置き換えます。
fn main() {
    println!("Hello World!");
}
```
```tool
TOOL_NAME: run_terminal_command
BEGIN_ARG: command
cargo build


Built-in Tools で run_terminal_command を "Automatic" にしても "Excluded" にしてもよくならないし、なんか Python になったりしたのでそこをいじるのはやめた。
比較的早く回答が返ってきたので、この方向でなんとかしたいものだ。


WSL側にContinueをインストール

先ほど Continue extension が WSL側にインストールできないと書いたが、ダウンロードっぽいボタンを押すとチェックボックスでインストールできる extension が出てきてインストールできた。
その後でローカルの方をアンインストールするとそっちは「Install Locally」のボタンが出てきた。Remote も同じようにボタンが出てくれば悩まなかったんだけど違いはなんだろうね。


LM Studio とのやりとりは API というか HTTP というかでやるから通信さえできればよいのだけどファイルを扱ったりするとなると直接パスで扱えないとダメなんじゃないかなあという気がするのだ。

この状態だと同じプロンプトで試したところ、ファイルにはRustの関数部分しか反映されずに成功した。Built-in Tools の設定などはリセットされていたので run_terminal_command の実行を聞いてくるかと思ったが、それはなかった。

 

返事が日本語じゃなかったのは Continue がWSL側にインストールされると Local側とは設定が別になるのでやり直さないといけないのを忘れていたからだ。

設定してもう1回やり直すと、返事は日本語になったし、今度は run_terminal_command も出てきた。ただ Gemini Code Assist たちのように自分でコマンドを実行するのではなく、vscode のターミナルに反映させて「Enterだけ押してね」という状態にするのは Localでインストールしていたときと同じだ。
実行した結果は読み取っているのか、そこまでやって完了という感じだった。

 

では、と仕事で書いているRustのコードでちょっと面倒な書き換えを試したのだが、50分くらい悩んでなにかしようとしていたのだが、再思考が始まったのでさすがに断念した。
専用GPUなしだとやっぱり無理なんかねぇ。

 

デスクトップPCでmistralai/ministral-3-3b

デスクトップPCの方がThinkPad T14sよりもスペックは高いのだが、専用GPUではなくAMD Ryzen 7 5700G with Radeon Graphics で VRM は 1GBしか割り当てていない。 

mistralai の ministral-3-3b という rnj-1 よりもファイルサイズが小さい 3GB くらいのLLMを使って同じ指示を Continue から行ったところ50秒くらいでやってくれた。「cargo buildなどやってみてね」みたいなのも含めての時間だからコードを作るところだけならもっと早かっただろう。


レンジワン

なお rnj-1は「れんじ・わん」と読むらしい。急げレンジワン、レンジスパークだ!という感じがするね(しない)。

2026/04/04

vscodeからLM Studioを使いたい (5)

今のところの目標はこんなところだ。

  • vscode + WSL2 + LM Studio + Continue
  • Rust言語で書くときのサポートをしてほしい
  • なるべく早く応答してくれるのが良いがお金はかけたくない 


ローカルLLMで考えているが、ハードウェアを買い足さないと使い物にならないかもしれない。しかし高いお金出して買ってみたものの期待したスペックにならないという心配もある。それなら最初から有料プランを選択した方が賢いのかもしれない。

こちらはさっきClaudeから持ってきたAPIの費用だ。月額とかではなくてトークン単位での課金なのだな。それなら使わなければ課金されないので、どうしてもってときだけ使うというやり方もあるのだろう。月額じゃない分、忘れて使いすぎるという心配もあるが。。。

稼ぎが少ないので、無料で頑張ろう。

 

ContinueのMCP設定はconfig.yamlに書くことができる

お試し用にvscodeのプロジェクトを新しく作ったのだがMCPサーバの設定がなかった。前回追加したのはプロジェクトごとの設定なので .continue/mcpServers/*.yaml のような場所に置かれたのだが、全体設定の config.yaml に書いておけばグローバルで見えるようだった。


name: Local Config
version: 1.0.0
schema: v1
models:
  - name: LM Studio
    provider: lmstudio
    model: AUTODETECT
    apiBase: http://localhost:1234/v1/
mcpServers:
  - name: Deep Wiki
    type: streamable-http
    url: https://mcp.deepwiki.com/mcp



Agentモード? 

第1回にも書いたが、Continueのモードとして Agent を選択している。困ったことにというかなんというか、Agent の横に⚠マークが付いている。ちゃんとうごかないかもね、みたいなことが書いてあるので気になる。 

 

LLMをいくつか試しているのだが、サイズが小さめなものしか選んでいないからかどれも警告が出る。Recommended Agent Models に推奨が書いてあるがどれもうちでは動かせなさそうだ。
今ひとつ期待した結果が出ないのはその影響なんだろうか。 src/main.rs で main() しかないソースファイルを「レビューしてください」と指示したら、延々となんかやり始めて fn main() などを取り除いたりして好き勝手やってる。そして最後はなぜか main.py というファイル名でなにか言ってくるのだよな。
大雑把な指示には向かないのか。

話がズレるが、vscode extension の Gemini Code Assist に Agent を有効にするボタンがあったので使ったところ、いつも使っている /fix での修正よりもずいぶんまともなことに気づいた。なんだか /fix ではちゃんとした修正をしてくれる方が少なかったので Gemini Code Assist を使うのは止めようかと思っていたくらいだったのだ。
Agent で試したのは、Rust でこの辺のイベント処理をこうやってパラレルで処理しているけどシリアルで処理するようにしたい、みたいな漠然とした質問だったのだがうまいこと書き換えてくれたのだ。処理の終わりにDBを更新していたのでそれをポーリングして次のイベント処理を始めるように書き換えてくれた。やり方を何も考えていなかったので、自動でそういう書き換えをしてくれたのが嬉しかったのだ。
いつからそんなボタンがあったんだっけ?

 

LLM選び?

期待したことをやってくれないのはLLMの選び方かもしれない。とはいえ、どれがよいのかよくわからない。 
名前に "code" が付くのが良さそうな気がするが、まったく自信はない。

 

32B は大きすぎる。Qwen2.5 Coder 14B が 9GB、Codestral 22B が 13.5GB。サイズが大きいと結果が出るのも時間がかかるんだったと思う。 

 

2026/03/23

vscodeからLM Studioを使いたい (4)

第3回で、モデルによって回答がずいぶん異なることがわかった。
vscode の方でも気をつけるべし。

 

LM Studio で MCPの設定をしたが、あれはたぶん LM Studio の中でしか有効じゃないと思う。Continue は Continue で設定があるのでそちらが使われるはずだ(第1回で設定してたと思う)。 

 Use Tool が効くのかどうかわからないが、金づちアイコンがあって小さいモデルだった Ministral 3 3B を使うことにした。コンテキスト長も長くしておく。

 

LM Studio に設定したので Continue 側も念のため Local Config を reload。Chat のモデルを ministralai/ministral-3-3b にする。設定の方では Chat、Autocomplete、Edit のそれぞれにモデルを設定できるようだが、使わなければどれでもよかろう、たぶん。 

何も書かなくても日本語で返してくれるように Rules の上の方に書いている。効果はあると信じたい。

これで、第2回でも使った24KBくらいのRustファイルをアットマークで指定し、その中のメソッドの1つをレビューしてくれという指示をChatに書いた。
5分くらいかかったように思うが返事があった。

 

Prompt Tokensが第2回よりも少ないのはモデルの違いが関係するのだろうか? ファイル名を指定したのにプロンプトにはその内容は現れていないし。
1回分の指示だが、CONTINUE CONSOLE で2つに分かれているだけかもしれない。16:44:08.3 の方は Prompt Tokens が 12,212 もあってコードの中身があるようだったのでね。

肝心の結果だが、なかなかよい。
Copilot のように該当する行へのリンクがないので、どの行に対する話なのか確認するのが面倒だった。
左のアイコンは現在のカーソル位置に反映、真ん中はコピー、右はクリックするとAIが頑張りだした。最終的にキャンセルされたのだが、それは手動で変更してしまったからかもしれない。

 

私がvscodeで使ったことがあるのは Copilot Chat、Google Code Assist、そして Continue の3つしかないのでサンプルが少ないのだが、使い勝手としては Copilot がよかった。Gemini Code Assist がその次で、Continue は最後かな。
さっき書いた、Chatとコードの対応付けがその理由だ。性能はまた別の話だろうし。

vscodeからLM Studioを使いたい (3)

今回は vscode の Continue ではなく LM Studio だけの話だ。 

 

あまりよく考えずにモデルをダウンロードしている。
専用GPUもないし、デスクトップPCは 1GBくらいしかメモリを割り当ててないのでサイズが小さい方が良いなあ、くらいだ。

 

一番小さいのが Gemma3 1Bで 700MBくらい。
このくらいだと意味がない日本語の会話(あいさつとか)だとすぐに返信してくる。アプリを作るときに変にキャラクターが喋ってるようにがんばって実装するくらいなら、こういう組み込み型のモデルを使うのもありなのかなあ、などと思った。

 

Rustの文法くらいならこれでもささっと回答してくれるので、これはこれでありかと思う。
が、コードを作ってもらおうとすると話は別だ。

まず、どのモデルを使っても特定のライブラリのことはわからないだろうから DeepWiki のMCPサーバー情報をインストールした。 


その上でこういうプロンプトをモデル「qwen2.5-coder-7b-instructにお願いした。

Rust言語のredbで、key=u32、value=StringのテーブルでDBを作成するサンプルコードを見せて。DeepWikiを使用すること。
https://github.com/cberner/redb

動かしてはいないのだが、だいたいこんな感じだよなっていうコードを出してくれる。

use redb::{Database, TableDefinition};

const MY_TABLE: TableDefinition<u32, String> = TableDefinition::new("my_data");

fn main() -> Result<(), redb::Error> {
    let tmpfile = tempfile::create_tempfile()?;
    let db = Database::create(tmpfile.path())?;
    
    let write_txn = db.begin_write()?;
    let mut table = write_txn.open_table(MY_TABLE)?;
    table.insert(1, "hello world".to_string())?;
    write_txn.commit()?;

    Ok(())
}

これと同じプロンプトをモデル「google/gemma-3-1b」に出したのだが、なんかMCPサーバへ指示するツール名の read_wiki_structure ask_question が混ざったよくわからないコードを作った。

Reasoning とかいうモデルじゃないと推測などをしないから、プロンプトを愚直に受け取ってしまうのだろうか。いや、Tool Use の方か。

サイズが大きい方が賢いだろう、くらいしか考えてなかったが、なにかに対応しているとかまであるのだな。

vscodeからLM Studioを使いたい (2)

コンテキスト長が大きすぎる、というようなエラーが出てきた。


ここだと思うが、元が4096だったので倍にしたところ警告が出た。最初から Custom value だったのだけどそれはよいのかな?

The higher the context length, the more memory the model will take. If you are unsure, don't change the default 

 

この値はモデルによるようなので設定してもダメなときはダメなんだろう。 

vscode に Continue のデバッグ出力っぽいタブを追加してみたが、プロンプトでファイル名を指定したためかファイルの内容がまるまる使われているようだ。ファイルサイズは24KBくらいなのだがそれがそのままコンテキストの長さになるのではなさそうだ。 エラー文言中の 8514 ってなんだろうね。。。プロンプトトークンなるものが 7831 になっていたのでそれにシステムプロンプトとかの分が足されたのかな?

 

ああ、設定画面はあくまでデフォルト値の設定だけで、自分がサーバになって提供するときの設定は別みたいだ。 

 

これを適当に引き伸ばしたところエラーは出なくなった。

 

 

 出なくはなったが!
Rustのソースファイルを渡したのにレスポンスとしてPythonのコードが返ってきた。。。
道のりは遠いな。