ChatGPTと同様のUIを提供するOSSであるLibreChatを動かしてみた
3行サマリー
- 自社でゼロから LLM サービスの UI を運用するのは大変なので LibreChat を調査してみます。
- LibreChat をエンタープライズ利用に使えそうかを検証してみました。
- LibreChat + Ollama (Gemma2)を使ってプライベートな LLM サービスを作ってみました。
LibreChatの特徴
一言でいうと、ChatGPT の OSS バージョンです。
カスタマイズ性が高く、ユーザーは自分のニーズに合わせて機能やプラグインを追加できます。

ライセンス
MIT License なので商用利用可能です。
MIT Licenseの特徴
- 自由な使用: MIT License は、ソフトウェアを商業目的、個人使用、教育目的を問わず自由に利用できることを許可します。
- 改変と再配布: ユーザーはソフトウェアを改変し、その改変版を再配布できます。改変版の配布時には、元のライセンスを明示する必要があります。
- 著作権の保持: ソフトウェアの著作権は元の作者に残りますが、ライセンスの下で使用する権利を他のユーザーにも与えます。
- 責任の免除: MIT License には、ソフトウェアが提供される際の「現状有姿」での提供が明記されており、バグや問題に対して作者が責任を負わないことが明示されています。
- シンプルで短い: ライセンス文が非常にシンプルで短く、理解しやすいため、広く採用されています。
ソフトウェアアーキテクチャ
コンポーネント
- フロントエンド: ChatGPT に似たユーザーインタフェースを提供
- バックエンド: 様々な AI モデルとの連携やデータ管理を担当
- データベース:
MongoDBを使用してチャット履歴などのデータを保存
デプロイメントを以下に簡単に図示します。

使用言語とフレームワーク
- フロントエンド: TypeScript (React, Vite)
- バックエンド: Node.js
- データベース: MongoDB
デプロイメント
- Docker サポート: コンテナ化されたデプロイメントが可能
- クラウドデプロイメント: AWS EC2 などのクラウドプラットフォームでのホスティングが可能
- ローカルデプロイメント: オフラインでの完全なローカル実行も可能
人気度
Fork 3k, Start 18k。すごい。

活発度
かなり活発です。
main ブランチに積極的にコミットされてます。安定性より機能の充実を優先しているように見えます。

リリースはまだ v0 系です。

セットアップ
使用感をチェックして見るために動かしてみます。
% git clone [email protected]:danny-avila/LibreChat.git% cd LibreChat% cp .env.example .env% open 'http://localhost:3080/login'ブラウザで開くと以下のような画面が表示されます。

すんなり動きました。
今回はソースコード自体をcloneしていますが、docker-compose.ymlファイルと.envファイルの設定だけで動きます。 docker-compose.ymlからはecrにおいてあるコンテナを取得しています。
ユースケースを試してみる
OpenAIをAPI経由で利用してみる
OpenAIへのAPI接続はLibraChat本体でサポートしているので .env ファイルにOpenAIのAPIキーを追加するだけで使えるようになります。
追加する箇所は170行目あたりです。
❯ diff .env.example .env171c171< OPENAI_API_KEY=user_provided---> OPENAI_API_KEY=sk-proj-xxxxxxxxxxxxxxxxxxxxxxx画面の左上から利用するモデルを選んで、テキストを打ち込みます。 以下の画像のような感じで動作します。UIはChatGPTと同様です。

左側のペインに、チャットの履歴、右側でLLMのパラメータ調整やプロンプトのスニペットを管理できます。
画像を生成してみる
デフォルトでは画像生成をサポートしていません。 画像生成で有名どころのOpenAIのDall-Eを使って見たいと思います。
.envファイルで環境変数にAPIキーを設定します。OpenAI経由で使うのでOpenAIと同じキーを指定します。
❯ diff .env.example .env236,238c236,238< # DALLE_API_KEY=< # DALLE3_API_KEY=< # DALLE2_API_KEY=---> DALLE_API_KEY=sk-proj-xxxxxxxxxxxxxxxxxxxxxxx> # DALLE3_API_KEY=sk-proj-xxxxxxxxxxxxxxxxxxxxxxx> # DALLE2_API_KEY=sk-proj-xxxxxxxxxxxxxxxxxxxxxxxプラグインストアでDall−Eをインストールします。

上部から、Plugins を選択して、LLMを選択肢、DALL−Eをチェックして利用します。

上記で設定は終わりなので試してみましたが、残念ながらうまく生成してくれませんでした。 おそらく、追加で設定が必要のようです。DALL-Eのプラグインの不具合のようです。

自分で立てたollamaを使ってみる
OpenAIといった外部サービスではなく自社で立ち上げているLLMサービスへ接続するケースがあると思うので試してみます。
ollamaはHTTP経由のAPIで利用します。
composeで一気に作りたいので以下を追加しました。
diff --git a/docker-compose.yml b/docker-compose.ymlindex 55686abd..85f2c5dd 100644--- a/docker-compose.yml+++ b/docker-compose.yml@@ -67,6 +67,16 @@ services: - vectordb env_file: - .env+ ollama:+ image: ollama/ollama+ container_name: ollama+ ports:+ - "11434:11434"+ volumes:+ - ollama:/root/.ollama+
volumes: pgdata2:+ ollama:Gemma2の2Bモデルをダウンロードします。
% docker compose exec ollama ollama pull gemma2:2bOllama単体で動作テストをしてみます。
❯ docker compose exec ollama ollama run gemma2:2b>>> 日本の最高峰は?日本の最高峰は **富士山** です! 🗻 どんな情報に関心があるか教えていただければ、より詳細な情報を提供できますよ😊CPUで動かしても即座に返ってきました。
LibreChatがデフォルトでサポートしていないLLMのサービスへ接続するためには、 別途カスタムの設定を記述したYAMLファイルを作成して、LibreChatへパラメータとして指定します。
カスタムファイルのテンプレファイルをコピーします。
% cp ./librechat.example.yaml librechat.yaml以下の設定を108行目辺りの custom セクションに追加します。
❯ diff librechat.example.yaml librechat.yaml108a109,131> - name: "Ollama"> apiKey: "ollama"> baseURL: "http://ollama:11434/v1/chat/completions"> models:> default: [> "llama2",> "gemma2",> "mistral",> "codellama",> "dolphin-mixtral",> "mistral-openorca"> ]> # fetching list of models is supported but the name field must start> # with ollama (case-insensitive), as it does in this example.> fetch: true> titleConvo: true> titleModel: "current_model"> summarize: false> summaryModel: "current_model"> forcePrompt: false> modelDisplayLabel: "Ollama"default セクションでモデル名を指定しています。fetch セクションで true を指定していれば、動的に ollama のサーバから取得するので気にしないで大丈夫です。
利用するモデルを制限する場合に使うとよいです。
上部のメニューから Ollama を選択し、対応するモデルを選べば利用できました。

Dify をワークフローとして使うケースにも対応できるかなと思って調べてみたら、2024 年 5 月に同様の issue が立ってました。 https://github.com/danny-avila/LibreChat/discussions/2830
GoogleのOAuthで認証する
OAuth でログインする設定を簡単に行えます。
オフィシャルサイトの手順に従って Google 側で設定します。丁寧に解説されているのでマニュアル通りに実行すれば終わります。 https://www.librechat.ai/docs/configuration/authentication/OAuth2-OIDC/google
特につまずくこと無く、SSO できました。エンタープライズに導入する際にはとても楽です。

まとめ
- 高いカスタマイズ性とプライバシー保護を提供し、幅広い用途に使えそう。
- 簡単なセットアップ手順と豊富なプラグインサポートにより、個人利用から企業導入まで柔軟に対応できそう。
- DALL-E が動かなかったので今後に期待。