UC-DEV-006DeveloperLv4
Haystack 連携エージェント
Haystack パイプラインに Bright Data のフェッチノードを組み込む。
Haystack
KPI 例
- パイプライン成功率
- 取得遅延
Haystack 連携では、Bright Data を「RAG に入れる前の取得層」として扱うのが基本です。公式 Docs では haystack-brightdata が案内されており、Bright Data Web Scraper、SERP、Unlocker を Haystack コンポーネントとしてそのまま組み込めます。
誰の課題か
- Haystack で RAG や QA を組んでいるが、検索対象の取得層が不安定なチーム
- Amazon などの構造化データと、一般 Web コンテンツの両方を 1 本のパイプラインに入れたい開発者
- 検索結果の URL 発見から本文取得までを、Haystack 側のコンポーネントとして扱いたい担当者
推奨製品セット
| 製品 | 役割 | このページでの使い方 |
|---|---|---|
| Haystack | パイプライン基盤 | Bright Data コンポーネントを接続する |
| BrightDataSERP | URL 発見 | RAG 用の候補ページを見つける |
| BrightDataUnlocker | 本文取得 | 一般 Web ページを Markdown などで取得する |
| BrightDataWebScraper | 構造化取得 | 対応ドメインのデータを定形で取得する |
- 公式 Docs 上の環境変数名は
BRIGHT_DATA_API_KEYです。 - この学習サイトでは認証ページとの整合を優先し、必要なら起動時に
BRIGHTDATA_API_KEYから橋渡ししてください。
最小実装イメージ
pip install haystack-brightdataimport os
from haystack_brightdata import BrightDataSERP, BrightDataUnlocker
if os.getenv("BRIGHTDATA_API_KEY") and not os.getenv("BRIGHT_DATA_API_KEY"):
os.environ["BRIGHT_DATA_API_KEY"] = os.environ["BRIGHTDATA_API_KEY"]
serp = BrightDataSERP(
default_search_engine="google",
default_country="us",
default_language="en",
)
unlocker = BrightDataUnlocker(default_output_format="markdown")
search_result = serp.run(
query="machine learning tutorials",
num_results=20,
search_type="web",
)
page_result = unlocker.run(
url="https://example.com/restricted-content",
output_format="markdown",
)
print(search_result)
print(page_result["content"])BrightDataSERPで候補 URL を見つけ、BrightDataUnlockerで本文を取りに行く、という二段構成です。- RAG でよくある失敗は「検索ゼロ件」なのか「本文取得失敗」なのかが曖昧なことなので、コンポーネントを分けておく価値があります。
構造化データが欲しいなら WebScraper を使う
from haystack_brightdata import BrightDataWebScraper
scraper = BrightDataWebScraper()
result = scraper.run(
dataset="amazon_product",
url="https://www.amazon.com/dp/B08N5WRWNW",
)
print(result["data"])- 対応ドメインでは、一般ページ取得より構造化出力のほうが後段のチャンク化やメタデータ管理が簡単です。
運用ポイント
- SERP、Unlocker、WebScraper は同じ Bright Data でも役割が違うため、Haystack の中で 1 コンポーネントにまとめすぎないほうが保守しやすいです。
- RAG 品質は埋め込みやリトリーバだけでなく「何を取得したか」に強く依存するので、取得段階で URL、取得時刻、元ドメインを必ず残してください。
- 一般 Web コンテンツは Markdown 化してからインデックスへ流すと、HTML 直投入よりノイズを減らしやすくなります。
- 構造化データを扱うパイプラインと自由文本文を扱うパイプラインは、同じインデックスに雑に混ぜずメタデータで区別するべきです。
- コスト確認はモデル側だけでなく Bright Data 側の取得件数・zone 単位も並べて見ないと、どこで費用が増えているか分かりません。