ChatGPTと同様のUIを提供するOSSであるLibreChatを動かしてみた
3行サマリー
- 自社でゼロからLLMサービスのUIを運用するのは大変なのでLibreChatを調査してみます。
- LibreChatをエンタープライズ利用に使えそうかを検証してみました。
- LibreChat + Ollama (Gemma2)を使ってプライベートなLLMサービスを作ってみました。
LibreChatの特徴
一言でいうと、ChatGPTのOSSバージョンです。
カスタマイズ性が高く、ユーザーは自分のニーズに合わせて機能やプラグインを追加できます。
ライセンス
MIT Licenseなので商用利用可能です。
ソフトウェアアーキテクチャ
コンポーネント
- フロントエンド: ChatGPTに似たユーザーインターフェースを提供
- バックエンド: 様々なAIモデルとの連携やデータ管理を担当
- データベース:
MongoDB
を使用してチャット履歴などのデータを保存
デプロイメントを以下に簡単に図示します。
使用言語とフレームワーク
- フロントエンド: TypeScript (React.js, Vite)
- バックエンド: Node.js
- データベース: MongoDB
デプロイメント
- Dockerサポート: コンテナ化されたデプロイメントが可能
- クラウドデプロイメント: AWS EC2などのクラウドプラットフォームでのホスティングが可能
- ローカルデプロイメント: オフラインでの完全なローカル実行も可能
人気度
Fork 3k, Start 18k。すごい。
活発度
かなり活発です。
main
ブランチに積極的にコミットされてます。安定性より機能の充実を優先しているように見えます。
リリースはまだv0系です。
セットアップ
使用感をチェックして見るために動かしてみます。
% git clone git@github.com: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 .env
171c171
< OPENAI_API_KEY=user_provided
---
> OPENAI_API_KEY=sk-proj-xxxxxxxxxxxxxxxxxxxxxxx
画面の左上から利用するモデルを選んで、テキストを打ち込みます。
以下の画像のような感じで動作します。UIはChatGPTと同様です。
左側のペインに、チャットの履歴、右側でLLMのパラメータ調整やプロンプトのスニペットを管理できます。
画像を生成してみる
デフォルトでは画像生成をサポートしていません。
画像生成で有名どころのOpenAIのDall-Eを使って見たいと思います。
.envファイルで環境変数にAPIキーを設定します。OpenAI経由で使うのでOpenAIと同じキーを指定します。
❯ diff .env.example .env
236,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.yml
index 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:2b
Ollama単体で動作テストをしてみます。
❯ 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.yaml
108a109,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が立ってました。
GoogleのOAuthで認証する
OAuthでログインする設定を簡単に行えます。
オフィシャルサイトの手順に従ってGoogle側で設定を行います。丁寧に解説されているのでマニュアル通りに実行すれば終わります。
特につまずくこと無く、SSOできました。エンタープライズに導入する際にはとても楽です。
まとめ
- 高いカスタマイズ性とプライバシー保護を提供し、幅広い用途に使えそう。
- 簡単なセットアップ手順と豊富なプラグインサポートにより、個人利用から企業導入まで柔軟に対応できそう。
- DALL-Eが動かなかったので今後に期待。
Discussion