librechatをLMstudioで動かす
LibreChatをLM Studioで動かす 〜モデル自動取得までの設定ガイド〜
「手元のPCで動かしてるLLMを、イケてるUIのLibreChatから使いたい!」
この記事は、そんな願いを叶えるための設定ガイドです。Dockerで動くLibreChatから、ローカルPC上のLM Studioサーバーに接続し、さらにLM Studioで読み込んでいるモデルをLibreChatに自動で認識させる方法を解説します。
設定でちょっとハマったポイントもあったので、その辺りの試行錯誤も含めて共有しますね。
TL;DR (この記事の要点・最終設定)
忙しい方向けに、最終的にこうすればOK!という設定のポイントをまとめます。詳細は各章で!
-
librechat.yaml
のendpoints.custom
にLM Studioの設定を追加:-
name
: 好きな名前 (例:"LMStudio"
) -
baseURL
:- Docker Desktopなら:
http://host.docker.internal:<ポート番号>/v1
- Linuxなど他環境なら:
http://<ホストPCのIPアドレス>:<ポート番号>/v1
-
<ポート番号>
はLM Studioのサーバーポート (デフォルト:1234
)
- Docker Desktopなら:
-
apiKey
:'dummy-key'
など、空でない適当な文字列を設定 (LM Studio自体は不要でもLibreChatが要求) -
models
:-
Workspace: true
を設定 (これでモデルリスト自動取得!) -
default: ['your-favorite-model']
のように、LM Studioで使うモデル名を最低1つ指定する (設定ファイルのバリデーションを通すため)
-
-
titleModel
:models.default
で指定したモデル名のどれかを指定する。
-
docker-compose.override.yaml
でlibrechat.yaml
をマウントするのを忘れずに。
# librechat.yaml の設定例 (LMStudio部分抜粋)
endpoints:
custom:
- name: "LMStudio"
# apiKey: ダミーキーを設定 (空文字はNG)
apiKey: ${LMSTUDIO_API_KEY:-'dummy-key-required-by-librechat'}
# baseURL: 環境に合わせて設定。'/v1' を忘れずに!
baseURL: ${LMSTUDIO_BASE_URL:-'http://host.docker.internal:1234/v1'}
models:
fetch: true # ★モデルリスト自動取得を有効化
# ↓ 最低1つのモデル名を指定 (LM Studioで読み込む予定のモデル名)
default: ['granite-3.3-2b-instruct']
# titleModel: defaultリスト内のモデル名と合わせる
titleModel: 'granite-3.3-2b-instruct'
# ... 必要なら他のオプションも ...
# docker-compose.override.yaml の例
version: '3.8'
services:
api: # LibreChatのAPIサービス名 (環境によって異なるかも)
volumes:
- ./librechat.yaml:/app/librechat.yaml # ローカルのファイルをコンテナにマウント
では、各設定の詳細と、なぜこの設定になったのかを見ていきましょう!
1. 基本設定: LM StudioをLibreChatに教える
結論: まずは、LibreChatの設定ファイル (librechat.yaml
) に「LM Studioっていうエンドポイントがあるよ」と教えてあげる必要があります。そして、その設定ファイルをDockerコンテナから読み込めるように、docker-compose.override.yaml
でマウントします。
手順:
-
librechat.yaml
を用意(なければLibreChatの公式リポジトリなどからテンプレートを取得)し、endpoints.custom:
の下にLM Studio用の設定ブロックを追加します。(設定内容は後述) -
docker-compose.override.yaml
を作成(または編集)し、volumes:
を使ってlibrechat.yaml
をコンテナ内の/app/librechat.yaml
にマウントします。(上のTL;DRの例参照)
なぜこうするの?: LibreChatは起動時に librechat.yaml
を読み込んで、どんなAIモデルエンドポイントが利用可能かを判断します。docker-compose.override.yaml
を使うことで、元の docker-compose.yaml
を変更せずに、設定ファイルだけを差し替えることができます。
baseURL
は /v1
と host.docker.internal
が大事
2. 接続のキモ: 結論: Dockerコンテナ内のLibreChatからホストPCのLM Studioに接続するには、baseURL
の指定が超重要です。
-
Docker Desktop (Mac/Windows) の場合:
http://host.docker.internal:<ポート番号>/v1
-
Linuxなどの場合:
http://<ホストPCのローカルIPアドレス>:<ポート番号>/v1
-
<ポート番号>
はLM Studioを起動した際のサーバーポート(デフォルトは1234
が多い)です。 -
/v1
を絶対に忘れないでください! LM StudioのAPIは/v1
パス以下にあります。
設定したら、以下のコマンドでコンテナからLM Studioにアクセスできるか確認しましょう。モデル情報がJSONで返ってくればOK!
# api は docker-compose.yaml で定義されているLibreChat APIサービス名
docker-compose exec api curl -v http://host.docker.internal:1234/v1/models
# または (Linux等の場合、IPは自身のものに置き換え)
docker-compose exec api curl -v http://192.168.1.10:1234/v1/models
ここに至る経緯 (ハマりポイント):
-
127.0.0.1
の罠: 最初、baseURL
にhttp://127.0.0.1:1234/v1
を指定したら、全く繋がりませんでした。よく考えたら127.0.0.1
はDockerコンテナ自身を指すので当たり前でした😅 -
/v1
忘れ: 次にホストのIPアドレス (http://192.168.1.10:1234
) を指定したのですが、これでもダメ。curl
で叩いてみるとわかるのですが、LM StudioのAPIエンドポイントは/v1
が必要だったんですね。Docker Desktopならhost.docker.internal
という便利な名前でホストPCを参照できるので、これを使うのが楽です。
Workspace: true
) の正しい設定
3. モデルリスト自動取得 (結論: LM Studioで読み込んでいるモデルをLibreChatのUIに自動で反映させたいですよね!それには librechat.yaml
で以下のように設定します。
-
models:
ブロック内でWorkspace: true
を指定します。 -
default: ['any-valid-model-name']
のように、default
キーに モデル名のリストを必ず指定 します。このリストには、実際にLM Studioで使う予定のモデル名を最低1つ入れてください。
この設定により、LibreChatは起動時やモデル選択時にLM Studioの /v1/models
エンドポイントにアクセスし、利用可能なモデルリストを取得してくれます。Workspace: true
の場合、models
ブロック内に個別のモデル定義(model: 'local-model'
など)を書く必要は基本的にありません。
ここに至る経緯 (ハマりポイント):
これが一番ハマったかもしれません...。
-
手動設定はOK: 最初は
Workspace: false
で、default:
に使いたいモデル名を列挙し、各モデルの設定も書く方法で動いていました。でも、モデルを変えるたびにyaml
を編集するのは面倒...。 -
Workspace: true
にしたら消えた!? ドキュメントを参考にWorkspace: true
に変更し、手動でのモデルリスト指定 (default:
や個別定義) を削除したら、LibreChatのUIからLM Studioの項目が消えました😭 ログを見るとInvalid custom config file: models.default: Required
と怒られています。どうやらmodels.default
は必須項目のようです。 -
default: []
(空リスト) でもダメ: じゃあ、必須なら空のリストdefault: []
を指定すればいいのでは?と思って試したところ、今度はInvalid custom config file: models.default: Array must contain at least 1 element(s)
というエラーが...。リストは空じゃダメらしい。 -
解決!: 結局、
Workspace: true
で自動取得する場合でも、models.default
には最低1つ、有効なモデル名を指定しておく必要がある、というのが正解でした。これは設定ファイルのバリデーションルールを満たすため、そしておそらく自動取得に失敗した際のフォールバック用だと思われます。
apiKey
と titleModel
4. 見落としがちな設定: 結論: あと2つ、注意点があります。
-
apiKey
: LM Studio自体はAPIキー不要ですが、LibreChatのカスタムエンドポイント設定ではapiKey
が必須項目になっています。空文字だとエラーになるので、'dummy-key'
や'not-needed'
など、適当な文字列を設定してください。 -
titleModel
: 会話履歴のタイトルを自動生成する際に使われるモデルを指定します。このモデル名は、models.default
リストに含まれているモデル名のいずれかを指定する必要があります。Workspace: true
の場合も、models.default
に書いたモデル名を指定しておきましょう。
# librechat.yaml の設定例 (抜粋)
endpoints:
custom:
- name: "LMStudio"
# apiKey: ダミーでOK!空はダメ!
apiKey: 'dummy-key-required-by-librechat'
baseURL: 'http://host.docker.internal:1234/v1'
models:
fetch: true
default: ['granite-3.3-2b-instruct', 'another-model']
# titleModel: default リスト内のモデル名を指定
titleModel: 'granite-3.3-2b-instruct'
# ...
ここに至る経緯 (ハマりポイント):
-
謎の
Missing API Key
エラー: LM Studioのサーバー設定でAPIキーを要求しないようにしていても、LibreChat側でapiKey
を空にするとMissing API Key for LMStudio.
エラーが出ました。これはLibreChat側の仕様のようで、ダミーのキーを入れることで回避できました。 -
titleModel
の不一致:Workspace: true
にした際、titleModel
を古い設定のままにしていたらエラーになったことがありました。models.default
と連動しているようなので、ここも忘れずに更新しましょう。
5. おまけ: YAMLエラーとの戦い
結論: librechat.yaml
はYAMLファイルなので、インデント(字下げ)が超重要です。インデントがズレていると、LibreChat起動時に ZodError
というスキーマ検証エラーがログに出力されます。
対処法: エラーメッセージの中に path: [ 'endpoints', 'custom', 0, 'models', 'default' ]
のような形で、問題箇所のヒントが示されています。これを頼りに、librechat.yaml
のインデントやスペルミスがないか、よーく確認しましょう。エディタのYAMLリンター機能を使うのもおすすめです。
おわりに
これで、Docker上のLibreChatからローカルのLM Studioを快適に利用できるようになったはずです!特に baseURL
の指定方法と、Workspace: true
を使う際の models.default
の扱いは少し癖がありましたが、一度設定してしまえばモデルの追加・削除も楽になりますね。
この記事が、同じようにLibreChatとLM Studioの連携を目指す方の助けになれば嬉しいです。Happy Chatting!
Discussion