Recipes

RAG ナレッジベース

batch distill を使ってドキュメントサイトからベクトルストアを構築する

任意のドキュメントサイトを検索可能な RAG ナレッジベースに変換します。URL をバッチで送信し、完了までポーリング(または Webhook を使用)してから、生成された Markdown をベクトルストアにインデックス化します。

フロー

  1. 取り込む URL を発見する(sitemap、クロール、またはキュレーション済みリスト)
  2. 単一の /batch/distill ジョブで送信する
  3. 完了を待つ(ポーリングまたは Webhook)
  4. 各結果の markdown を埋め込みベクトルにしてベクトルストアに格納する

実装

import httpx, time

API = "https://openapi.thunderbit.com/openapi/v1"
H = {"Authorization": "Bearer YOUR_API_KEY"}

urls = [f"https://docs.example.com/page-{i}" for i in range(50)]
job = httpx.post(f"{API}/batch/distill",
                 headers=H,
                 json={"urls": urls, "include": ["metadata"]}).json()
batch_id = job["data"]["id"]

while True:
    status = httpx.get(f"{API}/batch/distill/{batch_id}", headers=H).json()["data"]
    if status["status"] in ("COMPLETED", "FAILED", "CANCELLED"):
        break
    time.sleep(10)

for r in status["results"]:
    if r["status"] == "SUCCEEDED":
        embed_and_store(r["url"], r["markdown"])

ヒント

  • include: ["metadata"] を使用すると、各結果に title / description が付与され、チャンクヘッダーに利用できます
  • 100 件以上の URL ではポーリングよりも Webhook を推奨 —— Webhook を参照
  • 同じ URL に対する再実行は問題ありません。コンテンツが頻繁に変わる場合は forceRefresh: true でキャッシュをバイパスしてください

関連

このレシピは現在ベクトルストア連携(Pinecone / Weaviate / pgvector)を追加して拡張中です —— 近日中にご確認ください。