メインコンテンツへ移動
AIチュートリアル

Gem SearchでローカルファーストなXリサーチ支援ツールを構築する

Gem Searchの実行方法、Chrome拡張機能との連携、Xで表示中の投稿の収集、新たな論調の特定、根拠の確認、トピックのカスタマイズ、さらに必要に応じて4人のGrokレビュアーを追加する方法を解説します。リサーチエンジンとデータベースはコンピューター上で管理できます。

Gem SearchでローカルファーストなXリサーチ支援ツールを構築する

Gem Searchの機能

Gem Searchは、X向けのオープンソースかつローカル優先のリサーチ支援ツールです。ChromeまたはChromiumにアニメーションするスパイダーオーバーレイを追加し、アクティブなタブに表示された投稿を解析して、小さなキャプチャをコンピューター上で動作するリサーチエンジンに送信します。

ローカルのJEV検出器は投稿の重複を排除し、繰り返し現れるトピック、プロジェクトリンク、キャッシュタグ、有効なSolanaアドレス、出現しつつある2語のフレーズをグループ化します。制限付きクローラーは公開HTTPまたはHTTPSリンクをたどることができ、ダッシュボードにはソース、チェック結果、不明点、アクティビティ、エクスポート可能な調査結果が保持されます。

Gem Searchは、自動的な信頼判定ではなく調査を目的に設計されています。リード、スコア、または問題のないローンチという結果は、プロジェクトが安全であること、独自性があること、または価値が上がる可能性が高いことを証明するものではありません。

この拡張機能は現在のページのDOMを読み取ります。Xの全投稿配信ではなく、投稿やアカウントを操作せず、他のアプリケーションやバックグラウンドタブを監視することもできません。

主な機能

  • 表示型ブラウザーコンパニオン: アニメーションするスパイダーが解析中の投稿を強調表示し、キャプチャ数、停止操作、閉じる操作、表示中のタブを自動スクロールするオプションを提供します。
  • ローカルシグナル検出: JEVはトピックをグループ化し、ティッカーとSolanaアドレスを検出し、繰り返されるフレーズを発見し、6時間の増加率を測定し、投稿者の多様性と繰り返しテキストを確認します。
  • 証拠の追跡: 調査結果には、その根拠となる投稿、公開リンク、チェック結果、不明点、モデルの理由が保持されます。
  • 制限付きクローラー: 公開ページは30分間キャッシュされ、プライベートネットワークの宛先はブロックされます。
  • 永続ローカルキュー: バックエンドが利用できない場合、最大200件のキャプチャした投稿を拡張機能内に保持でき、再接続後に転送されます。
  • オプションのGrokレビュー: 明示的に有効化した場合、4人の役割別レビュアーが公式xAI APIを通じて提供された証拠を分析します。
  • ローカルカスタマイズ: ローカル設定ファイルで、英語またはロシア語のトピックパターンを最大40件定義できます。
  • リサーチのエクスポート: ダッシュボードはJSONエクスポートと、ブラウザーで生成するSVG形式の発見カプセルに対応しています。

アーキテクチャを理解する

通常の調査フローは次のとおりです。

  1. 拡張機能が、表示中のXタブに表示された投稿を監視します。
  2. キャプチャは永続的な拡張機能キューに入ります。
  3. 連携したlocalhost APIが、キャプチャをローカルエンジンに送信します。
  4. JEVがシグナルの重複を排除してグループ化します。
  5. クローラーが、制限された公開ソースを取得します。
  6. オプションのモデルレビューを行う前に、ローカルの証拠チェックが実行されます。
  7. ダッシュボードに調査結果、ソース、理由、不明点が表示されます。

拡張機能の連携トークンでは、キャプチャの送信とスキャナーの状態の読み取りができます。トークンを発行することはできず、拡張機能にはアカウント操作コードもxAI APIキーも含まれていません。

前提条件

Gem Searchをインストールする前に、次のものを準備してください。

  • Python 3.11以降。
  • Chromeまたはその他のChromiumベースのブラウザー。
  • バックエンド用のmacOS、Linux、またはWSL2経由のWindows。
  • リポジトリをクローンするためのGit。

Node.js 22以降が必要なのは、完全なテストスイートとオプションのSolanaモジュールを使用する場合だけです。コアのリサーチバックエンドと展開したブラウザー拡張機能には、npmによるビルドは必要ありません。

ローカルエンジンをインストールして起動する

リポジトリをクローンし、そのディレクトリに移動してローカル環境ファイルを作成し、バックエンドを起動します。

git clone https://github.com/h100envy/gem-search.git
cd gem-search
cp .env.example .env
python3 app.py

このターミナルは起動したままにしてください。ダッシュボードはhttp://127.0.0.1:8787で利用できるようになります。

まず架空のデモを試す

Xアカウントを接続する前に、http://127.0.0.1:8787/spider-demoを開いてください。このページは架空のカード上で同じスパイダーレンダラーを使用し、API呼び出しを行わず、何も収集しません。

ダッシュボードには、明確に合成データと表示されたプロジェクトを使ってリサーチパイプラインを実行する、別のデモスキャンもあります。

Chrome拡張機能を読み込んで連携する

  1. ローカルダッシュボードを開き、Connectionsに移動します。
  2. ローカル連携コードをコピーします。
  3. ChromeまたはChromiumでchrome://extensionsを開きます。
  4. Developer modeを有効にします。
  5. Load unpackedを選択します。
  6. リポジトリのextension/ディレクトリを選択します。
  7. Gem Searchのツールバー・ポップアップを開きます。
  8. 連携コードを貼り付け、Connectを選択します。

この連携によって、拡張機能がローカルAPIに接続されます。拡張機能を使用している間は、リサーチエンジンを起動したままにする必要があります。

最初の調査セッションを実行する

  1. Xのフィード、検索ページ、またはプロフィールページを開きます。
  2. Gem Search拡張機能のポップアップを開きます。
  3. Release spider on this tabを選択します。
  4. スパイダーが表示中のビューポート内に表示された投稿を解析している間、通常どおりスクロールします。
  5. キャプチャ数を確認し、必要に応じてスパイダーを停止または閉じます。
  6. ローカルダッシュボードに戻り、Discoveryを開きます。
  7. グループ化された調査結果、ソース投稿、リンク先ページ、ローカルチェック、明示的に不明とされた主張を確認します。
  8. 役立つ調査結果をJSONとしてエクスポートし、後の調査に利用します。

自動スクロールはオプションです。バックグラウンドタブでは、投稿の収集も自動スクロールも行われません。ローカルエンジンがオフラインになった場合、拡張機能は最大200件のキャプチャを保持し、接続が再び成功した後に転送できます。

出現しつつあるシグナルを調べる

Gem Searchは、ティッカー、有効なSolanaコントラクトアドレス、既存のトピックに属さない繰り返しフレーズについて、それぞれ個別のリードを作成できます。

ティッカー

検出された各$CASHTAGは、関連する投稿者と投稿を含むリードにできます。$BTC、$SOL、$USDCなどの主要アセットや、$100のような価格らしい文字列は除外されます。リードからXのライブ検索を開けます。

Solanaアドレス

候補アドレスは、実際の32バイトキーにデコードできる場合のみ保持されます。これにより、長いランダムな単語による誤検出を減らせます。生成されたリードから、Solscan上のアドレスへ移動できます。

新しいナラティブ

新たなフレーズとは、過去6時間に少なくとも3人の異なる投稿者が繰り返し使用し、設定済みのトピック外で見つかった2語のフレーズです。同じ文に含まれる重複した表現は1回として数えます。

成長指標

各リードには、過去6時間の言及数をそれ以前の18時間のペースと比較した値、最近の投稿者数、スパイダーが初めて観測した時刻を表示できます。これらの指標は閲覧サンプルのみを示すものであり、X上のすべての活動を示すものではありません。

Discoveryでは、シグナルの種類でフィルターし、最も速く成長、新しい順、投稿者数順で並べ替えられます。リードを開くと、シグナルの勢いと元の投稿を確認できます。

サンプルシグナルのウォークスルーを実行する

リポジトリには、実際の拡張機能APIを通じて架空の投稿をストリーミングし、キャプチャ、エンジンイベント、リード、成長指標、チェック結果を表示するターミナルデモが含まれています。

1つ目のターミナルでエンジンを起動します。

python3 app.py

2つ目のターミナルでウォークスルーを実行します。

python3 scripts/spider_demo.py

スパイダーループが動作するまで約10秒待ち、その後ダッシュボードを開きます。Discoveryでティッカーと新しいナラティブのフィルターを切り替え、成長速度順に並べ替えます。

より速くウォークスルーを実行するには、次のコマンドを使います。

python3 scripts/spider_demo.py --speed 2

サイレントなサンプル読み込みには、次を使います。

python3 scripts/sample_signals.py

サンプルの投稿、ハンドル、ティッカー、アドレスは架空のもので、サンプルとして示されています。

トピック検出器をカスタマイズする

トピックファイルの例をコピーし、新しいローカルファイルを編集します。

cp topics.example.json topics.json

このファイルでは、大文字と小文字を区別しない正規表現で最大40個のトピックを指定できます。変更後はバックエンドを再起動してください。

ファイルの形式が不正な場合、Gem Searchはそのファイルを無視して警告を記録し、組み込みのトピックで処理を続行します。カスタムのtopics.jsonファイルはコンピューター上に残ります。

4つのオプションのGrok視点を有効にする

Gem SearchはGrokなしでも動作します。モデル支援レビューを有効にするには、ローカルの.envファイルに自身のxAI設定を追加します。

GROK_ENABLED=1
XAI_API_KEY=your_local_api_key
GROK_MODEL=grok-4.7
GROK_DAILY_CALLS=12

ファイルを保存した後、エンジンを再起動します。4つのローカル調査役は、それぞれ異なる質問をします。

  • Lookout: 観測されたサンプルに注目すべきシグナルはあるか?
  • Maker: 実際に存在するプロダクト上または技術上の根拠は何か?
  • Skeptic: 矛盾している点、リスク、未検証の点は何か?
  • Runner: 今すぐ調査を進めるのに十分な根拠があるか?

レビューは、エンジンが少なくとも4人の異なる投稿者を観測した後にのみ開始されます。1回の完全なレビューで4件のAPIリクエストを行います。デフォルトの許容量はローリング24時間あたり12リクエストなので、失敗した呼び出しを含めても、許容量内で完了できるレビューは最大3回です。

同一の根拠とモデル入力には、24時間キャッシュされた結果が再利用されます。リクエストには長さを制限した抜粋が含まれ、出力は700トークンに制限されます。許容量はリクエスト数を制御しますが、請求額を固定するものではありません。料金は利用するxAIプランによって異なります。

Grokを有効にすると、収集された抜粋が分析のためにapi.x.aiへ送信されます。キーはバックエンドに保持されます。Grokを使わない場合も、シグナルのグループ化とローカルチェックはモデル呼び出しなしで完全に動作します。

利用できないモデル、使い切った許容量、不正なレスポンス、または創作された引用は、合格結果として扱えません。モデル出力からコードを実行したり、独自にブラウジングしたり、ウォレットを操作したりすることはできません。READMEには、アダプターにモックを使ったテストカバレッジはあるものの、そのチェックアウトでは実際の有料呼び出しを検証していないことも記載されています。

ディスカバリーカプセルを作成して共有する

発見した内容を単独のビジュアル記録にするには、Discoveryでプロジェクトを開き、Discovery capsuleを選択します。AuroraまたはDaylightのスタイルを選び、カードをプレビューしてSVGをダウンロードします。

カプセルには、言及、観測された投稿者、ローカルチェック、Grokのステータス、最大3件のソースアドレス、UTCタイムスタンプを含められます。API呼び出しやソーシャル投稿の自動実行なしに、すべてブラウザ内で生成されます。

表示されるソースアドレスからは、認証情報、クエリ文字列、フラグメントが削除されます。根拠が不足している場合はそのままであり、デモの発見結果にはデモの表示が残るため、共有前に表示内容を確認してください。

追加の入力ソースを使う

Gem Searchはブラウザキャプチャに限定されません。リポジトリに記載されたデータ形式に従うJSONキャプチャをインポートでき、data/inbox/ディレクトリでは外部コレクターからの入力を受け付けられます。

無料のHacker Newsナラティブスキャナーと受信トレイ監視を有効にするには、エンジンを自動操縦モードで起動します。

python3 app.py --autopilot

Hacker Newsの注目度はXのキャプチャとは別に表示されます。公式Xの最近の検索へのアクセスは引き続きオプションで有料です。デフォルトではENABLE_PAID_X=0になっています。

高度な運用のヒント

  • 有料サービスなしで始める: ローカルでのグループ化と証拠確認に、xAIキーや有料のX APIは必要ありません。
  • 要約だけでなくソースを確認する: リンクされた投稿や公開ページを開き、ローカルの確認結果や不明なフィールドと照合してください。
  • 速度はサンプル固有のものとして扱う: 急速な増加は、閲覧セッション中に表示された投稿を反映するものであり、ネットワーク全体を示すものではありません。
  • 協調行動に注意する: 3つの協調アカウントが新しいフレーズを作り出すことがあるため、投稿者の多様性は手がかりであって証明ではありません。
  • キャッシュを再利用する: クロールしたページは30分間、同一のGrokレビューは24時間キャッシュされます。
  • 意図を持って収集する: 通常のスクロールを使うか、必要な場合のみ自動スクロールを有効にしてください。現在のページが無関係になったらスパイダーを一時停止します。
  • 検出器の制限を理解する: 各パスで保持されるのは、最も有力な順に最大10個のティッカー、10個のアドレス、5個のフレーズです。
  • 検出シグナルを起動自動化から分離する: SPIDER_ALLOW_LAUNCH=1 の場合でも、ティッカー、アドレス、新出フレーズが起動キューに入ることはありません。

ホスト型スキャナーとTelegramツール

このプロジェクトでは、gemsearch.funで無料ツールも提供しています。これらはローカルのブラウザー調査ワークフローとは別のもので、スキャンにウォレット接続は必要ありません。

  • スキャナー: Solanaコントラクトアドレスを調べ、権限、ホルダー集中度、開発者保有率、過去のpump.funローンチ、流動性またはカーブの進捗、DEXプロフィール情報、ティッカーのクローンを確認します。
  • Web X線: ローンチブロックの購入者、共通の資金源、ホルダー間の送金を、トランザクションリンク付きで表示します。
  • Bundle Index: 他のローンチブロック購入者の人数に基づいて、新しいpump.funローンチを分類します。
  • Council記録: 恣意的に選んだ例ではなく、保存された判定と後日の結果確認を公開します。
  • Telegramボット: コントラクトアドレスを受け付け、スキャン、X線、監視、アカウント追跡、グループコマンドに対応します。

クルー、クラスター、バンドルはオンチェーンの資金調達パターンを示すものであり、ウォレットが一つの同一人物に属する証明ではありません。高いスコアは、観測されたローンチがより健全であることを示しますが、将来のパフォーマンスを予測するものではありません。

任意のローンチ機能

Gem Searchにはローンチ関連のコンポーネントが含まれていますが、通常の調査とは分離されています。ホスト型のローンチページではブラウザーウォレットからpump.funコインを作成できます。一方、以前の実験的なローカルランチャーはオプトイン方式で、デフォルトではドライランです。

ホスト型ローンチフローでは、ブラウザー内でミントキーを作成し、画像とメタデータをIPFSに保存します。ユーザーを支払者兼所有者とするトランザクションを構築し、署名済みトランザクションがサーバーで構築したものとバイト単位で一致する場合にのみ送信します。Gem Searchは、プラットフォーム手数料を徴収せず、ローンチされたコインの審査や推奨を行わないと説明しています。

任意のローカルモジュールについて、文書化された上限は1回あたり0.025 SOL、ローリング24時間あたり5回です。pump.funはローカルのPumpPortalエグゼキューターを通じてサポートされます。一方、別のSolanaプラットフォームには、互換性のあるHTTPSローンチブリッジアダプターが必要です。現在のSOL予算ポリシーでは、他のチェーンはサポートされていません。

テストの実行と拡張機能のパッケージ化

Nodeの依存関係をインストールし、PythonとJavaScriptのテストを実行して、次のコマンドで拡張機能をパッケージ化します。

npm ci --ignore-scripts
python3 -m unittest discover -s tests -v
npm test
python3 scripts/package_extension.py

パッケージ化スクリプトはdist/gem-search-extension.zipを書き出します。アーカイブには拡張機能のアセットのみが含まれます。これを展開し、展開先のディレクトリを unpacked extension として読み込んでください。Chromeウェブストア用パッケージではありません。

自動テストでは、検証、ルート除外、重複排除、ナラティブ、Grokのキャッシュと利用枠、障害処理、ローカルネットワークのブロック、キューの復旧、任意のトランザクションガードを対象としています。ただし、将来のあらゆるXのレイアウトとの互換性を保証するものではないため、実際のブラウザーでの動作には手動テストも必要です。

まとめ

Gem Searchは、目に見えるブラウザーオーバーレイ、ローカルシグナル検出器、範囲を制限したクローラー、永続的な証拠記録、任意のGrokレビューを組み合わせています。架空のデモから始め、unpacked extensionを接続し、自分が意図的に閲覧した投稿だけを収集してください。そして、シグナルを結論とみなすのではなく、ソースと不明点を通じてすべての発見を評価してください。

実装の詳細については、リポジトリのアーキテクチャドキュメント、プライバシードキュメント、貢献ガイドを参照してください。