このガイドでは、Discourse AIのスパム検出機能の設定と使用方法について、セットアッププロセス、スキャン基準、分類ロジック、カスタマイズ、およびAIトリアージとの比較を説明します。
必要なユーザーレベル: 管理者
これは、StarterおよびProのお客様、ならびに従来のBasic、Open Source、Creator、およびBusinessのお客様に対してデフォルトでオンになっています。
Discourse AIは、最小限の設定でスパム投稿を識別してフラグを立てる、効率的なスパム検出機能を提供します。シンプルさを目指して設計されていますが、より広範なワークフローと大規模なユースケースをサポートする、より多用途なAIトリアージシステムを補完します。
概要
このガイドでは、以下について学習します。
- AIスパム検出の仕組みとスキャンされるコンテンツ
- AIが使用する分類ロジックとコンテキスト
/admin/plugins/discourse-ai/ai-spamを介したスパム検出の設定手順- 大規模言語モデル(LLM)選択に関するガイドライン
- スパム検出とAIトリアージの主な違い
- フラグが立てられた投稿と見逃された投稿の管理方法
AIスパム検出の仕組み
スキャンされるコンテンツ
AIスパム検出は、次の基準に基づいて投稿を評価します。
ユーザー信頼レベル:
- 設定された最大信頼レベル以下(
ai_spam_detection_max_trust_levelサイト設定で制御、デフォルト: トラストレベル 1)のユーザーからの投稿をスキャンします。- より高い信頼レベルのユーザーからの投稿は除外されます。
- 信頼レベルに関係なく、スタッフおよびボットユーザーからの投稿は常に除外されます。
投稿タイプ:
- パブリック投稿(プライベートメッセージを除く)。
- 追加のしきい値に基づいて、返信投稿と最初のトピック投稿の両方が含まれます。
投稿の編集:
- 大幅な編集(例: 10文字を超える変更)があった投稿をスキャンします。
- 同じ投稿のスキャン間には10分間の間隔を適用します。
- 1つの投稿に対する再スキャンは最大3回に制限されます。
- 過去24時間以内に編集された投稿のみを再スキャンします。
投稿頻度:
- パブリックトピックでのユーザーの投稿数が、設定された投稿数しきい値(
ai_spam_detection_max_post_countサイト設定で制御、デフォルト: 3投稿)を超えないユーザーからの投稿をスキャンします。- このしきい値を超えるユーザーからの投稿は除外されます。
レビューキュー:
- すでにレビューキューから承認された投稿はスキャンされません。
分類プロセス
基準を満たした投稿は、分析のためにAIエージェントに送信されます。エージェントは、投稿がスパムであるかスパムでないかを評価し、構造化されたJSON出力を使用して分類の理由を提供します。評価は以下に基づいています。
- コンテキスト: 投稿コンテンツ、トピックタイトル、カテゴリ、ユーザーアカウントデータ(ユーザー名、メールアドレス、アカウント経過年数、総投稿数、信頼レベルなど)、およびIPベースの地理位置情報が含まれます。
- 画像分析: 投稿に添付された最大3つの画像アップロードが分析に含まれます。
- 返信コンテキスト: 返信投稿の場合、親投稿の内容(最大500文字)が含まれます。
- サイト情報: サイト名、URL、説明、トップ10カテゴリがAIに提供されます。
- カスタム指示: 強化された、または適応されたスキャン基準のための管理者定義のルール。
- 自動検出:
- 無関係または宣伝的なコンテンツ(例: 広告や商業資料)にフラグを付けます。
- 自動的またはボットのような動作を識別します。
- ディスカッションに対するコンテンツの関連性を評価します。
デフォルトのプロンプトとコンテキスト
AIは、スパム検出をガイドするためにデフォルトのシステムプロンプトを使用します。組み込みのスパム検出エージェントプロンプトは以下をカバーしています。
あなたはスパム検出システムです。以下の投稿コンテンツとコンテキストを分析してください。 投稿タイプを注意深く考慮してください。 - 返信投稿の場合: その応答がスレッドに関連しているかどうかを確認します。 - 新規トピック投稿の場合: それが正当なトピックかスパムの宣伝かをチェックします。 投稿が次のいずれかの基準に一致する場合、それはスパムです。 - 未承諾の商業コンテンツや宣伝が含まれている - 不審または無関係な外部リンクがある - 自動化された/ボット投稿のパターンを示す - 無関係なコンテンツや広告が含まれている - 返信の場合: ディスカッションスレッドと全く関係がない - 過剰なキーワードや反復的なテキストパターンを使用している - 不審な形式や文字の使用が見られる 特に厳しくチェックすべき点: - 前の会話を無視した返信 - 複数の無関係な外部リンクを含む投稿 - どこにでも投稿できる一般的な応答 公平に扱うべき点: - 正当な最初の貢献をした新規ユーザー - 参加するための真剣な努力をしている非ネイティブスピーカー - 適切なコンテキストでのトピックに関連する製品の言及スキャナーは、以下を含むコンテキストパッケージもコンパイルします。
- 投稿タイプ(NEW TOPICまたはREPLY)、カテゴリおよびトピックメタデータ。
- 返信の場合: 親投稿の内容とトピックの作成者。
- 作成者データ(ユーザー名、メールアドレス、アカウント経過年数、総投稿数、信頼レベル、およびIPベースの位置情報)。
- 処理のために5000文字に切り詰められた投稿テキスト。
- 投稿に添付された最大3つの画像アップロード。
AIスパム検出の設定
設定ガイド
設定へのアクセス:
/admin/plugins/discourse-ai/ai-spamに移動します。LLMの選択:
Discourseによってホストされている場合
LLMリストからCDCKホスト型Small LLMを選択できます。
- フォーラムのニーズに適した言語モデルを選択します。LLMの構成については、大規模言語モデル(LLM)設定ページを参照してください。
- LLMの設定については、
/admin/plugins/discourse-ai/ai-llmsにアクセスします。
- スパム検出の有効化:
機能をオンに切り替えて、スパム検出を有効にします。
注: 接続されたLLMは必須です。
カスタマイズされた指示の追加:
- フォーラム固有のルールを定義します(例: 外部リンクの監視を厳しくする)。
- 変更を適用するために保存します。
スキャンしきい値の調整(オプション):
ai_spam_detection_max_trust_level: スキャン対象のユーザーの最大信頼レベルを設定します(デフォルト: 1)。0から4まで設定できます。ai_spam_detection_max_post_count: スキャン対象となるユーザーが持つことができる投稿の最大数を設定します(デフォルト: 3)。1から100まで設定できます。
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を貼り付けます。
- 分類結果とAIの決定理由を確認します。
- 未保存の変更はテスト中に適用されるため、リスクなしで実験できます。
フラグが立てられた投稿と見逃された投稿の管理
フラグが立てられた投稿の処理
投稿がスパムとして検出されると、システムは以下の処理を行います。
- 投稿にスパムとしてフラグを立て、レビューキューに追加します。
- 投稿ユーザーをサイレンスします。
- 投稿を一般公開から非表示にします。
- スパム投稿がトピックの最初の投稿であった場合、トピックを非表示にします。
フラグが立てられた投稿はモデレーションキューに表示されます。管理者は以下を行うことができます。
- スパムとして誤って分類された正当な投稿を承認します。
- システムの精度を維持するために、スパムトピックを却下します。
重要: 誤って分類された投稿については、スパムフラグを却下してください。ユーザーはフラグが解決されるまでサイレンス状態のままになります。
見逃されたスパムの処理
見逃されたスパムとは、検出を回避したもののコミュニティによってフラグが立てられた投稿を指します。モデレーターは必要に応じてこれらを管理できます。
ベストプラクティス
- システムの精度を向上させるために、フラグが立てられたスパムと見逃されたスパムを定期的に監視します。クリック可能なメトリクスがこのプロセスを簡素化します。
- カスタム指示をエッジケースに対して評価するためにテストケースを使用します。
- 必要に応じてLLM設定を確認および調整します。
- コミュニティのニーズに基づいてスキャン対象ユーザーを調整するために、
ai_spam_detection_max_trust_levelおよびai_spam_detection_max_post_countサイト設定を使用します。
追加リソース
AIスパム検出を効果的に設定することで、手動でのモデレーション作業が減少し、クリーンでスパムのないコミュニティが保証されます。
これをかなりテストしましたが、信頼できる結果はまったく得られませんでした。参考までに、gpt-4o モデルを使用しています。
精度をテストするために、次の簡単な指示を与えました。
あなたはスパム検出システムです。以下のコンテンツとコンテキストを分析してください。
以下のメモを参照してください。以下の項目のいずれか一つでも真実であれば、スパムとしてマークしてください。
- ユーザー名が具体的に「testjon」である場合、それは*常に*スパムです。
- 「SPAM - It's Jon!」または「NOT SPAM」のみで応答してください。
ユーザー名 testjon で投稿をテストした結果は NOT SPAM でした。指示がまったく守られていないようです。何か提案はありますか?
AIスパム検出に関して、他に良い経験や悪い経験をした人はいますか?
この状況がどうなっているのかは分かりませんが、一般的に引用されているような文は壊れやすいです。ANY が何を意味するのか理解せず、そのまま進んでしまいます。そこから最終的に NOT SPAM を見つけます。
つまり、「ANY」の太字を削除するということですか?それとも、「次のアイテムがある場合」の全体の表現を指しているのですか?
もっと論理的かつ正確に書く必要があります。AIにどのような方法でも選択させることはできません。AIは数えられず、まずすべてを読んでから戻ってきて論理的に作業しようとすることは絶対にできません。指示を出すように、非常にシンプルに説明してください。例は間違っていませんが、トークンの使用量が増加します。
これは素晴らしい情報です。例えば、この全く同じシナリオをどのように違う書き方で表現できますか?
以下のような…
あなたはスパム検出システムです。あなたの仕事は、このフォーラムの質を高く保つために、コンテンツを静かに分析することです。スパムを定義するためのルールに従う必要があります。スパムを見つけた場合、応答はルールに記載されています。あなたは指示された応答のみを使用します。
## スパムのルール
私はあなたのためにこれを行いません 😏 しかし、説明と例が必要です。例えば、迅速かつ粗雑な例として:
* ギャンブル、セックス、仮想通貨などに接続されている外部へのリンクを含む投稿(この文脈では「類似」は危険です)は、スパムとして分類されます。例:www.buy-crypto.deal
これはケースバイケースで調整する必要があります。なぜなら、誤検知と偽陰性が発生するからです。
次に、コンテンツにもガイドラインを与える必要があります。しかし、テスト時には:
* ユーザー名が「testjon」の場合、コンテンツの分析をスキップし、直接スパムとして分類します。応答は「SPAM - it’s Jon」です。
ところで、ユーザーを見ることができますか?
## その他のコンテンツのルール
スパム分析を通過し、それが正当なコンテンツであると確信した場合、あなたの唯一の応答は「NOT SPAM」です。
そのようなものです。もちろんテストする必要があります。そして、誤った応答を得るたびに、混乱した点を見つけようとしてください。しかし、AIに選択の機会を与えないでください。なぜなら、AIは最後、最も簡単、または最も良い方向を選択するからです。AIは応答し、幸せになるようにコード化されています。
これを有効にしたばかりで、どのように機能するか楽しみにしています!
ユーザーが持つ信頼レベルの設定や考慮事項はありますか?
例えば、TL2以上のユーザーにはAIが機能する必要はありません。彼らはその地位を得ており、スキャン対象とみなされるべきではありません。もし彼らが暴走した場合は、彼らと話し合う必要があります。![]()
新しいトピックに2つの投稿が分割されました: Discourse AIプラグインが見つからない
Akismet の代替となるものなので、AI に伴う LLM コストをかけたくない場合、スパム検出/防止の最良の代替策は何だろうかと思っています。
実際、Gemini 2.0 Flashは、もちろん1日に100万件のリクエストを送信しない限り、無料で利用できます。私のフォーラムでは現在ゼロコストで正常に動作しており、Akismetよりも間違いなく正確で「賢い」です。
ただし、AIスパム検出プランが失敗した場合でも、Akismetプラグインはサイトにインストールされており、必要に応じてすぐに利用できます。また、インストールできると思います。(ただし、非推奨になっているため、永久に残るとは思っていません)。また、信頼レベルはDiscourseの基本的なコアであり、サイトのスパム管理に役立つことを忘れないでください。![]()
それは素晴らしいですね。LLM(大規模言語モデル)で(ゼロコストの)制限を設けるために、トークン数に上限を設定することは可能ですか?
私の知る限り、制限を超えるとLLMのAPIは応答を停止すると思います。私のGoogle Cloud Consoleアカウントには請求先アカウントが紐付いていませんが、無料枠でAPIを無料で利用できるので、問題ないはずです。![]()
投稿が新しいトピックに分割されました:編集とマージのためのAIスパム検出の改善
モデルをホストしているサービスの「APIキー」はどこで入手できますか?
自社ホスティングをご利用の場合は、LLM Small を使用できます。
そうでない場合は、LLM を設定し、OpenAI/Google/Anthropic/X/その他からキーを取得する必要があります…
ああ、Discourseからではなく、彼らからのAPIキーですね。
Gemini 2.0 Flash による AI スパム検出を有効にしても、これらのスパムをブロックするのには役立っていないようです。これほど明白なスパムがフィルターをすり抜けたことは今までありませんでした。これは特に Discourse サイト向けに設計されているのでしょうか?
| [QuickBooks Payroll Error After an Update +1-800-223-1608 Step- by- Step Resolution](https://www.foodtalkcentral.com/t/quickbooks-payroll-error-after-an-update-1-800-223-1608-step-by-step-resolution/18669) [new](https://www.foodtalkcentral.com/t/quickbooks-payroll-error-after-an-update-1-800-223-1608-step-by-step-resolution/18669 "new topic") | [Americas - Canada](https://www.foodtalkcentral.com/c/canada/7) | [ ](https://www.foodtalkcentral.com/u/xabibe4257)[](https://www.foodtalkcentral.com/u/system) | [1](https://www.foodtalkcentral.com/t/quickbooks-payroll-error-after-an-update-1-800-223-1608/18669/1) | 2 | [1h](https://www.foodtalkcentral.com/t/quickbooks-payroll-error-after-an-update-1-800-223-1608/18669/2) | |----|----|----|----|----|----| | [Understanding QuickBooks Payroll Tax Table Update Error +1-800-223-1608](https://www.foodtalkcentral.com/t/understanding-quickbooks-payroll-tax-table-update-error-1-800-223-1608/18657) [new](https://www.foodtalkcentral.com/t/understanding-quickbooks-payroll-tax-table-update-error-1-800-223-1608/18657 "new topic") | [Americas - Canada](https://www.foodtalkcentral.com/c/canada/7) | [ ](https://www.foodtalkcentral.com/u/xabibe4257)[](https://www.foodtalkcentral.com/u/system) | [1](https://www.foodtalkcentral.com/t/understanding-quickbooks-payroll-tax-table-update-error-1-800-223-1608/18657/1) | 2 | [1h](https://www.foodtalkcentral.com/t/understanding-quickbooks-payroll-tax-table-update-error-1-800-223-1608/18657/2) | | [Understanding QuickBooks Payroll Error PS107 +1-800-223-1608](https://www.foodtalkcentral.com/t/understanding-quickbooks-payroll-error-ps107-1-800-223-1608/18640) [new](https://www.foodtalkcentral.com/t/understanding-quickbooks-payroll-error-ps107-1-800-223-1608/18640 "new topic") | [Americas - Canada](https://www.foodtalkcentral.com/c/canada/7) | [ ](https://www.foodtalkcentral.com/u/xabibe4257)[](https://www.foodtalkcentral.com/u/system) | [1](https://www.foodtalkcentral.com/t/understanding-quickbooks-payroll-error-ps107-1-800-223-1608/18640/1) | 2 | [2h](https://www.foodtalkcentral.com/t/understanding-quickbooks-payroll-error-ps107-1-800-223-1608/18640/2) | | [Full List Of QuickBooKs CusTomer™ SUPPORT®️ USA Contact™ Numbers : Your Expert Guide](https://www.foodtalkcentral.com/t/full-list-of-quickbooks-customer-support-usa-contact-numbers-your-expert-guide/18517) [new](https://www.foodtalkcentral.com/t/full-list-of-quickbooks-customer-support-usa-contact-numbers-your-expert-guide/18517 "new topic") | [Americas - Canada](https://www.foodtalkcentral.com/c/canada/7) | [ ](https://www.foodtalkcentral.com/u/domew40238)[](https://www.foodtalkcentral.com/u/system) | [1](https://www.foodtalkcentral.com/t/full-list-of-quickbooks-customer-support-usa-contact-numbers-your-expert-guide/18517/1) | 2 | [5h](https://www.foodtalkcentral.com/t/full-list-of-quickbooks-customer-support-usa-contact-numbers-your-expert-guide/18517/2) | | [Complete QuickBooks®️ Payroll \u0026 Error Support Numbers™️: 2025 Reference Guide](https://www.foodtalkcentral.com/t/complete-quickbooks-payroll-error-support-numbers-2025-reference-guide/18516) [new](https://www.foodtalkcentral.com/t/complete-quickbooks-payroll-error-support-numbers-2025-reference-guide/18516 "new topic") | [Asia](https://www.foodtalkcentral.com/c/asia/39) | [ ](https://www.foodtalkcentral.com/u/domew40238)[](https://www.foodtalkcentral.com/u/system) | [1](https://www.foodtalkcentral.com/t/complete-quickbooks-payroll-error-support-numbers-2025-reference-guide/18516/1) | 2 | [5h](https://www.foodtalkcentral.com/t/complete-quickbooks-payroll-error-support-numbers-2025-reference-guide/18516/2) | | [{Expert\\~ Guide} QuickBooks® Payroll Support® Contact Info – 2025 USA Guide](https://www.foodtalkcentral.com/t/expert-guide-quickbooks-payroll-support-contact-info-2025-usa-guide/18509) [new](https://www.foodtalkcentral.com/t/expert-guide-quickbooks-payroll-support-contact-info-2025-usa-guide/18509 "new topic") | [Americas - Canada](https://www.foodtalkcentral.com/c/canada/7) | [ ](https://www.foodtalkcentral.com/u/domew40238)[](https://www.foodtalkcentral.com/u/system) | [1](https://www.foodtalkcentral.com/t/expert-guide-quickbooks-payroll-support-contact-info-2025-usa-guide/18509/1) | 4 | [5h](https://www.foodtalkcentral.com/t/expert-guide-quickbooks-payroll-support-contact-info-2025-usa-guide/18509/2) | | [{Call@ +1-855-510-6777} How Can I Talk To \\~$#Expedia Vacation Package Booking Support?](https://www.foodtalkcentral.com/t/call-1-855-510-6777-how-can-i-talk-to-expedia-vacation-package-booking-support/18512) [new](https://www.foodtalkcentral.com/t/call-1-855-510-6777-how-can-i-talk-to-expedia-vacation-package-booking-support/18512 "new topic") | [Louisiana](https://www.foodtalkcentral.com/c/usa-south/louisiana/31) | [ ](https://www.foodtalkcentral.com/u/avacarter)[](https://www.foodtalkcentral.com/u/system) | [1](https://www.foodtalkcentral.com/t/call-1-855-510-6777-how-can-i-talk-to-expedia-vacation-package-booking-support/18512/1) | 6 | [5h](https://www.foodtalkcentral.com/t/call-1-855-510-6777-how-can-i-talk-to-expedia-vacation-package-booking-support/18512/2) | | [Complete List of™️ Caribbean Support™️ – The Detailed Official Guide](https://www.foodtalkcentral.com/t/complete-list-of-caribbean-support-the-detailed-official-guide/18496) [new](https://www.foodtalkcentral.com/t/complete-list-of-caribbean-support-the-detailed-official-guide/18496 "new topic") | [Asia](https://www.foodtalkcentral.com/c/asia/39) | [ ](https://www.foodtalkcentral.com/u/jofohe)[](https://www.foodtalkcentral.com/u/system) | [1](https://www.foodtalkcentral.com/t/complete-list-of-caribbean-support-the-detailed-official-guide/18496/1) | 2 | [6h](https://www.foodtalkcentral.com/t/complete-list-of-caribbean-support-the-detailed-official-guide/18496/2) | | [\\[Call^Agent^Direct\\] What Number Connects To Expedia Vacation Package Support? {Dial +1-855-510-6777}](https://www.foodtalkcentral.com/t/call-agent-direct-what-number-connects-to-expedia-vacation-package-support-dial-1-855-510-6777/18479) [new](https://www.foodtalkcentral.com/t/call-agent-direct-what-number-connects-to-expedia-vacation-package-support-dial-1-855-510-6777/18479 "new topic") | [Americas - Canada](https://www.foodtalkcentral.com/c/canada/7) |
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."
}
]
}
}
ああ、ありがとう。誤って Gemini 2.0 Flash Lite の代わりに Gemini 2.0 Flash を選択してしまいました。これで正常にテストできました。

