Xの「multi-step reply spam」フィルター:コードで分かること(2026)
2026年9月4日、Xはフォロワー1,000人以上のアカウントへの自己返信の連鎖を狙うフィルターを追加しました。公開コードが何を判定し、何をするかを解説します。

Xのオープンソースコードには、2026年9月4日に追加されたフィルターがあります。対象は、フォロワー1,000人以上のアカウントの投稿の下で続く、自己返信の連鎖です。AIモデルがその連鎖のうち同じ作者の投稿を2件以上スパムとしてフラグ付けすると、Xのコードはそれぞれに reply spam ラベルと、返信ランキングスコア0を付けます。
Xは2026年9月4日にオープンソースコードへ何を追加したのか
Xの公開リポジトリ xai-org/x-algorithm に、2026年9月4日、返信スパム向けの新しい処理 multi_step_reply_spam が加わりました。このコミットは grox/flows/reply_spam/ に4つのファイルを追加しています。
plan_multi_step_reply_spam.pyは4つの段階をつなぎます。適格性フィルター、メディアの取得、スパム検出、書き込みです。task_multi_step_reply_spam.pyには、フィルター、検出の段階、書き込みの段階が入っています。classifier_multi_step_reply_spam.pyは、モデルが読むスレッドを組み立て、回答を解析し、3つの安全装置を適用します。state_multi_step_reply_spam.pyは結果を保存します。フラグ付き投稿のIDの一覧と、理由です。
XのREADMEは grox/ フォルダを、投稿が公開されるたびに動くコードで、スパムなどの分類器を含むと説明しています。新しいプランは、Xの他の返信ランキング処理と同じストリーム生成器に登録されています。
タスクのファイルは2026年9月8日にも編集されました。書き込みの段階が、2回の別々の書き込みではなく、1つの公開用関数を呼ぶようになっています。書き込まれる値は変わらず0.0です。
「multi-step reply spam」フィルターが狙う返信はどれか
無料、ログイン不要、数秒で結果表示。
フィルター(TaskMultiStepReplySpamFilter)は、次の条件がすべて当てはまる返信だけを選びます。
- 祖先のある返信で、その祖先のどれも削除されていない。
- 直接の親が同じ作者の投稿である。つまり、そのアカウントが自分に返信している。
- ルート投稿から2階層以上下にある。
- 作者がルート投稿の作者ではない。
- ルート投稿の作者のフォロワーが1,000人以上である(
FOLLOWER_COUNT_THRESHOLD_FOR_SPAM_DETECTION = 1000)。これを下回ると、コードは理由low_blast_radiusでその返信をスキップします。
条件を満たす最小の形は、他のアカウントの投稿、評価対象のアカウントによる返信、そして同じアカウントによるその最初の返信への2つ目の返信です。フィルターは、返信者自身のフォロワー数を見ません。
直接の親が他人の投稿である返信はスキップされます(parent_not_same_author)。返信者自身の投稿の下にある返信も同様です(same_user_reply_as_root)。
フィルターが対象から外すアカウントはどれか
Xの multi-step reply spam フィルターは、モデルが動く前に、次の5種類のケースをスキップします。
- GrokまたはGorkのアカウントが書いた返信。
- high page rank(バージョン2)とされた作者。
is_high_page_rank_v2_userで確認されます。 - グレーバッジのある作者。
is_grey_badge_userで確認されます。 - フォロワー1,000人未満のルート作者の下の返信。
- 祖先の投稿が削除されたスレッド、または作者情報のない投稿を含むスレッド。
これらのファイルには、「high page rank」と「グレーバッジ」の定義はありません。
モデルは何をスパムと判断するのか
Xのコードで分かるのは、モデルに何が渡され、回答の後に何が起きるかです。モデルが適用する判断基準は分かりません。スコアラーは、constants.py で定義されたモデル識別子 oai-gemma4-26b-2 に結び付いています。
モデルが読むのは次の内容です。
- 返信の作者のプロフィール(名前、ユーザー名、自己紹介、プロフィールの所在地)。
- 番号付きの投稿として並べたスレッド。「Post 0」がルート投稿で「never flag」と注記され、最後の投稿には「the reply being evaluated」と注記されます。
- 各投稿のハンドル、フォロワー数、表示名、本文、URL、最大2点のメディア。
- ルート投稿に付けられた、ルート作者の自己紹介。
祖先が10を超えるスレッドは、最初の5つと最後の5つに切り詰められます(MAX_THREAD_SIZE = 10)。モデルはJSONで答えます。スパムと判断した投稿のインデックスと、理由です。
プロンプト自体は非公開です。prompts.py は multi_step_reply_spam_system.j2 というテンプレートを読み込みますが、これはリポジトリにありません。同ファイルのコメントには、システムの悪用を難しくするためにプロンプトを除外していると書かれています。XのREADMEも、Groxのプロンプトを公開しないファイルとして挙げています。
モデルの回答の後には、どんな安全装置があるのか
3つの確認がこの順に走り、そのどれもがフラグを消すことがあります。
- 最新の返信がフラグ付き投稿に含まれていなければ、フラグはすべて取り消されます。
- 他の作者が書いたフラグ付き投稿は除かれます。
- フラグ付き投稿がちょうど1件だけ残った場合、それは取り消されます。
したがって、ペナルティには、最新の返信を含む、同じ作者のフラグ付き投稿が2件以上必要です。
フラグを立てられた返信はどうなるのか
スレッド内のフラグ付き投稿ごとに、Xのコードは reply spam の安全ラベルを付け、返信ランキングスコア0.0を公開します。書き込みの段階(TaskWriteMultiStepReplySpamReplyRanking)は、DisableTaskForNonProd によって本番環境以外では無効です。
フラグ付き投稿ごとに、コードは次のことを行います。
- 安全ラベル
RiskyHighVizReplyを付ける。ただし、作者がhigh page rank(スコアがある場合、信用スコア62以上)、グレーバッジあり、またはテストユーザーなら付けない。 - モデルの理由を添えて、返信ランキングスコア0.0を公開する。理由は末尾の500文字に切り詰められる。
同じフォルダーにある主な返信ランキングのスコアラーは、0から3の範囲外のスコアを拒否します。つまり0は、その尺度で最も低い値です。ある投稿が0を持つと、返信ランキングの標準の書き込み段階は、保存済みの値より低くない新しいスコアをスキップします。
これらのファイルが作用するのは個々の投稿です。アカウントを停止したり、アカウント全体にラベルを付けたりはしません。
公開ファイルが示していないこと
会話の表示がスコアやラベルをどう使うかは、リポジトリには示されていません。スコアの名前を検索しても、見つかるのは reply_spam フォルダーだけです。
ラベル名 RiskyHighVizReply は、リポジトリの under-the-hood フォルダーのどこにも、ラベル一覧を含めて出てきません。そのため、公開コードにはUnder the Hoodにこのラベルの項目があることを示すものはありません。
自分の返信が影響を受けているか、どう確かめるか
返信が影響を受けているか知るには、会話の中で返信がどこに表示されているかを見ます。リプライデブースティング(返信の表示順位低下)とは、あなたの返信が会話の最下部や「返信をさらに表示」の先に追いやられることです。
Shadowban Radarは、このテストを外側から定義しています。返信の表示順位低下は、会話を時系列順で読むとXがその返信を表示しているのに、同じ会話のデフォルト表示には含めていない場合に検出されます。手作業での確認方法は、reply deboosting のページで説明しています。
Shadowban Radarの無料チェックは、ログインなしで、公開されているどのハンドルにもこのテストを行います。分かるのは返信の位置であり、原因ではありません。順位が低い返信は複数のシグナルから生じ得るため、このフィルターがフラグを立てたかどうかは判断できません。
会話から返信が完全に消えている場合は、別の制限であるghost banです。
コードから分かる対処法は何か
Xはモデルの判断基準を公開していないため、以下はフィルターの条件だけから導かれる点です。
- 言いたいことは1回で言う。フィルターは同じ作者の投稿が2件以上フラグ付けされたときだけ働き、他人の投稿の下の単独の返信は対象になりません。短い返信を1つにまとめれば、フィルターが探す連鎖を避けられます。
- 補足は自分の投稿に書く。続き、リンク、長めの説明は、自分の投稿かスレッドに置けます。自分の投稿の下の返信は評価されません(
same_user_reply_as_root)。 - 自分ではなく相手に返信する。直接の親が他のアカウントの投稿である返信は、フィルターの対象外です(
parent_not_same_author)。 - 連鎖はまとめて判断される。モデルはスレッド全体を一度に読み、同じ作者のフラグ付き投稿はそれぞれ自分のスコア0を受けます。
reply_spam のファイルには、書き込まれたラベルを外したり、0を引き上げたりする段階は含まれていません。
出典
2026年10月7日に、xai-org/x-algorithm リポジトリのコミット 78460ca で確認しました。フィルターの4つのファイルは、2026年9月4日のコミット 9b0dc31 で追加されました。
- plan_multi_step_reply_spam.py:4つの段階とその順序。
- task_multi_step_reply_spam.py:適格性、検出、書き込み。
- classifier_multi_step_reply_spam.py:モデルに渡されるスレッドと3つの安全装置。
- state_multi_step_reply_spam.py:保存される結果。
- task_write.py:ラベルを付ける関数と、返信ランキングの標準の書き込み。
- README.md:
grox/の説明と、非公開ファイルの一覧。 - コミット 9b0dc31:2026年9月4日。
Shadowban RadarはX Corpとは提携していません。Xの公式レポートとリアルタイムのチェックの関係は、XのUnder the Hoodを参照してください。


