プログラマー向けモードで表示中ビジネスユーザー向けへ
Bright Data 学習ポータル
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 コンポーネントを接続する
BrightDataSERPURL 発見RAG 用の候補ページを見つける
BrightDataUnlocker本文取得一般 Web ページを Markdown などで取得する
BrightDataWebScraper構造化取得対応ドメインのデータを定形で取得する
  • 公式 Docs 上の環境変数名は BRIGHT_DATA_API_KEY です。
  • この学習サイトでは認証ページとの整合を優先し、必要なら起動時に BRIGHTDATA_API_KEY から橋渡ししてください。

最小実装イメージ

pip install haystack-brightdata
import 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 単位も並べて見ないと、どこで費用が増えているか分かりません。

関連リンク