Discourse AIプラグインには、関連トピック、AI検索、AIヘルパーカテゴリおよびタグの提案など、埋め込み(embeddings)を必要とする多くの機能があります。サードパーティのAPI(OpenAIのAPIキーを設定する、Cloudflare Workers AIのAPIキーを設定するやGoogle GeminiのAPIキーを設定するなど)を使用できますが、Discourse AIは初日からそれらにロックインされないように構築されています。
HuggingFace TEIで実行する
HuggingFaceは、すぐに実行を開始できる素晴らしいコンテナイメージを提供しています。
例えば:
mkdir -p /opt/tei-cache
docker run --rm --gpus all --shm-size 1g -p 8081:80 \
-v /opt/tei-cache:/data \
ghcr.io/huggingface/text-embeddings-inference:latest \
--model-id BAAI/bge-large-en-v1.5
これにより、非常に高いパフォーマンスを発揮するオープンソースモデルであるBAAI/bge-large-en-v1.5のローカルインスタンスをすぐに利用できるようになります。
動作確認は以下でできます。
curl -X POST \
'http://localhost:8081/embed' \
-H 'Content-Type: application/json' \
-d '{ "inputs": "Testing string for embeddings" }'
通常動作していれば、浮動小数点数の配列が返されるはずです。
Discourseインスタンスで利用可能にする
多くの場合、GPUによる高速化のため、専用サーバー上でこれを実行することになります。その際、リバースプロキシを実行し、TLS終端を行い、Discourseインスタンスのみが接続できるようにエンドポイントを保護することを推奨します。
DiscourseAIの設定
Discourse AIは現在、LLMの設定方法と似た、完全に設定可能な埋め込み定義システムを使用しています。自己ホスト型エンドポイントを設定するには:
- 管理者 → プラグイン → Discourse AI → 埋め込み (Embeddings) に移動します。
- 新規 (New) をクリックして、新しい埋め込み定義を作成します。
- モデルに合ったプリセット (preset) を選択します(例:
bge-large-en、bge-m3、または multilingual-e5-large)。または、その他のモデルの場合は手動で設定 (Configure manually) を選択します。
- URL を自己ホスト型TEIサーバーを指すように設定します(例:
https://your-tei-server:8081)。
- テスト (Test) ボタンを使用して、保存する前に接続を確認します。
- 保存後、
ai_embeddings_selected_model を新しい埋め込み定義に設定します。
設定が完了すると、Discourseはバックグラウンドのスケジュール済みジョブを通じて、既存のトピックの埋め込みを自動的にバックフィル(再作成)します。バックログが大きい場合は、非表示設定の ai_embeddings_backfill_batch_size(デフォルト: 250)を増やすことで、トピックの処理を高速化できます。
「いいね!」 11
bge-m3 モデルは多言語(または英語以外の)サイトでも機能しますか?
Falco
(Falco)
3
はい、GitHubでサイレントに共有された週にそれを試しましたが、うまく機能しました。最後に確認したときにはMTEBリーダーボードに載っていなかったので、どのようにランクインするかまだ待っています。
とはいえ、多言語プラグインが出荷された大規模なホスト型Discourseインスタンスでe5を使用しており、非常にうまく機能しています。
「いいね!」 1
埋め込み用のオープンソースカスタムエンドポイントを有効にする予定はありますか? Huggingfaceでこれらのモデルを使用しようとしています。
Falco
(Falco)
5
申し訳ありませんが、何を伝えようとしているのか理解できません。このトピックは、Discourse AI の埋め込み用にオープンソースモデルを実行する方法に関するガイドです。
ああ、すみません。HuggingFace のカスタムエンドポイントからオープンソースモデルを使用しようとしていますが、それが可能かどうか、または近い将来に有効にする予定があるかどうか疑問に思っています 
fokx
7
動作を確認するには、次のコマンドが機能します(BAAI/bge-m3 モデルを使用)。
curl -X 'POST' \
'http://localhost:8081/embed' \
-H 'Content-Type: application/json' \
-d '{ "inputs": "Testing string for embeddings"}'
ちなみに、Swagger Web インターフェイス(http://localhost:8081/docs/)も使用できます。
「いいね!」 2
Isambard
(Isambard)
9
容量を節約するために、量子化された埋め込みを使用することは可能ですか?ストレージサイズを大幅に削減するために、バイナリ量子化された埋め込みを使用したいと思います。いくつかのテストを行ったところ、ストレージサイズが32分の1で90%以上のパフォーマンスが得られました!
「いいね!」 1
Falco
(Falco)
10
数週間前からデフォルトで、埋め込みを半精度(ストレージスペース半減)で保存し、インデックスにバイナリ量子化(32倍縮小)を使用しているため、サイトを最新の状態に更新するだけで、ディスク使用量を大幅に削減できます。
「いいね!」 3
Isambard
(Isambard)
11
サポートされている埋め込みモデルに以下を追加していただけますでしょうか。
Falco
(Falco)
12
埋め込みもLLMと同じように設定可能にする予定ですので、まもなくどのモデルでも互換性を持つようになります。
「いいね!」 4
Isambard
(Isambard)
13
ローカルネットワーク上のエンドポイント(例:192.168.x.x)で問題が発生している場合は、Discourseによってブロックされているようです(おそらくセキュリティ上の理由から)。このブロックを回避する必要があります。この問題の解決に数時間費やしました!
「いいね!」 1
Isambard
(Isambard)
14
@Falco それは素晴らしいでしょう。それまでの間、新しい埋め込みモデルを追加したい場合、追加する必要があるのは次のとおりですか?
lib/embeddings/vector_representations/mxbai-embed-xsmall-v1.rb
lib/tokenizer/mxbai-embed-xsmall-v1.rb
tokenizers/mxbai-embed-xsmall-v1.json
そして、新しいモデルを含めるように lib/embeddings/vector_representations/base.rb を変更する必要がありますか、それとも他に何か変更する必要がありますか?
Isambard
(Isambard)
15
@Falco モデルを追加しようとプルリクエストを送信しました。SW開発者ではないので、何か間違っていたら申し訳ありません。確認して、含めるのに問題ないか見ていただけますでしょうか。
残念ながら、TEIで動作させることはできませんでした。all-mpnetはTEIで動作させることができましたが、mxbaiを動作させるために行ったことには何か問題があると思います。
ところで、https://github.com/michaelfeil/infinity を埋め込みサーバーとしてサポートする可能性はありますか?
編集:HNSWインデックスがデータベースにハードコードされているようで、順序を乱さないように新しいモデルは最後に追加する必要があり、各新しいモデルは独自のインデックスを追加する必要があるため、これは乱雑になりそうです。
Falco
(Falco)
16
Isambard
(Isambard)
17
TEIについては最近まで把握していなかったので、最近テストしていない利点については言及しませんが、最近見たものの中では以下の点が挙げられます。
- ハードウェアサポート:infinityはTEIよりも優れたGPUサポートを提供します。
- infinityサーバーは、単一のサーバーで複数の埋め込みモデルをホストできます(TEIで見落とした場合を除く)。
これは非常に素晴らしいです。試したことがない場合は、ぜひ見てみてください!
「いいね!」 1
sam
(Sam Saffron)
19
こんにちは、Michaelさん 
@roman が、以下の場所でエンベディング設定の再構築に取り組んでいます。
それが完了すれば、infinity のサポートを追加するのは非常に簡単になるはずです。
マルチモデルエンベディングについては、PDF で RAG を実行しようとする際に、PDF を画像に処理し、各画像をエンベッドすることで、OCR や高価な LLM による画像からテキストへの変換を回避できるため、ショートカットになると思っています。
この PR が完了したら、エンベディング設定に infinity サポート(およびマルチモデルサポート)を追加できることを嬉しく思います。
お立ち寄りいただきありがとうございます 
「いいね!」 4
Isambard
(Isambard)
20
litellm のサポートを構築することで、litellm を介してサポートされているすべてのモデルの恩恵を受けることができる近道になるのではないかと思います。他のプロジェクトでもこれを組み込んでいるようです。