`lmstudio-python`と`lmstudio-js`のご紹介

2025-03-03

undefined

LM Studio SDKが登場しました!

本日、**lmstudio-python** (`1.0.1`) と **lmstudio-js** (`1.0.0`) をリリースします。
LM Studio の**Python** および **TypeScript** 用ソフトウェア開発キットです。両ライブラリはMITライセンスで、GitHub上でオープンに開発されています。

さらに、LM Studio 初のエージェント指向APIである **.act()** コールを導入します。プロンプトとツールを与えると、モデルはタスクを完了するまで(または諦めるまで)、複数の実行「ラウンド」を自律的に進めます。

独自のコードからLM Studioの機能を使用する

SDK を使用すると、LM Studio デスクトップアプリ用に構築したのと同じ AI システム機能を利用できます。これらの API を公開することは常に私たちの計画であり、LM Studio がそのコア機能に同じ公開 **lmstudio-js** API を使用するように、ソフトウェアスタックを設計しました。あなたのアプリもこれでできるようになります。

独自のローカルAIツールを構築する

私たちの目標は、LM Studio の開発の一環としてすでに解決した問題(うまくいけば)を解決する必要をなくし、独自のツールを構築できるようにすることです。これには、自動ソフトウェア依存関係管理(CUDA、Vulkan)、マルチGPUサポート(NVIDIA、AMD、Apple)、マルチオペレーティングシステムサポート(Windows、macOS、Linux)、デフォルトのLLMパラメータ選択などが含まれます。

`lmstudio-python` または `lmstudio-js` を使用するアプリは、LM Studio が動作している(フォアグラウンドまたはヘッドレスモードで)任意のコンピューターで実行できます。

最初のアプリ

SDK は Python と TypeScript の両方で利用可能です。pip または npm を介してインストールできます。

pip install lmstudio

Python では、スクリプト、ツール、またはPython REPLで `lmstudio` パッケージを使用してください。

TypeScript では、Node.js またはブラウザアプリで `@lmstudio/sdk` パッケージをインポートしてください。

  • `lmstudio-js` 開発者向けドキュメントを参照してください。

コアAPI: チャット、テキスト補完、埋め込み、およびエージェントツール利用

LM Studio SDK を介して公開されるコアAPIは次のとおりです。

  • LLMとのチャット (`.respond()`)
  • エージェントツール利用 (`.act()`)
  • 構造化出力 (Pydantic, zod, JSON スキーマ)
  • 画像入力
  • 推測デコーディング (MLX および llama.cpp 用)
  • テキスト補完 (`.complete()`)
  • 埋め込み (`.embed()`)
  • 低レベル設定 (GPU、コンテキスト長など)
  • メモリ内のモデル管理 (`.load()`, `.unload()`)

TypeScript では、SDK API は Node 環境とブラウザ(CORS が有効な場合)の両方で動作します。Python では、便利な同期 API と、スコープ付きリソース管理のためのセッションベースの非同期 API の両方をサポートしています。

API の全リストについては、Python および TypeScript の API リファレンスを参照してください。

健全なデフォルトを持つAPI、しかし完全に構成可能

`lmstudio-python` または `lmstudio-js` を使用するアプリ、ツール、スクリプトは、ハードウェアやソフトウェアを設定することなく、最新の `llama.cpp` または `MLX` モデルを実行できます。システムは、特定のモデルに適切な推論エンジンを自動的に選択し、利用可能なリソースに基づいてパラメータ(GPUオフロードなど)を選択します。

たとえば、ちょっとしたプロンプトで「**どんな」モデルでも使いたい場合は、これを実行してください。

model = lms.llm() # gets the current model if loaded

しかし、より具体的なニーズがある場合は、モデルの新しいインスタンスをロードし、すべてのパラメータを手動で設定できます。詳細については、Python ドキュメント | TypeScript ドキュメントを参照してください。

Pydantic、zod、またはJSONスキーマで出力形式を強制する

LLM の昔(2023年半ば頃)には、モデルからの特定の出力形式を保証する最善の方法は、次のような懇願を含むプロンプトでした。

USER: 「有効なJSONで応答し、それ以外は何も出力しないでください。最後の } ブラケットの後に**何も**出力しないでください。」

現在では、はるかに優れた方法が存在します。例えば、文法制約付きサンプリング [1] [2] などです。これは、LM Studio が `llama.cpp` モデルと `MLX` モデルの両方でサポートしています。

SDK は、Pydantic (Python 用) または zod (TypeScript 用) を使用して、モデルの出力形式を強制する API を公開しています。両方のライブラリで、JSON スキーマを使用することもできます。

Python - Pydantic を使用

from pydantic import BaseModel

# A class based schema for a book
class BookSchema(BaseModel):
    title: str
    author: str
    year: int

result = model.respond("Tell me about The Hobbit",
                       response_format=BookSchema)

book = result.parsed
print(book)
#       ^
#   Note that `book` is correctly typed as
#   { title: string, author: string, year: number }

詳細はPython ドキュメントを参照してください。

TypeScript - zod を使用

import { z } from "zod";

// A zod schema for a book
const bookSchema = z.object({
  title: z.string(),
  author: z.string(),
  year: z.number().int(),
});

const result = await model.respond("Tell me about The Hobbit.",
  { structured: bookSchema }
);

const book = result.parsed;
console.info(book);
//             ^
//   Note that `book` is correctly typed as
//   { title: string, author: string, year: number }

詳細はTypeScript ドキュメントを参照してください。

`.act()` API: ツールをループで実行する

`.respond()` のような「標準的な」LLM API に加えて、SDK は新しい API である `.act()` を導入します。この API は、モデルにタスクと一連のツールが与えられ、タスクを達成しようと自律的に進行するエージェント指向プログラミングのために設計されています。

LLMが「ツールを使用する」とはどういう意味ですか?

LLM は基本的にテキスト入力、テキスト出力のプログラムです。では、「LLM はどのようにツールを使用できるのか?」と疑問に思うかもしれません。答えは、一部の LLM は、人間にツールの呼び出しを依頼し、そのツールの出力を特定の形式で返してもらうように訓練されている、ということです。

電話で誰かにコンピュータのサポートをしていると想像してください。あなたは「このコマンドを実行して...」「OK、何が出力された?...」「OK、次にそこをクリックして、何と書いてあるか教えて...」などと言うかもしれません。この場合、あなた自身が LLM なのです!そして、電話の向こうの人物を通して、間接的に「ツールを呼び出して」いるのです。

「ラウンド」でのツール呼び出しの実行

ツールを実行し、その出力を LLM に提供し、次に LLM が何をすべきかを決定するのを待つという一連のプロセスを説明するために、実行「ラウンド」の概念を導入します。

実行ラウンド

 • run a tool →
 ↑   • provide the result to the LLM →
 │       • wait for the LLM to generate a response

 └────────────────────────────────────────┘ └➔ (return)

モデルは、最終結果を返す前にツールを複数回実行することを選択する場合があります。たとえば、LLM がコードを記述している場合、プログラムをコンパイルまたは実行し、エラーを修正し、再度実行するというプロセスを、望む結果が得られるまで繰り返すことを選択するかもしれません。

これを踏まえ、`.act()` API は自動「マルチラウンド」ツール呼び出し API であると述べています。

TypeScript では、説明と関数を使用してツールを定義します。Python では、関数を直接渡すこともできます!

import lmstudio as lms

def multiply(a: float, b: float) → float:
    """Given two numbers a and b. Returns the product of them."""
    return a * b

model = lms.llm("qwen2.5-7b-instruct")

model.act(
  "What is the result of 12345 multiplied by 54321?",
  [multiply],
  on_message=print,
)

LLM がツールを使用することを選択すると、SDK はそれを実行し、自動的に(クライアントプロセスで)結果を LLM に返します。その後、モデルはツールを再度実行することを選択するかもしれません。例えば、ソフトウェアエラーが発生し、LLM にどのように続行すべきかに関する情報が提供された場合などです。

実行が進むにつれて、SDK はコールバックを介して開発者にイベントのストリームを提供します。これにより、LLM が何をしているか、どのツールを使用しているか、そしてどのように進行しているかを示すインタラクティブなUIを構築できます。

`.act()` API の利用を開始するには、**.act() (Python)** および **.act() (TypeScript)** を参照してください。

オープンソース: SDK開発への貢献

両方のライブラリは MIT ライセンスで、最新の貢献ガイドが含まれています。オープンソース開発に参加したい場合は、ぜひご参加ください!

その他のLM Studioオープンソースソフトウェアには以下が含まれます。

  • lms: LM Studio の CLI (MIT) - GitHub
  • mlx-engine: LM Studio の Apple MLX エンジン (MIT) - GitHub

フィードバックをお待ちしております!

SDK の使用を開始されるにあたり、皆様からのフィードバックをお待ちしております。何がうまくいっていますか?うまくいかない点はありますか?次にどのような機能を見たいですか?もちろん、バグに遭遇したかどうかもお知らせください。

それぞれの GitHub リポジトリで इशューを開いてください。スターもいただけると幸いです 🙏⭐️。