lmstudio_api_sample.py ドキュメント

概要

lmstudio_api_sample.py は、LM Studioが提供するローカルAPIサーバーに対して、Pythonの標準ライブラリのみを用いてリクエストを送信するサンプルスクリプトです。 サーバーで利用可能なモデル一覧の取得や、指定したモデルへのプロンプト送信および応答の取得を行うことができます。

動作環境

サードパーティ製のパッケージ(非標準ライブラリ)への依存はありません。以下のPython標準ライブラリを利用して動作します。

  • argparse

  • json

  • sys

  • urllib

機能詳細

  • モデル一覧取得: サーバー上で現在利用可能なモデル(embeddingモデルを含む)のIDを一覧取得して表示します。

  • チャットの実行: 指定したモデルIDに対してプロンプト(質問)を送信し、モデルから返却された回答テキストを表示します。

  • 推論プロセスの表示: モデルが思考プロセスや推論過程( reasoning_content )を出力する場合、オプション指定によりその内容を確認できます。

  • システムプロキシのバイパス: プライベートネットワーク上のAPIサーバーへ確実に接続するため、OSのHTTPプロキシ設定を無視( ProxyHandler({}) )して直接接続を行います。

  • 文字エンコーディングの保護: Windows環境のターミナルやファイルへのリダイレクト時において文字化けを防ぐため、標準出力・標準エラー出力のエンコーディングを utf-8 に強制再設定します。

入出力仕様

入力仕様(コマンドライン引数)

コマンドライン引数を用いて動作モードとパラメータを指定します。 実行には、--list を単独で指定するか、--model と --prompt のペアを指定する必要があります。

  • --list : 利用可能なモデルIDのリストを取得・表示します。

  • --model : 問い合わせ先のモデルIDを指定します。

  • --prompt : モデルに送信する質問(プロンプト文字列)を指定します。

  • --base-url : LM Studio APIのベースURLを指定します(既定値: http://192.168.27.18:1234/v1 )。

  • --timeout : 通信のタイムアウト時間を秒単位(正の数値)で指定します(既定値: 300 )。

  • --max-tokens : 生成される最大トークン数(正の整数)を指定します。これには推論トークンも含まれます(既定値: 2048 )。

  • --show-reasoning : 応答データに reasoning_content (推論過程)が含まれている場合に、それを画面に表示します。

出力仕様

  • モデル一覧取得時: 利用可能なモデルIDが1行ずつ標準出力に出力されます。モデルが1つも存在しない場合は、その旨を示すメッセージが出力されます。

  • チャット実行時:

    • モデルが生成した回答テキスト( content )が標準出力に出力されます。

    • --show-reasoning が指定されており、かつモデルが推論過程を返した場合、回答の前に [reasoning] および [answer] という区切り文字列とともに推論テキストが表示されます。

    • 生成文字数が最大生成トークン数( max_tokens )の上限に達して途中で打ち切られた場合( finish_reason が length の場合)、標準エラー出力に警告メッセージが出力されます。

  • エラー発生時: 接続エラー(タイムアウト等)、HTTPエラー、またはAPI応答データの解釈(JSONパース等)に失敗した場合、標準エラー出力にエラーの詳細が表示され、終了コード 1 でプログラムを終了します。

実行例

サーバー上の利用可能なモデル一覧を取得する場合の実行例です。

python lmstudio_api_sample.py --list

特定のモデルを指定して、短いプロンプトを送信する場合の実行例です。

python lmstudio_api_sample.py --model qwen/qwen3.8-27b --prompt "こんにちは"

ベースURLを変更し、推論過程の表示を有効化したうえで、最大生成トークン数を制限して実行する場合のコマンド例です。

python lmstudio_api_sample.py --model my-local-model --prompt "日本の首都は?" --base-url http://localhost:1234/v1 --max-tokens 1024 --show-reasoning