UC-AI-006AILv4
Training Data Pipeline(学習データ調達)
モデル学習用データをコンプラ要件込みで継続調達する運用を構築する。
Training DataCrawl API
KPI 例
- 取得量
- 重複率
- 法務クリア率
Training Data の実務では、取得対象を増やすことより、継続して同じ条件で集められること が重要です。Bright Data の AI ユースケースでは Training Data が独立項目として案内されていますが、実装の中心は Crawl API を使った収集ジョブ管理と、保存単位の設計に置くと理解しやすくなります。
誰の課題か
- RAG や継続学習のために公開 Web から定期収集したい MLOps 担当
- 手作りクローラの保守より、取得基盤の標準化を優先したいデータ基盤チーム
- 学習データの更新周期と保持期間を明確にしたい AI プロダクト担当
単発で数ページ集めるだけなら学習データ基盤とは呼べません。対象 URL、取得日時、出力形式、保存先を固定し、再実行時に差分を追えるようにして初めて運用可能になります。
推奨製品セット
| 製品 | 役割 | 使いどころ |
|---|---|---|
| Training Data | ユースケース全体の整理軸 | 学習向けデータ供給の設計単位 |
| Crawl API | 実データの取得 | 複数 URL を Markdown / HTML / JSON で収集する |
- まずは Crawl API で取得ジョブを安定させ、その後に保存先や評価基盤へ広げる順番が安全です。
- 学習用途では Markdown が扱いやすい一方、再解析や監査には HTML も有効です。用途に応じて出力形式を決めます。
最小実装イメージ
Crawl API ジョブを作成する
curl -X POST https://api.brightdata.com/v1/crawl/jobs \
-H "Authorization: Bearer $BRIGHTDATA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"urls": [
"https://example.com/docs/getting-started",
"https://example.com/docs/authentication"
],
"output": "markdown"
}'Python で結果をファイル保存する
import os
import time
import requests
API_KEY = os.getenv("BRIGHTDATA_API_KEY")
BASE_URL = "https://api.brightdata.com/v1/crawl/jobs"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
def create_job(urls: list[str]) -> str:
response = requests.post(
BASE_URL,
headers={**HEADERS, "Content-Type": "application/json"},
json={"urls": urls, "output": "markdown"},
timeout=60,
)
response.raise_for_status()
return response.json()["job_id"]
def wait_until_complete(job_id: str) -> None:
while True:
response = requests.get(f"{BASE_URL}/{job_id}/status", headers=HEADERS, timeout=60)
response.raise_for_status()
status = response.json()["status"]
if status == "completed":
return
if status == "failed":
raise RuntimeError(f"crawl job failed: {job_id}")
time.sleep(10)
def download_result(job_id: str) -> str:
response = requests.get(
f"{BASE_URL}/{job_id}/result?format=markdown",
headers=HEADERS,
timeout=120,
)
response.raise_for_status()
return response.text
if __name__ == "__main__":
job_id = create_job([
"https://example.com/docs/getting-started",
"https://example.com/docs/authentication",
])
wait_until_complete(job_id)
body = download_result(job_id)
with open("training_corpus.md", "w", encoding="utf-8") as f:
f.write(body)この例ではローカル保存までに留めていますが、本番では保存先パス、取得日時、ソース URL 一覧を必ず一緒に残します。
運用ポイント
- 学習データ用の取得ジョブは、検証用途や監査用途のジョブと分けます。同じ URL でも保持期間や出力形式が違うためです。
- URL リストは都度生成せず、版管理できるファイルやテーブルで持ちます。学習データの再現性が上がります。
- クロール結果は本文だけでなく、取得日時、元 URL、ジョブ ID を保持します。後から除外や再取得が必要になるためです。
- 取得件数を増やす前に、重複除去、ドメイン偏り、言語混在のチェックを入れます。
- 公開情報であっても、利用規約、保持期間、削除依頼への対応方針は先に決めておく必要があります。