2024 年 4 月 4 日に発表された「Command R+」が GPT-4 とほぼ同じ回答精度で、レスポンスがめちゃくちゃ速く、かつ API の利用が商用利用じゃなければ無料だったので、絶対に LibreChat に組み込みたいと思った。
LibreChat はいわゆる ChatGPT クローンと呼ばれる OSS で、UI は ChatGPT とほぼ同じで、回答に利用する API を GPT4 や Gemini、Claude3 など、自分の好きなものを指定できる。ローカル上で動くのはもちろん、デプロイするのも簡単で、数ある GPT クローンの中では一番使い勝手が良いと思う。UI を忠実に ChatGPT に寄せているのが良い。
今回はこの LibreChat で、Cohere が発表した「Command R+」を動かせるようにする。
ローカルの docker-compose 上だけでなく、デプロイした先でも Command R+が使えるようにするところまでやる。
下記のように AI 選択の箇所で Cohere が選べるようになる。
今回の変更内容は下記。
※僕のリポジトリは他の変更も入っているので、もしご自身でデプロイする際は本家のリポジトリをforkしてやったほうが良いです!
ローカルの docker-compose で動かす手順
まずはローカルの docker-compose 上で動かす方法を説明する。LibreChat のドキュメントや README にやるべきことが書いてあり、やることも少ないので簡単だ。
.env
にCOHERE_API_KEY=xxxxxxxx
を追加librechat.yaml
を作成し、Cohere
の定義を追加するdocker-compose.override.yml
を作成し、volumes の設定を追加
1. .env
にCOHERE_API_KEY=xxxxxxxx
を追加
Cohere のダッシュボードで取得した API_KEY を.env
に記載する。API_KEY は TRIAL のもので OK。
.env
COHERE_API_KEY=xxxxxxxxxxxxxxx
2. librechat.yaml
を作成し、Cohere
の定義を追加する
LibreChat のリポジトリにはlibrechat.example.yaml
が既にあるので、コピーしてlibrechat.yaml
を作成する
cp librechat.example.yaml librechat.yaml
librechat.yaml
を開き、custom
の箇所に下記を追加する
custom: # Groq Example - name: 'groq' apiKey: '${GROQ_API_KEY}' baseURL: 'https://api.groq.com/openai/v1/' models: default: ['llama2-70b-4096', 'mixtral-8x7b-32768', 'gemma-7b-it'] fetch: false titleConvo: true titleModel: 'mixtral-8x7b-32768' modelDisplayLabel: 'groq' + - name: "cohere" + apiKey: "${COHERE_API_KEY}" + baseURL: "https://api.cohere.ai/v1" + models: + default: ["command-r","command-r-plus","command-light","command-light-nightly","command","command-nightly"] + fetch: false + modelDisplayLabel: "cohere" + titleModel: "command" + dropParams: ["stop", "user", "frequency_penalty", "presence_penalty", "temperature", "top_p"]
今回追加した定義はREADMEに書いてある。
3. docker-compose.override.yml
を作成し、volumes の設定を追加
最後に docker-compose.yml に設定を追加する。
docker-compose.override.yml.example
をコピーしdocker-compose.override.yml
を作成。このdocker-compose.override.yml.example
もリポジトリに既に用意されている。
cp docker-compose.override.yml.example docker-compose.override.yml
このdocker-compose.override.yml
に以下を記載(というかコピーした時点で既に記載してあるのでコメントアウトで OK)
version: '3.4' + services: + api: + volumes: + - type: bind + source: ./librechat.yaml + target: /app/librechat.yaml
これで準備は完了。Docker コンテナを立ち上げ直す。
docker-compose up
docker のログで下記のようにcustom config file loaded
と表示されていたら OK!
http://localhost:3080にアクセスし、AI 選択の箇所に Cohere が表示される!
ここでもし選択できない場合、ローカルでnpm run backend
を実行してしまっていないかを確認したい。
自分はこれをやってしまっていて、既にhttp://localhost:3080が npm の方に食われているのに docker を立ち上げ、localhost:3080 にアクセスしても変化がない、と悩んでた。npm で立ち上げた方には今回追加した定義が適用されないので当然であった。
デプロイ先で動かす手順
続いてデプロイ先でも Cohere を選択できるようにする。ローカルでは docker-compose を使っているので上記の設定で OK だが、デプロイ先では Dockerfile を指定して起動していると思うので、そちらでも動くようにする。
ちなみに自分はRender.comにデプロイしている。LibreChat ドキュメント通りにデプロイしたので、Render の設定も特に変えず下記のような感じ。Render じゃなくてもデプロイ先で Dockerfile を指定して起動しているなら今回の対応でいけるはず。
やることは単純で、要はlibrechat.yaml
をDockerfileのbuild時に含められればいい。
手順 1 はローカルと同じ、手順 2 は.env
ではなくデプロイ先で環境変数の設定。手順 3 は.gitignore
と.dockerignore
を修正。
1. `librechat.yaml`を作成し、`Cohere`の定義を追加する 2. デプロイ先に環境変数`COHERE_API_KEY=xxxxxxxx`を追加 3. `.gitignore`と`.dockerignore`から`librechat`の定義をコメントアウト
.gitignore
#config file + # librechat.yaml librechat.yml
.dockerignore
# Specific patterns to ignore data-node meili_data* + # librechat* Dockerfile* docs
デプロイ先で環境変数をセットするのも忘れずに。
これでリポジトリにlibrechat.yaml
を push できるようになり、Dockerfile のビルド時にlibrechat.yaml
を読み込めるようにできた。変更内容をpushし、デプロイ先でRebuildしよう。
終わりに
Command R+はレスポンスがとにかく速い。商用利用でなければ無料というのも正直信じられないし、商用利用したとしても値段が GPT の 1/3 なのが驚き。近い内に自分のやっているサービスにも確実に組み込むと思う。トライアル版の制限はあるが、API呼び出しが月に5000回はOKという太っ腹ぶりなのでそう困ることはないと思う。
また、LibreChat の対応もマジで早くて、Command R Plus が発表されてから 1 日ぐらいで対応されていた。自分が組み込もうと思ったその19 時間前に作られた PRがあって、ハンバねえなと思った。対応の速さの肝は設計にあって、エンドポイントやレスポンスの仕様が異なるサービスであっても、「カスタムエンドポイント」という仕組みを用意しておくことで、いろいろなサービスに柔軟に対応できるようになっている。
LibreChat はコミュニティも活発で、Discord で毎日ワイワイやり取りされているので見ていて楽しい。自分も手元で LibreChat に追加した機能を Discord で共有したらすぐコメントもらえて嬉しかったことがある。
ChatGPT から LibreChat に乗り換えてから 3 ヶ月ぐらい経つが、今のところ不満はないし毎回のアップデートでワクワクさせてくれるので、乗り換えて良かったと思う。