Discourse AI - スパム検出

:bookmark: このガイドでは、Discourse AI のスパム検出機能の設定と使用方法について説明します。セットアッププロセス、スキャン基準、分類ロジック、カスタマイズ、AI トリアージとの比較を含みます。

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

:megaphone: この機能は、Starter および Pro のお客様 および従来の Basic、Open Source、Creator、Business のお客様向けに、デフォルトでオンになっています。

Discourse AI は、最小限の設定でスパム投稿を識別してフラグを立てる効率的なスパム検出機能を提供します。シンプルさを追求して設計されていますが、より広範なワークフローと大規模なユースケースをサポートする、より汎用性の高い AI トリアージシステムを補完します。

まとめ

このガイドでは、以下の項目について学習します。

  • AI スパム検出の仕組みとスキャンされるコンテンツ
  • AI が使用する分類ロジックとコンテキスト
  • /admin/plugins/discourse-ai/ai-spam を介したスパム検出の設定手順
  • 大規模言語モデル (LLM) の選択に関するガイドライン
  • スパム検出と AI トリアージの主な違い
  • フラグが付けられた投稿と見逃された投稿の管理方法

AI スパム検出の仕組み

どのコンテンツがスキャンされますか?

AI スパム検出は、次の基準に基づいて投稿を評価します。

  1. ユーザー信頼レベル:

    • 信頼レベル 1 以下のユーザーからの投稿をスキャンします。
    • より高い信頼レベルからの投稿は除外されます。
  2. 投稿タイプ:

    • 公開投稿(プライベートメッセージを除く)。
    • 追加のしきい値に基づいて、返信投稿と最初のトピック投稿の両方が含まれます。
  3. 投稿の編集:

    • 大幅な編集があった投稿をスキャンします(例: 10 文字を超える変更)。
    • 同じ投稿のスキャン間には10 分の遅延を適用します。
  4. 投稿頻度:

    • 公開トピックでの投稿数が合計4 件未満の新規ユーザーからの投稿を優先します。
    • このしきい値を超えるユーザーからの投稿は除外されます。

分類プロセス

基準を満たした投稿は、分析のために AI モデル (LLM) に送信されます。モデルは、次の情報に基づいて、投稿が「SPAM」か「NOT SPAM」かを評価します。

  • コンテキスト: 投稿コンテンツ、トピックタイトル、ユーザーアカウントデータ(アカウントの年齢や信頼レベルなど)、サイトガイドラインが含まれます。
  • カスタム指示: スキャン基準の強化または適応のための管理者定義ルール。
  • 自動検出:
    • 無関係または宣伝的なコンテンツ(広告や商業資料など)にフラグを付けます。
    • 自動またはボットのような動作を識別します。
    • ディスカッションへのコンテンツの関連性を評価します。

デフォルトのプロンプトとコンテキスト

AI は、スパム検出をガイドするためにデフォルトのシステムプロンプトを使用します。このプロンプトは、スパム分類ルールを概説します。例:

あなたはスパム検出システムです。以下のコンテンツとコンテキストを分析してください。
注意事項:
- 返信はディスカッションスレッドに関連している必要があります。
- コンテンツが無関係、宣伝的、または自動化されている場合は SPAM としてマークしてください。
- リンクを含む新規ユーザーの投稿は、トピックに明示的に関連していない限り、潜在的な SPAM と見なしてください。
「SPAM」または「NOT SPAM」のみで応答してください。

スキャナーは、次の情報を含むコンテキストパッケージもコンパイルします。

  • トピックとカテゴリからのメタデータ。
  • スレッドへの返信の関連性。
  • 作成者データ(アカウント作成日、投稿数、信頼レベルなど)。
  • 処理のために5000 文字に切り詰められた投稿テキスト。

AI スパム検出の設定

設定ガイド

  1. 設定にアクセス:
    /admin/plugins/discourse-ai/ai-spam に移動します。

  2. LLM を選択:

:information_source: サイトが Discourse によってホストされている場合

LLM リストから CDCK ホスト済み小型 LLM を選択できます。

  • フォーラムのニーズに適した言語モデルを選択します。LLM の設定については、大規模言語モデル (LLM) 設定ページを参照してください。
  • LLM の設定には /admin/plugins/discourse-ai/ai-llms にアクセスします。
  1. スパム検出を有効化:
    機能をオンに切り替えて、スパム検出を有効にします。

:information_source: 注意: 接続された LLM が必須です。

  1. カスタム指示を追加:
    • フォーラム固有のルールを定義します(例: 外部リンクの監視を強化する)。
    • 変更を保存して適用します。

AI トリアージとの違い

スパム検出はスパムの識別専用に設計されていますが、AI トリアージはより広範な投稿管理タスクをサポートします。

機能 AI スパム検出 AI トリアージ
複雑さ 合理化された、意見に基づいたセットアップ 高度にカスタマイズ可能で柔軟
主なユースケース 最小限のオーバーヘッドでスパムを検出 分類、タグ付け、返信、スパム検出、NSFW 検出のための高度なワークフロー
アクション スパムにフラグを立て、ユーザーをミュートする タグ付け、分類、投稿の非表示、返信の追加、投稿へのフラグ付け、ユーザーのミュート
推奨事項 簡単なセットアップで、ほとんどの状況で効果的 豊富で高度にカスタマイズ可能なワークフローに使用

詳細については、Discourse AI - AI トリアージを参照してください。


LLM 選択の推奨事項

スパム検出のパフォーマンスは、選択した LLM によって異なります。

以下のような、ほとんどの低コスト LLM が効果的に機能します。

  • GPT-4o-mini
  • Claude 3.5 Haiku
  • Gemini 2.0 Flash

さまざまなモデルを試して、最適なものを見つけてください。モデルは /admin/plugins/discourse-ai/ai-llms から設定できます。


スキャンエンジンの動作のテスト

設定ページから直接スパム検出ルールをテストできます。

  • 投稿の URL または ID をテストフィールドに貼り付けます。
  • 分類結果(例: 「SPAM」または「NOT SPAM」)を確認し、ログを分析して理由を理解します。
  • 未保存の変更はテスト中に適用されるため、リスクなしで実験できます。

フラグが付けられた投稿と見逃されたスパムの管理

フラグが付けられた投稿の処理

フラグが付けられた投稿は、モデレーションキューに表示されます。管理者は次のことができます。

  • スパムとして誤って分類された正当な投稿を承認します。
  • システムの正確性を維持するために、スパムトピックを拒否します。

:warning: 重要: 誤って分類された投稿のスパムフラグは拒否してください。フラグが解決されるまで、ユーザーはミュートされたままになります。

見逃されたスパムの処理

見逃されたスパムとは、検出を回避したがコミュニティによってフラグが付けられた投稿を指します。モデレーターは必要に応じてこれらを管理できます。


ベストプラクティス

  • フラグが付けられたスパムと見逃されたスパムを定期的に監視して、システムの精度を向上させます。クリック可能なメトリクスにより、このプロセスが簡素化されます。
  • テストケースを使用して、カスタム指示をエッジケースに対して評価します。
  • 必要に応じて LLM 設定を確認および調整します。

追加リソース


:mega: AI スパム検出を効果的に設定することで、手動モデレーションの労力を削減し、クリーンでスパムのないコミュニティを確保できます。

「いいね!」 16

これをかなりテストしましたが、信頼できる結果はまったく得られませんでした。参考までに、gpt-4o モデルを使用しています。

精度をテストするために、次の簡単な指示を与えました。

あなたはスパム検出システムです。以下のコンテンツとコンテキストを分析してください。
以下のメモを参照してください。以下の項目のいずれか一つでも真実であれば、スパムとしてマークしてください。
- ユーザー名が具体的に「testjon」である場合、それは*常に*スパムです。
- 「SPAM - It's Jon!」または「NOT SPAM」のみで応答してください。

ユーザー名 testjon で投稿をテストした結果は NOT SPAM でした。指示がまったく守られていないようです。何か提案はありますか?

AIスパム検出に関して、他に良い経験や悪い経験をした人はいますか?

この状況がどうなっているのかは分かりませんが、一般的に引用されているような文は壊れやすいです。ANY が何を意味するのか理解せず、そのまま進んでしまいます。そこから最終的に NOT SPAM を見つけます。

「いいね!」 1

つまり、「ANY」の太字を削除するということですか?それとも、「次のアイテムがある場合」の全体の表現を指しているのですか?

もっと論理的かつ正確に書く必要があります。AIにどのような方法でも選択させることはできません。AIは数えられず、まずすべてを読んでから戻ってきて論理的に作業しようとすることは絶対にできません。指示を出すように、非常にシンプルに説明してください。例は間違っていませんが、トークンの使用量が増加します。

「いいね!」 1

これは素晴らしい情報です。例えば、この全く同じシナリオをどのように違う書き方で表現できますか?

「いいね!」 1

以下のような…

あなたはスパム検出システムです。あなたの仕事は、このフォーラムの質を高く保つために、コンテンツを静かに分析することです。スパムを定義するためのルールに従う必要があります。スパムを見つけた場合、応答はルールに記載されています。あなたは指示された応答のみを使用します。

## スパムのルール

私はあなたのためにこれを行いません 😏 しかし、説明と例が必要です。例えば、迅速かつ粗雑な例として:
* ギャンブル、セックス、仮想通貨などに接続されている外部へのリンクを含む投稿(この文脈では「類似」は危険です)は、スパムとして分類されます。例:www.buy-crypto.deal

これはケースバイケースで調整する必要があります。なぜなら、誤検知と偽陰性が発生するからです。

次に、コンテンツにもガイドラインを与える必要があります。しかし、テスト時には:
* ユーザー名が「testjon」の場合、コンテンツの分析をスキップし、直接スパムとして分類します。応答は「SPAM - it’s Jon」です。

ところで、ユーザーを見ることができますか?

## その他のコンテンツのルール

スパム分析を通過し、それが正当なコンテンツであると確信した場合、あなたの唯一の応答は「NOT SPAM」です。

そのようなものです。もちろんテストする必要があります。そして、誤った応答を得るたびに、混乱した点を見つけようとしてください。しかし、AIに選択の機会を与えないでください。なぜなら、AIは最後、最も簡単、または最も良い方向を選択するからです。AIは応答し、幸せになるようにコード化されています。

これを有効にしたばかりで、どのように機能するか楽しみにしています!

ユーザーが持つ信頼レベルの設定や考慮事項はありますか?

例えば、TL2以上のユーザーにはAIが機能する必要はありません。彼らはその地位を得ており、スキャン対象とみなされるべきではありません。もし彼らが暴走した場合は、彼らと話し合う必要があります。:sweat_smile:

新しいトピックに2つの投稿が分割されました: Discourse AIプラグインが見つからない

Akismet の代替となるものなので、AI に伴う LLM コストをかけたくない場合、スパム検出/防止の最良の代替策は何だろうかと思っています。

「いいね!」 2

実際、Gemini 2.0 Flashは、もちろん1日に100万件のリクエストを送信しない限り、無料で利用できます。私のフォーラムでは現在ゼロコストで正常に動作しており、Akismetよりも間違いなく正確で「賢い」です。

ただし、AIスパム検出プランが失敗した場合でも、Akismetプラグインはサイトにインストールされており、必要に応じてすぐに利用できます。また、インストールできると思います。(ただし、非推奨になっているため、永久に残るとは思っていません)。また、信頼レベルはDiscourseの基本的なコアであり、サイトのスパム管理に役立つことを忘れないでください。:+1:

「いいね!」 5

それは素晴らしいですね。LLM(大規模言語モデル)で(ゼロコストの)制限を設けるために、トークン数に上限を設定することは可能ですか?

「いいね!」 2

私の知る限り、制限を超えるとLLMのAPIは応答を停止すると思います。私のGoogle Cloud Consoleアカウントには請求先アカウントが紐付いていませんが、無料枠でAPIを無料で利用できるので、問題ないはずです。:+1:

「いいね!」 5

投稿が新しいトピックに分割されました:編集とマージのためのAIスパム検出の改善

モデルをホストしているサービスの「APIキー」はどこで入手できますか?

自社ホスティングをご利用の場合は、LLM Small を使用できます。

そうでない場合は、LLM を設定し、OpenAI/Google/Anthropic/X/その他からキーを取得する必要があります…

「いいね!」 2

ああ、Discourseからではなく、彼らからのAPIキーですね。

「いいね!」 2

Gemini 2.0 Flash を使用した AI スパム検出を有効にしても、これらのスパムをブロックするのに役立っていないようです。これまで、これほど明白なスパムがフィルターを通過したことはありません。これは特に Discourse サイト向けに設計されているのでしょうか?

| QuickBooks Payroll Error After an Update +1-800-223-1608 Step- by- Step Resolution new | Americas - Canada | | 1 | 2 | 1h |
|----|----|----|----|----|----|
| Understanding QuickBooks Payroll Tax Table Update Error +1-800-223-1608 new | Americas - Canada | | 1 | 2 | 1h |
| Understanding QuickBooks Payroll Error PS107 +1-800-223-1608 new | Americas - Canada | | 1 | 2 | 2h |
| Full List Of QuickBooKs CusTomer™ SUPPORT®️ USA Contact™ Numbers : Your Expert Guide new | Americas - Canada | | 1 | 2 | 5h |
| Complete QuickBooks®️ Payroll \u0026 Error Support Numbers™️: 2025 Reference Guide new | Asia | | 1 | 2 | 5h |
| {Expert\~ Guide} QuickBooks® Payroll Support® Contact Info – 2025 USA Guide new | Americas - Canada | | 1 | 4 | 5h |
| {Call@ +1-855-510-6777} How Can I Talk To \~$#Expedia Vacation Package Booking Support? new | Louisiana | | 1 | 6 | 5h |
| Complete List of™️ Caribbean Support™️ – The Detailed Official Guide new | Asia | | 1 | 2 | 6h |
| \[Call^Agent^Direct\] What Number Connects To Expedia Vacation Package Support? {Dial +1-855-510-6777} new | Americas - Canada |

API キーが無効なため、テストが実行されていません。

https://www.foodtalkcentral.com/admin/plugins/discourse-ai/ai-spam でテストを実行し、その URL を貼り付けると 500 エラーが発生します。/var/discourse/shared/web-only/log/rails/production.log のログを調べて「 500 」を検索すると、次のようになります。

Completed 200 OK in 399ms (Views: 123.1ms | ActiveRecord: 0.0ms (0 queries, 0 cached) | GC: 22.9ms)
DiscourseAi::Completions::Endpoints::Gemini: status: 400 - body: {
  "error": {
    "code": 400,
    "message": "API key not valid. Please pass a valid API key.",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.ErrorInfo",
        "reason": "API_KEY_INVALID",
        "domain": "googleapis.com",
        "metadata": {
          "service": "generativelanguage.googleapis.com"
        }
      },
      {
        "@type": "type.googleapis.com/google.rpc.LocalizedMessage",
        "locale": "en-US",
        "message": "API key not valid. Please pass a valid API key."
      }
    ]
  }
}
「いいね!」 1

ああ、ありがとう。誤って Gemini 2.0 Flash Lite の代わりに Gemini 2.0 Flash を選択してしまいました。これで正常にテストできました。

「いいね!」 1