はじめに
以前からローカルLLM を色々と試してみて、そして Qiita の記事を書いてきた中で、LM Studio を使ったお試しも色々とやってみていました。
●「lm studio user:youtoy」の検索結果 - Qiita
https://qiita.com/search?q=lm%20studio%20user%3Ayoutoy&sort=created
今回の内容
今回の記事は、その流れの中で書いた記事の中の、以下を組み合わせたようなものになります。
●LM Studio の OpenAI互換のAPI でローカルLLM でのストリーミングの軽いお試し(M4 MacBook Air を利用)【Node.js】 - Qiita
https://qiita.com/youtoy/items/4d3fdcda979f6778016b
●ミニPC「GMKtec EVO-X2」でローカルLLM: LM Studio で ROCm llama.cpp(Windows)+ gpt-oss-120b を利用【Ryzen AI Max+ 395・メモリ128GB搭載の PC】 - Qiita
https://qiita.com/youtoy/items/b6b376cae88b11e11100
M4 の Mac で試した時と変わりはないだろうとは思いつつ、以下の EVO-X2 での API利用を試してみます。
サクッと試してみる
それでは、サクッと試していきます。
LM Studio でサーバーを立ち上げる
以下の内容に進む前に、LM Studio でサーバーを立ち上げておきます。
そのやり方は、過去にいくつかの記事で書いていたり、検索すると説明が書かれた記事が色々出てくると思うので、詳細は省略します。
自分が書いた記事の例だと、「Vercel の AI SDK と LM Studio を使ったローカルLLM を組み合わせて試す【Node.js】」という記事内の「LM Studio の準備」という項目の部分になります。
ブラウザ で動作確認
LM Studio のサーバーのサーバーを立ち上げた後、とりあえず、ブラウザで LM Studio のサーバーにアクセスできるかどうかを確認して、動作確認を行ってみます。
LM Studio上では、アクセス用の URL として以下の情報を見ることができます。
これらの内容から、 http://localhost:1234/v1/models にブラウザでアクセス(この URL に GETメソッドでアクセス)してみて、モデルに関する情報が得られれば OK ということになりそうです。
動作確認の結果
動作確認の結果は以下の通りで、無事に LM Studio のサーバーは立ち上がっていそうです。
Node.js での API を使ったやりとり
Node.js のパッケージのインストール
今回、LM Studio の OpenAI互換の API を使うので、以下の OpenAI公式のパッケージを使った処理もできます。
●openai - npm
https://www.npmjs.com/package/openai
以下のコマンドで、上記のパッケージをインストールします。
npm i openai
お試し用のコードと実行結果【その1】
以下などを見つつ、お試し用のコードを準備してみます。
●API Reference - OpenAI API
https://platform.openai.com/docs/api-reference/responses
●Node.js で OpenAI の 新API(Responses API)をシンプルに試す - Qiita
https://qiita.com/youtoy/items/12749481635230fae586
具体的には、以下の内容を用意しました。
import OpenAI from "openai";
const client = new OpenAI({
baseURL: `http://localhost:1234/v1`,
apiKey: "lm-studio",
});
const response = await client.responses.create({
model: "model-identifier",
input: "あなたは誰?",
reasoning: { "effort": "low" }
});
console.log(response.output_text);
今回の場合は apiKey・model は空の文字列でも動作しますが、よく上記のような内容にするようなので、それに習った処理にしています。上記を実行した結果、以下のようなレスポンスを得ることができました。
お試し用のコードと実行結果【その2】
次に、ストリーミングを使った処理を試してみます。具体的には、コードの中で stream: true を指定して、出力部分をストリーミング用のものに少し変えてやります。
それと今回は、apiKey・model を空の文字列にして試してみることにしました。以下が準備したコードの内容です。
import OpenAI from "openai";
const client = new OpenAI({
baseURL: `http://localhost:1234/v1`,
apiKey: "",
stream: true,
});
const input = "あなたは誰?";
const stream = await client.responses.create({
model: "",
input,
reasoning: { "effort": "low" },
stream: true,
});
console.log(`\nプロンプト: ${input}\n`);
for await (const event of stream) {
if (event.type === "response.output_text.delta") {
const chunk = event.delta;
if (chunk && chunk.trim() !== "") {
process.stdout.write(chunk);
}
}
}
process.stdout.write("\n");
これを試した結果は以下のとおりです。画像で結果を掲載しているので先ほどと違いが分からないですが、今回のものは、ストリーミングでの出力になります。
おわりに
今回、ミニPC「GMKtec EVO-X2」で LM Studio の OpenAI互換のAPI を使ったローカルLLM を試すことができました。その際、EVO-X2(メモリ 128GB)であれば扱うことが可能な、60GB超(65GBほど)のモデルである gpt-oss-120b を利用しました。
今回はシンプルな出力を試しただけなので、さらに AIエージェントSDK との組み合わせや、今回よりも複雑な処理を試してみられればと思います。
その他のメモ
直近で(今月の上旬に)公式が発表した内容として、以下の「LM Studio の OpenAI の Responses API関連の内容」があり、それをメモとして残しておければと思ったので、リンクの掲載のみという感じですが以下に書いておきます。
●Use OpenAI's Responses API with local models | LM Studio Blog
https://lmstudio.ai/blog/lmstudio-v0.3.29
●Responses | LM Studio Docs
https://lmstudio.ai/docs/developer/openai-compat/responses






