5:31Better Stack
Log in to leave a comment
No posts yet
ウェブページのHTMLを単純にテキストとしてのみ抽出すると、AIエージェントは道に迷います。テキストは見えても、文書の構造(階層)が失われるためです。2024年に発表された研究データによると、文書の階層構造を保持する方式が、単純にテキストを分割する方式よりも検索精度を30%以上向上させます。私は、エージェントがヘッダー情報を見てデータの重要度を即座に把握できるようにすることが核心であると確信しています。
まず最初に行うべきことは、BeautifulSoupのget_text()を捨てることです。代わりにMarkdownifyライブラリを使用し、HTMLタグをMarkdownヘッダーにマッピングしてください。変換されたMarkdownをヘッダー単位で分割し、上位セクション全体をコンテキストとして提供する「上位-下位チャンキング」戦略を採るべきです。Trafilaturaライブラリを併用すれば、本文抽出と同時にトークン消費量を最大67%まで削減できます。コストを抑えつつ精度を高める、最も確実な方法です。
JavaScriptで実装されたタブメニューやアコーディオンの背後に隠れたデータは、静的なクローラーでは決して読み取れません。私は、このような見えないデータがRAGシステムの回答品質を低下させる主犯だと考えています。Playwrightはブラウザの標準プロトコルであるCDPに直接接続するため、Seleniumよりも高速かつ強力に動的コンテンツを制御します。実際の適用事例を見ると、自動クリックシーケンスを実装したシステムが、手動収集よりも30%多くのデータを確保しました。
Playwrightベースの自動化ロジックを構築する際は、page.wait_for_selector機能をループで回してください。クリック可能な要素が画面に現れるまで、確実に待機する必要があります。次に、scroll_into_view_if_needed()メソッドを呼び出し、無限スクロールやAJAXリクエストを強制的に発生させます。各タブを順次クリックし、変化したDOMの状態をリアルタイムでキャプチャして保存してください。このプロセスを経て、ようやく欠落のないデータベースが完成します。
広告、フッター、メニューバーは、エージェントのコンテキストウィンドウを浪費し、埋め込みベクトルを汚染します。ウェブサイトのノイズは想像以上に深刻で、精製されていないデータはAIにとって毒も同然です。Readability.jsは、テキストとリンクの密度を分析し、実際の情報が含まれる本文のみを選別します。ベンチマーク結果では、Readabilityはあらゆるページタイプで0.970のパフォーマンス中央値を記録し、本文以外の要素を正確に除去しました。
データ精製パイプラインにこのアルゴリズムを組み込んでください。収集したHTMLをReadability.jsに投入してタイトルと本文のみをフィルタリングした後、正規表現で不要な空白を削除する必要があります。このように精製されたテキストをMarkdownに変換して保存すれば、エージェントが読み取るデータ量が最大90%削減されます。検索の関連性は2.29倍向上します。無理に多くのデータを入れるよりも、綺麗なデータを入れる方がはるかに効率的です。
ほとんどのウェブサイトは、navigator.webdriverフラグを見てAIエージェントのアクセスをブロックします。CAPTCHA画面に直面したくないのであれば、ステルス戦略が不可欠です。機械的な動きはすぐに露呈します。私は、数学的に人間の行動を模倣する方式が最も賢明な解決策だと見ています。
まず、playwright-stealthプラグインを使ってウェブドライバーフラグを消去し、ユーザーエージェントを最新のChromeバージョンに偽装してください。マウスを動かすときは、直線ではなくベジェ曲線を使うべきです。
タイピングの際も、文字ごとに50msから200msの間のランダムな遅延を入れてください。ページを移動する際に2秒から5秒ほどランダムに休止するだけでも、アンチボットシステムの目を欺くことができます。少し遅く見えるかもしれませんが、ブロックされて全く収集できないよりもはるかに高速です。