では、今の環境で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なしだとやっぱり無理なんかねぇ。
レンジワン
なお rnj-1は「れんじ・わん」と読むらしい。急げレンジワン、レンジスパークだ!という感じがするね(しない)。