Ateam Tech Blog

エイチームのエンジニアたちによるテックブログ

社内の生成AIチャットとしてLibreChatを使っています

こんにちは。エイチームライフデザイン技術開発室の鈴木です。

弊社ではGPT-4のような高性能な生成AIを社内の業務で利用できるように、Slack用アプリなどいくつかの社内ツールを用意しています。その中でも LibreChat というオープンソースソフトウェアを利用しているので、それについて説明します。

LibreChatとは

www.librechat.ai

LibreChatとは、いわゆるChatGPTクローンです。 OpenAIなどが提供する言語モデルのAPIに接続してチャットできるUIを提供する、オープンソースのWebアプリケーションです。

LibreChatの画面

LibreChatに類似したAIチャット用Webアプリケーションは他にも色々あり、どれを選択するかは悩みどころのひとつだと考えています。 弊社内でも以前はChatbot-UIを利用していました。しかしGPT-4 Turbo登場当初の新しいモデルへの対応の活発さや、Googleアカウントでの認証が使える事など機能の豊富さを踏まえ、今はLibreChatを使っています。 この選定は、マルチモーダル技術などAIの発展にともなう必要な機能の変化や、AIの普及による現場のニーズの多様化など状況に応じて柔軟に判断していく事が大切だと思っています。

なお、本稿では主にLibreChatのバージョン0.7.0を対象として記述しています。 LibreChatはバージョンアップが日々行われており、現在の最新バージョンでは本稿の内容と異なる場合がある点をご了承下さい。

構成

LibreChat自体はオープンソースのWebアプリケーションであり、実行環境は自分で用意する必要があります。 弊社ではAWS EC2で仮想マシンを1台立てて、git cloneでソースコードを配置し、docker composeで立ち上げるシンプルな構成にしています。詳しい構築手順は公式ドキュメントに記載されているとおりです。 またAWSのセキュリティグループによるアクセス制限と、Googleアカウントによる認証を設定しています。

LibreChatの多くのデータはMongoDBに保存されているため、念のためdumpを取っています。AWS State Managerで1日1回mongodumpを実行してS3にアップロードしています。

LibreChatはAnthropicやGoogle等が提供する様々なLLMに接続できますが、現状弊社ではOpenAIにのみ接続して使っています。環境変数ENDPOINTSOPENAI_MODELSASSISTANTS_MODELSPLUGIN_MODELSで設定しています。

バージョンアップ等の運用

LibreChatのバージョンアップは、公式ドキュメントにも手順がありますが基本的にはgit pullでソースコードを更新してからdocker compose -f deploy-compose.yml pulldocker compose -f deploy-compose.yml buildでコンテナを更新し、コンテナを再起動することで対応しています。必ずダウンタイムが必要になるため、別途社内のSlack部屋で事前にメンテナンスの告知をしてから対応をしています。

なおdeploy-compose.yamlのLibreChatアプリケーションのコンテナは常に:latestを向いていますが、バージョンを固定して使うためコメントアウトされている内容を外して自前でビルドするようにしています。

LibreChatを使っていて起きた問題

弊社でLibreChatを使っていて起きた問題を紹介します。

新しいモデルがなかなか使われない

OpenAIのモデルは日々追加されており、新しいモデルのほうが精度や速度が向上していたり、価格面でも安くなっていたりします。 そのため特別な理由が無ければ新しいモデルを使ってほしいのですが、OpenAIのダッシュボードで利用状況を見ていると、古いモデルを継続的に使われてしまう事がありました。

これに対しては、OPENAI_MODELS環境変数で古いモデルを利用できないようにしました。 このようにLibreChatは設定によって利用モデルを制御できるため、新しいモデルがどんどん出てくる状況でも対応がしやすくなっています。

Banされる

ある日、LibreChatの利用者から「Your account has been temporarily banned due to violations of our service.というメッセージが表示されて使えなくなってしまった」という問い合わせを受けました。 これはLibreChatによるメッセージです。

LibreChatには、単一のIPアドレスからの大量の利用などを検知して一定時間banする機能が実装されています。 しかし社内のネットワークなど大人数でIPアドレスが固定される環境とは相性が良くなく、正常に利用しているのにbanされて利用できなくなってしまう事があります。

banの情報はデフォルトではKeyvでメモリに乗っているため、一時的にはコンテナ再起動で解除できます。 先述の通り弊社のLibreChatではアクセスを社内に制限しているので、アプリケーション側で不正なアクセスを制限する必要は無いと考え、環境変数の設定でBanの設定自体を緩和・無効化しました。

RAGが使えなくなる

LibreChatにはRAG(Retrieval Augmented Generation、検索拡張生成)の機能が搭載されており、PDFなどの文書ファイルをアップロードするとベクトル化して保存し、それを検索した結果をもとに応答できます。 この機能はpgvectorを用いてLibreChat上に構築されております。埋め込みモデルにはデフォルトでOpenAIのtext-embedding-3-smallが使われますが、Generator部分にはどんな言語モデルでもRAGを試す事ができるようになっています。

RAGはドキュメントを検索した結果を言語モデルへのプロンプトに含めるため、一定以上のトークン数を利用します。 LibreChatにはモデルごとにトークン数の設定があり、これを超えると過去の会話履歴は切り捨てられる仕様になっています。 そのため、モデルとの組み合わせによってはRAGしようとしてもRetrieverで取得した部分がまるごと切り捨てられて、検索結果に基づいた応答をしてくれない事があります。 特にバージョン0.7.0まではgpt-3.5-turboのトークン数が4,096と本来よりも小さい値に設定されていたため、gpt-3.5-turboを使うとこの問題が起きやすくなっていました。現在は解消されています。 LibreChatは様々な言語モデルでRAGを試すことができますが、特定のモデルでうまく動かない場合はこの設定を確認してみて下さい。

画像認識が使えない

LibreChatではVision Modelがサポートされており、アップロードされた画像を認識し、その内容に基づいてチャットできるようになっています。 本来、画像認識ができるのはgpt-4-turboなど限られた一部の言語モデルだけですが、LibreChatは画像がアップロードされた時に自動で画像認識に対応したモデルに切り替えてチャットを継続します。この仕様によって、利用者は選択したモデルが画像に対応しているかどうかを意識せずにチャットを利用できます。

GPT-3.5は本来画像を認識できませんが、画像を認識できるモデルに内部的に切り替わります。

LibreChatのバージョン0.6系までは、自動的に特定のVision対応モデルに切り替わっていました。v0.7.0からは、OPENAI_MODELSなどのLibreChatの設定にVision対応モデルが無い場合は、画像を認識できなくなりました。Vision対応モデルの一覧はLibreChatのソースコード内にあるため、新しいモデルが登場した際はLibreChatのバージョンを上げた上で、OPENAI_MODELSなどの設定にモデルを追加する必要があります。

LibreChatの利用状況

弊社のLibreChatではOpenAIのAPIを使っているため、簡易的な利用状況はOpenAIの管理画面のAPI Usageを見ると確認できます。 弊社内にはLibreChat以外にもOpenAI APIを利用したアプリケーションが複数ありますが、LibreChatを導入してから利用が大きく広がったのが確認できました。

先述の通り、LibreChatの会話内容などはMongoDBに保存されています。 月に1回程度、このデータの集計を取って利用状況を確認しています。MongoDBにクエリを流してデータをCSVで取得し、Polarsで自力で集計をしています。集計してみた結果、WAU(Weekly Active User)は200以上を記録しており、様々な業務で幅広く使われている事が分かりました。OpenAIのAPI利用料金についても、LibreChatの利用者全員がChatGPTの有料プランを利用したと仮定した場合と比較して大きく削減できている事が確認できており、費用面でもメリットがあることが分かりました。

まとめ

弊社の生成AIチャットとして利用しているLibreChatを紹介しました。LibreChatの導入により、社内での生成AIの利用が進みました。

一方で、LibreChatは機能追加が活発ですがバージョンアップによって本稿で紹介したような意図しない挙動が増える事もあり、安定した運用には課題を持っています。またLibreChatにはプロンプトの共有のような仕組みは無く、生成AIを活用したノウハウが社内で円滑に共有されるには別の工夫も必要になります。

弊社では今後も、LibreChatに限らず生成AIを用いた様々な業務改善に引き続き取り組んでいきます。

画像の出典