2
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?

Mastra と LM Studio を使ったローカルLLM(Agent.streamVNext()/generateVNext() を使う)【Node.js】

Last updated at Posted at 2025-09-03

はじめに

以下の記事にも書いていた「LM Studio の OpenAI互換の API + AI系の SDK を使ったローカルLLM」の話です。

●Vercel の AI SDK と LM Studio を使ったローカルLLM を組み合わせて試す【Node.js】 - Qiita
 https://qiita.com/youtoy/items/7ec636b7086f107a9f5d

上記では Vercel の AI SDK を使っていましたが、今回は Mastra を使います。
※ API を扱う部分では、AI SDK の OpenAI Compatible Providers を使う形になります

さっそく試す

さっそく試していきます。

下準備

まずは下準備です。

LM Studio の準備

LM Studio側の下準備は、上で掲載していた記事の「LM Studio の準備」の部分をご参照ください。

ローカルサーバーとして動作させ、OpenAI互換の API を使える状態にできれば OK です。

Mastra のセットアップ

次に Mastra のセットアップです。以下のコマンドで @mastra/core と、Vercel の AI SDK の OpenAI Compatible Providers( @ai-sdk/openai-compatible )をインストールします。

npm i @mastra/core @ai-sdk/openai-compatible

記事執筆時点では、以下のバージョンのものがインストールされました。

2025-09-03_12-16-39.jpg

Agent.streamVNext()/generateVNext() について

あとは、お試し用のコードを書いて、実行してみるだけです。

記事執筆時点では、Mastra の Agent.generate() を使うと、以下のエラーがでて「generateVNext()」を使うように促されます。

2025-09-03_12-19-33.jpg

generateVNext() は、以下の記事に書いていたものです。

●Mastra の実験的機能「Agent.streamVNext()/generateVNext()」を Node.js で試す: V2モデル(AI SDK v5)対応の機能 - Qiita
 https://qiita.com/youtoy/items/4e590ac1e9d7357d1401

ストリーミングの場合は「streamVNext()」というものを使う形になります。

お試し用のコードと実行結果

まずは、Agent.generate() を使ったコードを試します。モデルは google/gemma-3-270m-it を使いました。

import { Agent } from "@mastra/core/agent";
import { createOpenAICompatible } from "@ai-sdk/openai-compatible";

const lmstudio = createOpenAICompatible({
  name: "lmstudio",
  baseURL: "http://localhost:1234/v1",
  apiKey: "lm-studio",
});

const agent = new Agent({
  name: "LMStudio",
  instructions: "日本語で簡潔に答えてください。",
  model: lmstudio("gemma-3-270m-it"),
});

const res = await agent.generateVNext("あなたは誰?");
console.log(res.text);

上記を実行すると、以下のレスポンスを得られました。

2025-09-03_12-23-06.jpg

この時、LM Studio のログを見てみると、以下が出ているのを確認できました。

2025-09-03_12-23-32.jpg

お試し用のコードと実行結果【その2】

次に、ストリーミングも試してみます。モデルは google/gemma-3n-E4B を使い、コードは以下としました。

import { Agent } from "@mastra/core/agent";
import { createOpenAICompatible } from "@ai-sdk/openai-compatible";

const lmstudio = createOpenAICompatible({
  name: "lmstudio",
  baseURL: "http://localhost:1234/v1",
  apiKey: "lm-studio",
});

const agent = new Agent({
  name: "LMStudio",
  instructions: "日本語で2文か3文で簡潔に答えてください。",
  // model: lmstudio("gemma-3-270m-it"),
  model: lmstudio("google/gemma-3n-e4b"),
});

(async () => {
  const stream = await agent.streamVNext("生成AIについて説明して", {
    format: "aisdk",
  });

  for await (const part of stream.fullStream) {
    if (part.type === "text-delta") process.stdout.write(part.text);
  }
  process.stdout.write("\n");
})();

上記を実行した時の様子を動画にしてみました。以下のとおり、ストリーミングでのレスポンスが得られていることを確認できました。

2
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
2
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?