Discourse AI - 埋め込み

:bookmark: このトピックでは、Discourse AI プラグインの Embeddings モジュールの設定について説明します。Embeddings とは何か、どのように使用されるか、そしてどのように設定するかを説明します。

:person_raising_hand: 必要なユーザーレベル: 管理者

Embeddings は Discourse AI プラグインの重要なコンポーネントであり、関連トピックAI 検索 などの機能を可能にします。このガイドでは、Discourse インスタンスでの Embeddings の設定と使用方法について説明します。

Embeddings とは?

Embeddings は、意味的な意味を捉えたテキストの数値表現です。Discourse では、次の目的で使用されます。

  1. トピックページの最下部に、関連トピックを生成する
  2. セマンティック検索機能を提供する

Embeddings の設定

ホストされている顧客の場合

ホストされている顧客の場合、Embeddings は事前に設定されています。それらに依存する AI 機能を有効にするだけです。

セルフホストインスタンスの場合

セルフホストしている場合は、Discourse AI セルフホストガイド を参照して、詳細な設定手順を確認してください。

Embeddings の設定

管理設定Discourse AI に移動し、次の設定が有効になっていることを確認してください。

  1. ai embeddings enabled: Embeddings モジュールをオンまたはオフにする
  2. ai embeddings selected model: Embeddings の生成に使用するモデルを選択する

オプションの設定で調整できる項目…

  • AI embeddings generate for pms: プライベートメッセージの Embeddings を生成するかどうかを決定する
  • AI embeddings semantic related topics enabled: 「関連トピック」機能を有効または無効にする
  • AI embeddings semantic related topics: 表示される関連トピックの最大数
  • AI embeddings semantic related include closed topics: AI 検索結果にクローズされたトピックを含める
  • AI embeddings semantic search enabled: 全ページ AI 検索を有効にする
  • AI embeddings semantic search hyde model: セマンティック検索中にキーワードを拡張してより良い結果を得るために使用されるモデル

プロバイダー

管理設定内で、AI プラグイン → Embeddings タブに移動して、API キーなどのプロバイダー関連の設定を行います。

Discourse AI は複数の Embeddings プロバイダーをサポートしています。

  • Discourse ホスト Embeddings(推奨およびデフォルト
  • OpenAI
  • Google
  • Hugging Face を介したオープンソースモデル
  • カスタムオプション

機能

関連トピック

有効にすると、トピックページの最下部に「関連トピック」セクションが表示され、意味的に類似したディスカッションへのリンクが示されます。

AI 検索

Embeddings は、全ページ検索インターフェースのセマンティック検索オプションの基盤となります。

セマンティック検索は HyDE(Hypothetical Document Embedding)に依存します。提供された大規模言語モデルを使用して検索語句を拡張します。拡張後、拡張された検索をベクトルに変換し、類似するトピックを探します。この手法は検索に若干の遅延を追加しますが、結果を改善します。

ai embeddings semantic search hyde model を介して hyde 用のモデルを選択する際は、Gemini Flash、Claude Haiku、GPT4o Mini、または最新の利用可能なモデルのような高速なモデルを選択してください。

Embeddings の生成

新しい投稿の Embeddings は自動的に生成されます。既存のコンテンツの Embeddings を生成するには:

  1. Embeddings が存在しない場合、ページが表示されるときに作成されます。
  2. Discourse は古いトピックの Embeddings を自動的にバックフィルします。

FAQ

Q: 関連トピックはどのように決定されますか?
A: 関連トピックは、タイトル、カテゴリ、タグ、投稿コンテンツを含む Embeddings にのみ基づいています。

Q: 特定のトピックを関連トピックから除外できますか?
A: はい、クローズされたトピックを結果から削除するサイト設定があります。

Q: Embeddings は過去の投稿でも機能しますか?
A: はい、システムはすべてのコンテンツの Embeddings を自動的にバックフィルします。

追加リソース

「いいね!」 17

素晴らしい、まずはお礼を申し上げます。しかし、トピックの下に類似トピックが表示されません。設定は以下のようになっています。OpenAIキーを追加しました。セマンティック検索は機能しますが、トピックの下に類似記事を表示するにはどうすればよいですか?

OpenAIを埋め込みに使用する場合は、ai embeddings modeltext-embedding-ada-002に設定する必要があります。

「いいね!」 3

埋め込みを生成するジョブはどのようにスケジュールされていますか? コードを見ると、ページが表示され、埋め込みが存在しない場合にのみ埋め込みが生成されるようです。機能をオンにしたときにサイト全体の埋め込みを生成する方法はありますか?

「いいね!」 2

すべてのトピックの埋め込みを積極的に生成するには、rake ai:embeddings:backfill を実行することもできます。

「いいね!」 8

提案

トピックを読んでいると、背景知識のほとんどは知っていても、知らない言及がいくつかある場合があります。これまでのトピック全体を要約する要約機能はありますが、トピックの冒頭近くに用語集を挿入し、ユーザーが用語集に含めたい単語やフレーズを選択した場合に更新するAIオプションもあると役立つでしょう。


今日、このトピックを読んでいたところ、認識できない参照が1つあったので、調べて返信で参照を追加しました。残りの参照はわかっていますが、特にLLMなどに慣れていない人にとっては、多くの参照がわからないことでしょう。AIが助けてくれれば、もっと頻繁にサイトを訪れるでしょう。

この最初の投稿でRAGの意味はわかっていますが、どれだけの人が本当に知っているでしょうか?

[詳細「RAGとは(三角形をクリックして展開)」]

ドメイン固有のチャットボットはどのように機能しますか?Retrieval Augmented Generation(RAG)の概要

[/詳細]


注:どこに投稿すべきかわからなかったのですが、動作に埋め込みが必要だったのでここに投稿しました。より適切な場所があれば移動してください。Discourse AIプラグインの変更に伴い、必要に応じて移動してください。

「いいね!」 1

「関連トピック」を決定する際に、埋め込み(embeddings)だけが唯一の変数ですか?それとも、著者、トピックスコア、トピックの年齢、カテゴリなどの他の要因も考慮されますか?

「いいね!」 3

埋め込みのみですが、それらにはタイトル、カテゴリ、タグ、投稿が含まれています。結果からクローズされたトピックを削除するサイト設定もあります。

「いいね!」 5

7件の投稿が新しいトピックに分割されました: フルページセマンティック検索は英語のみですか?

2件の投稿が新しいトピックに分割されました: AIセマンティック検索とキーワード検索の検索レイテンシの違い

数ヶ月前にこれを見つけられたらよかったのに。すでに bge-small-en-v1.5 を使用して埋め込みを作成し、外部データベースにホストしています。

これが「標準」のセットアップに押し込めるかどうか見てみます!

最近のバージョンで rake ai:embeddings:backfill が失敗する小さなバグを見つけました。

root@nbg-webxj:/var/www/discourse# rake ai:embeddings:backfill
rake aborted!
NameError: uninitialized constant Parallel (NameError)

  Parallel.each(topics.all, in_processes: args[:concurrency].to_i, progress: "Topics") do |t|
  ^^^^^^
/var/www/discourse/plugins/discourse-ai/lib/tasks/modules/embeddings/database.rake:27:in `block in <main>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => ai:embeddings:backfill
(See full trace by running task with --trace)

原因は、parallel gem がこのプラグインにも、Discourse コアにもインストールされていないことだと推測しています(if ENV["IMPORT"] == "1" ブロックで gem "parallel", require: false を見つけただけです)。

rake ai:embeddings:backfill を実行するために ruby-progressbar gem も必要であることがわかりました。

GitHub に簡単な PR を作成しました。

「いいね!」 2

GitHubのFalco氏によると、このrakeメソッドは降格/半非推奨になったようです。他の人に注意してください。

PRありがとうございます @fokx。しかし、rakeタスクはあまり使われなくなり、経験豊富なオペレーターが簡単に帯域外でインストールできる場合にのみ、まれに使用されるべきなので、意図せずにそれらを除外しました。

セマンティック検索オプションは、そのドロップダウンに表示されなくなり、代わりにAIトグルを通じて認識または有効化されるのでしょうか?

「いいね!」 1

埋め込みがインストール後の投稿にのみ機能するのか、それとも過去の投稿全体をセマンティック検索できるようになるのか、確認していただけますか? 後者であることを願っています! よろしくお願いします。

「いいね!」 1

後者の方が、すべてのコンテンツの埋め込みが自動的にバックフィルされるためです。

「いいね!」 4

Gemini Flash を使用して AI Embeddings を設定しようとしていますが、うまくいきません。すべての設定フィールドに関する適切な説明や例が見つからないため、重要ないくつかのフィールドを見落としている可能性があります。「ai_embeddings_model」設定が必要かどうかはわかりませんが、それを「gemini」に設定すると、次のエラーが発生します…

「ai_gemini_api_key」設定を見つけることができませんでした。Gemini Flash は API キーを持つ LLM としてセットアップされており、それは他の場所(例:要約)で機能していますが、これは API キーを別の場所に入力することを求めていると仮定していますか?

これは OpenAI でも機能すると思いますが、どうでしょうか?

彼らの Batch API (50%割引) をサポートできれば素晴らしいでしょう。

はい、しかし現在ではバックグラウンドで自動的にバックフィルされるため、これは必須ではありません。

価格を重視する方のために、自社ハードウェアで実行できる優れたオープンウェイトモデルをサポートしています。

「いいね!」 1

ありがとうございます。バックフィルとは、ベクトル化が行われることだと理解してよろしいでしょうか?モデルを切り替える際に、ベクトルを再計算する必要はありますか(「独自」のものですか)?そうだと仮定します。

OpenAI APIを利用するコストと、GPU搭載サーバーにオープンソースソリューションを投資するコストを比較する方法を知っておくと役立ちます。トークン使用量を推定する方法や式はありますか?投稿のベクトル化のみにAPIを使用しており、ベクトル距離の計算には使用していないということでよろしいでしょうか?したがって、使用されるトークン数はコンテンツの量に依存するということですね。

関連トピックとAI搭載検索の両方について、すべての投稿は一度だけベクトル化する必要があるため、投稿テーブルの総単語数を計算して必要なトークン数を導き出すことができると仮定します。毎日投稿を追加する場合も同様のプロセスが適用されます。検索フレーズは今は考慮していません。