Discourse AI - 埋め込み

:bookmark: このトピックでは、Discourse AI プラグインの Embeddings モジュールの設定について説明します。埋め込み(embeddings)とは何か、どのように使用されるか、そしてそれらをセットアップする方法を解説します。

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

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

埋め込みとは?

埋め込みは、テキストの意味的意味を捉える数値表現です。Discourse では、これらは以下に使用されます。

  1. トピックページの最下部に関連記事を生成する
  2. 意味検索機能(セマンティック検索)を有効にする

埋め込みの設定

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

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

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

セルフホストされている場合は、詳細なセットアップ手順について Discourse AI セルフホストガイド を参照してください。

埋め込み定義の設定

埋め込みモデルは、管理 UI で 埋め込み定義 (Embedding Definitions) として設定されるようになりました。管理AI プラグイン → Embeddings タブに移動します。新しい埋め込み定義を追加する際、事前に設定された プリセット (presets) から選択するか、手動で 1 つを設定できます。

利用可能なプリセットには以下が含まれます。

  • text-embedding-3-large (OpenAI)
  • text-embedding-3-small (OpenAI)
  • text-embedding-ada-002 (OpenAI)
  • gemini-embedding-001 (Google)
  • bge-large-en (Hugging Face)
  • bge-m3 (Hugging Face)
  • multilingual-e5-large (Hugging Face)

各埋め込み定義には、表示名、プロバイダー、URL、APIキー(またはAIシークレット)、トークナイザー、次元数、距離関数、最大シーケンス長、およびオプションの埋め込み/検索プロンプトが含まれます。

埋め込みの設定

管理プラグインDiscourse AI に移動し、以下の設定が有効になっていることを確認します。

  1. ai embeddings enabled: 埋め込みモジュールをオンまたはオフにする
  2. ai embeddings selected model: 埋め込みの生成に使用する埋め込み定義を選択する

調整可能なオプション設定は次のとおりです…

  • AI embeddings generate for pms: プライベートメッセージ(PM)に対して埋め込みを生成するかどうかを決定する
  • AI embeddings semantic related topics enabled: 「関連記事」機能を有効または無効にする
  • AI embeddings semantic related topics: 表示する関連記事の最大数
  • AI embeddings semantic related include closed topics: 閉鎖されたトピックを関連記事の結果に含める
  • AI embeddings semantic related age penalty: 関連記事の結果のトピックに指数関数的な経過時間のペナルティを適用する(0.0 は無効、値が大きいほど古いトピックがより多くペナルティを受ける)
  • AI embeddings semantic related age time scale: 経過時間ペナルティ計算の時間スケール(日数)(デフォルト: 365)
  • AI embeddings semantic search enabled: フルページ AI 検索を有効にする
  • AI embeddings semantic quick search enabled: 検索メニューのポップアップでセマンティック検索オプションを有効にする
  • AI embeddings semantic search use hyde: セマンティック検索のために HyDE(Hypothetical Document Embedding)を有効にする
  • AI embeddings semantic search hyde agent: HyDE が有効な場合に検索語を拡張するために使用される AI エージェント

プロバイダー

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

  • OpenAI
  • Google
  • Hugging Face(オープンソース/オープンウェイトモデルの場合)
  • Cloudflare Workers AI

ホストされているお客様向けに、Discourse はすぐに使用できる事前設定済み(シードされた)埋め込み定義を提供します。

機能

関連記事

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

AI検索

埋め込みは、フルページ検索インターフェイスでのセマンティック検索オプションを強化します。

セマンティック検索では、オプションで HyDE(Hypothetical Document Embedding)を使用できます。ai embeddings semantic search use hyde を介して有効にすると、検索語は ai embeddings semantic search hyde agent で設定された AI エージェントを使用して拡張されます。その後、拡張された検索はベクトルに変換され、類似のトピックを見つけるために使用されます。この手法は検索にわずかな遅延を追加しますが、結果を改善することができます。

HyDE のエージェントを選択する際は、Gemini Flash、Claude Haiku、GPT-4o Mini、または最新の利用可能なモデルなどの高速なモデルを選択してください。

埋め込みの生成

埋め込みは新しい投稿に対して自動的に生成されます。既存のコンテンツに対して埋め込みを生成するには:

  1. Discourse は、5分ごとに実行されるスケジュールされたジョブを通じて、古いトピックの埋め込みを自動的にバックフィルします。
  2. バックフィルは、最近のアクティビティ順にトピックを処理します。

FAQ

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

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

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

追加リソース

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