1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OpenAI互換の API でローカルLLM: Node.js + OpenAI APIライブラリで LM Studio のモデル指定・切り替え

Posted at

はじめに

今回の記事は、前にも試して記事を書いてきた「LM Studio」を使ったローカルLLM関連の内容です。さらに、以下の条件・内容でのお試しです。

  • LM Studio でロードしておくモデルの数は「2つ以上、またはゼロ」
  • LM Studio の OpenAI互換の API を利用
  • Node.js を使った API経由でのモデル利用
    • 「OpenAI公式の APIライブラリ」を使った実装

OpenAI公式の APIライブラリ

ちなみに、OpenAI公式のライブラリ・SDK を使った、LM Studio の OpenAI互換の API利用では、以下の記事に書いた Agents SDK を使ったものもあります。今回は、OpenAI公式の APIライブラリ(の npmパッケージ)を使います。

過去に書いた記事

●【小ネタ】OpenAI Agents SDK for TypeScript でローカルLLM(LM Studio との組み合わせ) - Qiita
 https://qiita.com/youtoy/items/03460f8a79048792379f

OpenAI公式の APIライブラリ の npmパッケージ

●openai - npm
 https://www.npmjs.com/package/openai

2026-01-02_17-34-36.jpg

試した内容

以下で、下準備と試した内容のメインの部分を書いていきます。

下準備

下準備は、パッケージのインストールです。今回、pnpm を使ってインストールしました。

pnpm i openai

以下の npmコマンドを使っても OK です。

npm i openai

過去の記事を書いた時のモデル指定について

冒頭で、これまでも LM Studio に関する記事を書いたという話を出していました。

その際は、いつも「LM Studio でモデルを 1つだけロードした状態」で試していました。この場合、API を使うコード側でのモデル指定の部分は、 model: "" という空文字の指定でも model: "【任意の文字列】" という内容でも動作します。

今回の記事での LM Studio側でのモデルの読み込み

今回は、上にも書いていたとおり、LM Studio側でのモデルの読み込みは「2つ以上、またはゼロ」という状態で進めます。

モデル指定なしか任意の文字列で試してみる

まずは、「LM Studio でモデルを 1つだけロードした状態」であれば動く実装の、コード側でのモデル指定を model: ""model: "【任意の文字列】" という実装を試してみます。
※ LM Studio側でのモデルの読み込みは「2つ以上、またはゼロ」という状態

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "http://localhost:1234/v1",
  apiKey: "",
});

const response = await client.responses.create({
  model: "",
  input: "あなたは誰?",
});

console.log(response.output_text);

実行結果1

以下は LM Studio側でモデルを読み込んでいない時のレスポンスの一部です。モデルを読み込むようにというエラーメッセージが返ってきています。

・・・
  error: {
    message: "No models loaded. Please load a model in the developer page or use the 'lms load' command.",
    type: 'invalid_request_error',
    param: 'model',
    code: null
  },
・・・

次は LM Studio側でモデルを 2つ以上読み込んでいる状態で試します。以下はレスポンスの一部で、何らかモデルを指定するようにというエラーメッセージが返ってきています。

・・・
error: {
    message: 'Invalid model identifier "". Please specify a valid downloaded model (e.g., functiongemma-270m-it, qwen/qwen3-4b-2507@5bit, qwen/qwen3-4b-2507).',
    type: 'invalid_request_error',
    param: 'model',
    code: 'model_not_found'
  },
・・・

モデルを指定した処理を試す

今度は LM Studio側でのモデルの読み込みを「2つ以上、またはゼロ」にして、なおかつコード側は特定のモデルを指定した状態で試します。

モデル指定の具体的な内容は、以下の model: "gemma-3-270m-it" です(※ gemma-3-270m-it は、LM Studio でダウンロード済みとなっているモデルの 1つです)。

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "http://localhost:1234/v1",
  apiKey: "",
});

const response = await client.responses.create({
  model: "gemma-3-270m-it",
  input: "あなたは誰?",
});

console.log(response.output_text);

実行結果2

上記の処理を実行してみると、今回は LM Studio側で読み込んだモデルが「2つ以上、またはゼロ」の場合に、どちらでもモデルが返したレスポンスを得られます。

LM Studio側でモデルを読み込んでいない状態で上記の処理を実行した場合は、LM Studio側でのモデルの読み込みが行われるようです。上記の処理を実行した後、LM Studio側で指定したモデルが読み込まれた状態になっていることが確認できます。

モデルを指定時の名称について

モデルを指定する際の名前に関する補足です。上で示したコードでは model: "gemma-3-270m-it" というような名称で指定をしていました。これは、LM Studio上で「This model's API identifier」という項目から取得できる文字列です(※ 以下の画像の下側の囲みの部分)。

2026-01-02_19-39-00.jpg

モデル情報の「Model」という項目では「lmstudio-community/gemma-3-270m-it-GGUF」という表記がありますが、これを用いたモデル指定もできるようでした。

元のモデル指定をコメントアウトし、モデル指定部分を変更したコードは以下になります。

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "http://localhost:1234/v1",
  apiKey: "",
});

const response = await client.responses.create({
  // model: "gemma-3-270m-it",
  model: "lmstudio-community/gemma-3-270m-it-GGUF",
  input: "あなたは誰?",
});

console.log(response.output_text);
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?