開発実践ガイド

PythonからローカルOpenAI互換APIを呼ぶ最小構成|1リクエストから始める

PythonからローカルOpenAI互換APIを呼ぶ最小構成 — 1リクエストから始める
目次

公式サイトで次に進む

この記事で明示的に扱うソフトだけを表示します。配布・手順は各公式ページで確認してください。

local-gen.jpがファイルを配布するものではなく、互換性を保証するものでもありません。

PythonからローカルLLMを使う最初の目標は、大きなエージェントを作ることではない。

まず、起動済みのローカルサーバーへ一回リクエストを送り、送った内容と返ってきた内容を自分で追える状態にする

ここではLM StudioのOpenAI互換APIを例にする。別の接続先へ変えるときは、URLや対応機能をあらためて確認する。

Pythonを書く前にサーバーとモデルを固定する

LM Studioで使用するモデルを読み込み、ローカルサーバーを起動する。

まず次を記録する。

接続先: LM Studio
接続先URL: 自分のサーバーURL
モデルID: APIから見えるID
認証: 有効 / 無効

Pythonを書く前にcurlで一回応答を確認できるなら、ネットワークやサーバー自体の問題を先に除外できる。

接続設定をコードへ明示する

OpenAI向けのPythonライブラリを使う場合でも、接続先を明示する。

ローカルへ送るつもりの処理が、設定不足でクラウド側の既定接続先へ送られないようにするためだ。

最小例は次のようになる。

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:PORT/v1",
    api_key="local-placeholder",
    timeout=60.0,
)

response = client.chat.completions.create(
    model="YOUR_MODEL_ID",
    messages=[
        {"role": "user", "content": "1文で自己紹介して"}
    ],
)

print(response.choices[0].message.content)

PORTYOUR_MODEL_ID、認証情報は例の文字列をそのまま使わず、自分のLM Studioで確認した値へ置き換える。

APIキーは接続先の認証設定に合わせる

クライアントライブラリによっては、api_keyの指定が形式上必要になる場合がある。

接続先が認証を行っていない構成ではダミー値で動く場合がある一方、LM Studio側で認証を有効にしているなら正しい認証情報が必要になる。

そのため、「localhostならAPIキーは必ず不要」「適当な文字列なら常に使える」と一般化しない。

タイムアウトを明示する

ローカル推論では、モデル読み込み、長い入力、CPUへのオフロードなどによって応答開始までの時間が変わる。

最初から無期限に待つ構成にすると、サーバーが止まっているのか、推論が続いているのか判断しにくい。

まず短い入力で成功する条件を作り、必要に応じてtimeoutを調整する。

エラーは順番に切り分ける

失敗した場合は、次の順で確認する。

  1. 接続先URLへ到達できるか
  2. 認証エラーではないか
  3. 指定したモデルIDが存在するか
  4. 送ったJSONやAPI形式を接続先が扱えるか
  5. モデル読み込みや推論自体でエラーになっていないか

ライブラリ、モデル、ポート、サーバー設定を一度に全部変えない。

一回成功したら再現条件を保存する

最初のリクエストが通ったら、少なくとも次を残す。

Pythonのバージョン:
openaiパッケージのバージョン:
LM Studioのバージョン:
モデルID:
接続先URL:
認証の有無:
動いた最小コード:

OpenAI互換APIは便利な共通面だが、接続先の全機能を完全に同一にする契約ではない。

一回のリクエストを再現できる状態を作ってから、ストリーミング、構造化出力、ツール呼び出しへ一つずつ広げると問題を切り分けやすい。

互換APIごとの差は、OpenAI互換APIとは?LM Studio・Ollama・llama.cppで違う部分で整理している。

まとめ

  • 最初はlocalhost上の一つの接続先と一つのモデルだけを対象にする
  • `base_url`、モデルID、`api_key`、`timeout`をコード上で明示する
  • OpenAI互換でも、接続先固有のすべての機能が同一とは限らない
  • 一回成功したら、ストリーミングやツール呼び出しへ広げる前にエラー条件とバージョンを記録する
同じテーマから

この記事で扱ったデータ

モデル・GPU・実行ソフトの確認済みデータを、記事とは別に確かめられます。

サイト内検索