AI

LLMのためのAI対応ベクトルデータセット構築:Bright Data、Google Gemini、Pineconeを使ったガイド

6 分読
Building AI-Ready Vector Datasets for LLMs blog image

大規模言語モデル(LLM)は、私たちが情報にアクセスし、インテリジェントなアプリケーションを構築する方法を変革しています。LLMの可能性を最大限に引き出すには、特にドメイン固有の知識や独自のデータを使用する場合、高品質で構造化されたベクトルデータセットを作成することが重要です。LLMの性能と精度は、入力データの品質に直接結びついています。準備不足のデータセットは劣悪な結果をもたらす可能性があり、一方、十分にキュレーションされたデータセットはLLMを真のドメイン・エキスパートに変えることができます。

このガイドでは、AIに対応したベクターデータセットを生成するための自動パイプラインの構築方法を順を追って説明する。

課題:LLMのためのデータ収集と準備

LLMは膨大な汎用テキストコーパスで学習されますが、商品関連のクエリへの回答、業界ニュースの分析、顧客フィードバックの解釈など、特定のタスクやドメインに適用すると、不足することがよくあります。LLMを真に役立てるには、ユースケースに合わせた高品質のデータが必要です。

このデータは通常、ウェブ上に分散していたり、複雑なサイト構造の背後に隠されていたり、ボット対策によって保護されていたりする。

当社の自動ワークフローは、データセット作成の最も困難な部分を処理する合理化されたパイプラインでこれを解決します:

  • ウェブデータ抽出CAPTCHAや IPブロックのような課題を回避するために、Bright Dataの AIに特化したインフラを活用し、大規模なデータ抽出を行っています。
  • データの構造化Google Geminiを使用して、生のコンテンツを解析、クリーニングし、構造化されたJSONに変換します。
  • 意味の埋め込み。テキストを、豊富な文脈的意味を捉えるベクトル埋め込みに変換する。
  • 保存と検索。高速でスケーラブルなセマンティック検索データベースであるPineconeにベクトルをインデックス。
  • AIに対応した出力ファインチューニングRAG、またはその他のドメイン固有のAIアプリケーションに適した高品質のデータセットを生成します。

コア技術の概要

パイプラインを構築する前に、関連するコアテクノロジーと、それぞれがワークフローをどのようにサポートしているかを簡単に見ておこう。

ブライトデータスケーラブルなウェブデータ収集

AIに対応したベクターデータセットを作成するための最初のステップは、関連性のある高品質なソースデータを収集することです。ナレッジベースやドキュメンテーションのような内部システムから得られるものもあるが、大部分は公共のウェブから得られることが多い。

しかし、最近のウェブサイトは、CAPTCHA、IPレート制限、ブラウザフィンガープリントなどの高度なボット対策メカニズムを使用しているため、大規模なスクレイピングは困難である。

Bright Dataは、データ収集の複雑さを抽象化するWeb Unlocker APIでこの課題を解決します。プロキシのローテーション、CAPTCHAの解決、ブラウザのエミュレーションを自動的に処理するため、データへのアクセス方法ではなく、データに集中することができます。

Google Gemini: インテリジェント・コンテンツ・トランスフォーメーション

Geminiは、Googleによって開発された強力なマルチモーダルAIモデルのファミリーであり、様々なタイプのコンテンツを理解し処理することに優れている。私たちのデータ抽出パイプラインにおいて、Geminiは3つの重要な機能を果たします:

  1. コンテンツの解析:生のHTMLまたは、できればクリーンなMarkdownコンテンツを処理します。
  2. 情報抽出:事前に定義されたスキーマに基づいて特定のデータポイントを特定し、抽出する。
  3. データの構造化:抽出された情報をクリーンで構造化されたJSONフォーマットに変換します。

このAIを活用したアプローチは、特に以下のような使用例において、脆弱なCSSセレクタや壊れやすい正規表現に依存する従来の方法よりも大きな利点をもたらす:

  • 動的ウェブページ– レイアウトやDOMが頻繁に変更されるページ(eコマースサイトニュースポータル、その他の高速ドメインで一般的)。
  • 非構造化コンテンツ:長文や整理されていないテキストブロックから構造化データを抽出する。
  • 複雑な解析ロジック:サイトやコンテンツのバリエーションごとにカスタムスクレイピングルールを維持し、デバッグする必要性を回避。

AIがデータ抽出プロセスにどのような変化をもたらしているかについては、Using AI for Web Scrapingをご覧ください。スクレイピングのワークフローにGeminiを実装するための実践的なチュートリアルをお探しの場合は、包括的なガイドをご覧ください:GeminiによるWebスクレイピングをご覧ください。

文の変形意味埋め込み文の生成

エンベッディングは、高次元空間におけるテキスト(または他のデータタイプ)の密なベクトル表現である。これらのベクトルは意味的な意味を捉え、コサイン類似度やユークリッド距離のようなメトリクスを用いて測定される、類似したテキスト片を近接したベクトルで表現することを可能にする。この特性は、セマンティック検索、クラスタリング、検索拡張生成(RAG)のようなアプリケーションで重要である。

Sentence Transformersライブラリは、高品質の文や段落の埋め込みを生成するための使いやすいインターフェースを提供する。Hugging Face Transformersの上に構築され、意味タスクのために微調整された幅広い事前学習済みモデルをサポートしています。

このエコシステムで最も人気があり、効果的なモデルの1つがオールMiniLM-L6-v2である:

  • アーキテクチャMiniLMアーキテクチャをベースとし、強力なパフォーマンスを維持しながらスピードとサイズを最適化。
  • 次元の埋め込み:入力を384次元のベクトル空間にマッピングし、効率的かつコンパクトにする。
  • トレーニングの目的10億以上の文のペアを対照学習アプローチで微調整し、意味理解を強化。
  • パフォーマンス文の類似性、意味クラスタリング、情報検索などのタスクにおいて、最先端またはそれに近い結果を提供。
  • 入力の長さ:最大256の単語(トークン)を扱うことができ、それ以上のテキストは自動的に切り捨てられます。

より大きなモデルはより微妙なエンベディングを提供するかもしれないが、all-MiniLM-L6-v2は性能、効率、コストの間で非常に優れたバランスを提供する。その384次元ベクトルは

  • 計算が速い。
  • リソースをあまり必要としない。
  • 保管と索引付けが容易。

ほとんどの実用的なユースケース、特に初期段階の開発やリソースに制約のある環境では、このモデルで十分すぎる。エッジケースにおける精度のわずかな低下は、通常、スピードとスケーラビリティの大幅な向上によって相殺されます。そのため、AIアプリケーションの最初のイテレーションを構築する場合や、控えめなインフラストラクチャでパフォーマンスを最適化する場合は、all-MiniLM-L6-v2を使用することをお勧めします。

Pineconeベクトル埋め込み画像の保存と検索

テキストがベクトル埋め込みデータに変換されると、それを効率的に保存、管理、照会するための専用のデータベースが必要になります。従来のデータベースはこのために設計されていません。ベクトル・データベースは、埋め込みデータの高次元の性質を扱うために特別に設計されており、RAGパイプライン、セマンティック検索、パーソナライゼーション、その他のAI駆動型アプリケーションに不可欠なリアルタイムの類似性検索を可能にします。

Pineconeは、開発者フレンドリーなインターフェイス、低レイテンシの検索パフォーマンス、完全に管理されたインフラストラクチャで知られる人気のベクトルデータベースです。ベクトル検索インフラストラクチャの複雑さを抽象化することで、複雑なベクトルインデックスと検索を効率的に管理します。主なコンポーネントは以下の通りです:

  • インデックス:ベクターの保存容器。
  • ベクトル:実際の埋め込みと関連するメタデータ。
  • コレクション:バックアップとバージョン管理のためのインデックスの静的スナップショット。
  • 名前空間:マルチテナントのためのインデックス内のデータ分割。

Pineconeは2つのデプロイメントアーキテクチャを提供する:ServerlessPod-Based です。ほとんどのユースケース、特に開始時や動的な負荷に対処する場合は、シンプルさとコスト効率からサーバーレスが推奨されます。

セットアップと前提条件

パイプラインを構築する前に、以下のコンポーネントが適切に設定されていることを確認する。

前提条件

  • Python 3.9以降がシステムにインストールされていること。
  • 以下のAPI認証情報を収集する

各APIキーの生成方法については、以下のツール固有の設定セクションを参照してください。

必要なライブラリのインストール

このプロジェクトのコアとなるPythonライブラリをインストールする:

pip install requests python-dotenv google-generativeai sentence-transformers pinecone

これらのライブラリーは提供している:

  • リクエストAPIと対話するための一般的なHTTPクライアント(リクエストガイド)
  • python-dotenv: 環境変数からAPIキーを安全にロードする
  • google-generativeai:Googleによる公式Gemini SDK (JavaScriptGo、その他の言語もサポート)
  • センテントランスフォーマー意味ベクトル埋め込み生成のための事前学習済みモデル
  • pinecone:Pineconeのベクトルデータベース用SDK(Python、Node.js、Goなどの言語SDKが利用可能)

環境変数の設定

プロジェクトのルート・ディレクトリに.envファイルを作成し、APIキーを追加する:

BRIGHT_DATA_API_KEY="your_bright_data_api_key_here"
GEMINI_API_KEY="your_gemini_api_key_here"
PINECONE_API_KEY="your_pinecone_api_key_here"

ブライトデータ設定

Bright DataのWeb Unlockerを使用するには:

  1. APIトークンの作成
  2. Bright DataのダッシュボードからWeb Unlockerゾーンを設定します。

実装例と統合コードについては、Web Unlocker GitHub リポジトリをご覧ください。

まだソリューションを比較しているのであれば、このAIスクレイピングツールの比較で、Bright Dataが他のプラットフォームとどのように比較されるかを知ることができます。

ジェミニのセットアップ

Gemini APIキーを生成する:

  1. グーグルAIスタジオへ
  2. API キーの作成」をクリックする
  3. 鍵をコピーして安全に保管する

ヒント:開発や小規模なテストには無料版で十分です。より高いスループット(RPM/RPD)、より大きなトークン・ウィンドウ(TPM)、またはエンタープライズ・グレードのプライバシーや高度なモデルへのアクセスが必要な場合は、料金制限と 料金プランを参照してください。

松ぼっくりセットアップ

  1. Pinecone.ioにサインアップする
  2. ダッシュボードからAPIキーをコピーする
  3. 新しいindex
    :Polylangプレースホルダーを

    作成するには、以下の部分を

    変更しないで

    ください。

セットアップが完了すると、インデックスのステータスが緑色になり、レコード数がゼロになります。

松ぼっくりインデックス設定

パイプラインの構築ステップ・バイ・ステップの実施

さて、前提条件が設定できたので、実際の例としてWalmartのMacBook Air M1の商品レビューを使ってデータパイプラインを構築してみよう。

ウォルマート・マックブック・レビュー

ステップ1:Bright Data Web Unlockerによるデータ取得

当社のパイプラインの基本は、ターゲット URL から生の HTML コンテンツをフェッチすることです。Bright Data の Web Unlocker は、Walmart のような E コマースサイトで一般的に採用されている高度なスクレイピング対策をバイパスすることに優れています。

ウォルマート・ロボット検知

まず、ウェブページのコンテンツをフェッチするための実装から始めよう:

import requests
import os
from dotenv import load_dotenv

# Load API key from environment
load_dotenv()
BRIGHT_DATA_API_KEY = os.getenv("BRIGHT_DATA_API_KEY")

def fetch_page(url: str) -> str:
    """Fetch page content using Bright Data Web Unlocker (Markdown format)"""
    try:
        response = requests.post(
            "https://api.brightdata.com/request",
            headers={
                "Authorization": f"Bearer {BRIGHT_DATA_API_KEY}",
                "Content-Type": "application/json",
            },
            json={
                "zone": "web_unlocker2",
                "url": url,
                "format": "raw",
                "data_format": "markdown",  # Direct HTML-to-Markdown conversion
            },
            timeout=60,
        )

        if response.status_code == 200 and len(response.text) > 1000:
            return response.text

    except Exception as e:
        print(f"Request failed: {str(e)}")

    return None

# Example usage
walmart_url = "https://www.walmart.com/reviews/product/609040889?page=1"
page_content = fetch_page(walmart_url)

if page_content:
    print(f"Success! Retrieved {len(page_content)} characters")
else:
    print("Failed to fetch page")

なぜ生のHTMLではなくMarkdownを使うのか?私たちのパイプラインでは、いくつかの重要な理由から、コンテンツをMarkdownフォーマット(data_format: 'markdown')でリクエストしています。Markdownは、HTMLタグ、スタイリング、その他のノイズを取り除き、複雑さを減らし、本質的なコンテンツだけを残します。その結果、トークン数が大幅に少なくなり、LLMの処理がより効率的になります。また、よりクリーンで読みやすいフォーマットで意味構造を保持し、明快さと処理速度の両方を向上させます。エンベッディングの生成やベクトルインデックスの作成といった処理も、より速く、より軽くなります。

最新のAIエージェントがなぜMarkdownを好むのか、その背景については、「新しいAIエージェントはなぜHTMLよりMarkdownを選ぶのか」をお読みください。

ステップ2:ページネーションの処理

ウォルマートは商品レビューを多数のページに分散させている。完全なデータセットを取得するには、ページネーション処理を実装します。必要なのは

  1. 正しいページのURLを作成する(?page=1?)
  2. 各ページのコンテンツを取得する
  3. 次のページ」があるかどうかを検出する
  4. 利用可能なページがなくなるまで続ける

以下は、page=n+1参照が見つからなくなるまでコンテンツをフェッチする、単純なページネーション・ループです:

current_page = 1

while True:
    url = f"https://www.walmart.com/reviews/product/609040889?page={current_page}"
    page_content = fetch_page(url)

    if not page_content:
        print(f"Stopping at page {current_page}: fetch failed or no content.")
        break

    # Do something with the fetched content here
    print(f"Fetched page {current_page}")

    # Check for presence of next page reference
    if f"page={current_page + 1}" not in page_content:
        print("No next page found. Ending pagination.")
        break

    current_page += 1

ステップ3:Google Geminiによる構造化データ抽出

前のステップで作成したクリーンなMarkdownコンテンツを使って、今度はGoogle Geminiを使ってレビューから特定の情報を抽出し、JSONとして構造化する。これにより、構造化されていないテキストは、ベクトルデータベースが効率的にインデックスを作成できるように、整理されたデータに変換される。

今回の使用例では、素晴らしいスペックを持つgemini-2.0-flashモデルを使用する:

  • 入力コンテキスト1,048,576トークン
  • 出力制限:8,192トークン
  • マルチモーダルサポート:テキスト、コード、画像、音声、ビデオ

私たちの場合、Walmartのレビューページのマークダウンテキストは通常約3,000トークンを含み、モデルの制限内に十分収まります。つまり、小さなチャンクに分割することなく、ページ全体を一度に送信できるのだ。

トークン・カウント

ドキュメントがコンテキストウィンドウを超える場合は、チャンキング戦略を実行する必要があります。しかし、一般的なウェブページであれば、Geminiの容量があればこのようなことは必要ありません。

以下は、Geminiを使って構造化されたJSON形式でレビューを抽出するPython関数のサンプルです:

import google.generativeai as genai
import json

# Initialize Gemini with JSON output configuration
model = genai.GenerativeModel(
    model_name="gemini-2.0-flash",
    generation_config={"response_mime_type": "application/json"},
)

def extract_reviews(markdown: str) -> list[dict]:
    """Extract structured review data from Markdown using Gemini."""
    prompt = f"""
    Extract all customer reviews from this Walmart product page content.
    Return a JSON array of review objects with the following structure:

    {{
      "reviews": [
        {{
          "date": "YYYY-MM-DD or original date format if available",
          "title": "Review title/headline",
          "description": "Review text content",
          "rating": <integer from 1–5>
        }}
      ]
    }}

    Rules:
    - Include all reviews found on the page
    - Use null for any missing fields
    - Convert ratings to integers (1–5)
    - Extract the full review text, not just snippets
    - Preserve original review text without summarizing

    Here's the page content:
    {markdown}
    """

    response = model.generate_content(prompt)
    result = json.loads(response.text)

    # Normalize and clean results
    return [
        {
            "date": review.get("date"),
            "title": review.get("title"),
            "description": review.get("description", "").strip(),
            "rating": review.get("rating"),
        }
        for review in result.get("reviews", [])
    ]

LLMを扱う場合、迅速なエンジニアリングが鍵となる。私たちの実装では、response_mime_type:「application/json "を設定し、Geminiが有効なJSONを返すようにして、複雑なテキスト解析の必要性を排除している。プロンプト自体は、提供されたコンテンツのみに依存するようにGeminiに指示することで、幻覚を減らすように注意深く設計されている。また、構造的な一貫性を保つために厳格なJSONスキーマを強制し、要約せずにレビューの全文を保持し、欠落したフィールドを潔く処理します。

ウォルマートのレビューページを処理すると、このような構造化データを受け取ることになる:

[
  {
    "date": "Apr 13, 2025",
    "title": "Better than buying OPEN BOX",
    "description": "I bought an older product OPEN BOX (which I consider UNUSED) from another website. The battery was dead. Walmart offered NEW at a lower price. WOW!!!!",
    "rating": 5
  },
  {
    "date": "Dec 8, 2024",
    "title": "No support",
    "description": "The young man who delivered my laptop gave me the laptop with no receipt or directions. I asked where my receipt and some kind of manual were. He said it would be under my purchases. I would happily change this review if I knew where to go for help and support. The next day I went to the electronics department for help, and he had no idea.",
    "rating": 3
  }
  // ... more reviews
]

すべてのステップ(取得、処理、抽出)を組み合わせた動作例については、GitHubにある完全な実装をチェックしてほしい。

ステップ4:文変換器によるベクトル埋め込み生成

JSON形式のクリーンで構造化されたレビューデータを使って、各レビューのセマンティックベクトル埋め込みを生成します。これらの埋め込みは、セマンティック検索やPineconeのようなベクトルデータベースでのインデックス付けのような下流のタスクに使用されます。

カスタマーレビューの完全なコンテキストをキャプチャするために、埋め込み前にレビューのタイトルと 説明を1つの文字列にまとめます。これは、モデルがセンチメントと主題の両方をより効果的にエンコードするのに役立ちます。

これがサンプルコードだ:

from sentence_transformers import SentenceTransformer

# Load the embedding model
model = SentenceTransformer("all-MiniLM-L6-v2")

def generate_embeddings(reviews):
    """Generate 384-dimensional vector embeddings from review titles and descriptions."""
    texts = []
    valid_indices = []

    # Combine title and description into a single string for embedding
    for idx, review in enumerate(reviews):
        text_parts = []
        if review.get("title"):
            text_parts.append(f"Review Title: {review['title']}")
        if review.get("description"):
            text_parts.append(f"Review Description: {review['description']}")

        if text_parts:
            texts.append(". ".join(text_parts))
            valid_indices.append(idx)

    # Generate embeddings using batch processing
    embeddings = model.encode(
        texts, show_progress_bar=True, batch_size=32, convert_to_numpy=True
    ).tolist()

    # Attach embeddings back to original review objects
    for emb_idx, review_idx in enumerate(valid_indices):
        reviews[review_idx]["embedding"] = embeddings[emb_idx]

    return reviews

このコードは何をするのか:

  1. モデルの初期化:384次元の密な埋め込みを返すall-MiniLM-L6-v2モデルをロードします。
  2. 入力準備:各レビューのタイトルと 説明を1つの文字列にまとめます。
  3. バッチエンコーディング:効率的な処理のためにバッチ処理でmodel.encode()を使用
    します。
  4. 埋め込みインジェクション: embedding "をキーに各ベクトルを対応するレビューオブジェクトに戻す。

重要:PineconeはメタデータのNULL値をサポートしていません。フィールドがない場合は、Pineconeにアップロードする際にキーを完全に省略する必要があります。フィルタリングロジックで特定の意味を持たない限り、"N/A"や空の文字列は使用しないでください。

ここでは(コードを読みやすくするために)サニタリー機能は示していないが、最終的な実装には、取り込み前のメタデータのクリーンアップが含まれる。

埋め込み生成後、各レビューオブジェクトは384次元ベクトルを含む:

{
  "date": "Apr 9, 2024",
  "title": "Amazing Laptop!",
  "description": "This M1 MacBook Air is incredibly fast and the battery lasts forever.",
  "rating": 5,
  "embedding": [0.0123, -0.0456, 0.0789, ..., 0.0345]  // 384 dimensions
}

エンベッディングが生成され、レビューがPineconeにベクター保存される準備が整った。

ステップ5:埋め込みとメタデータをPineconeに保存する

パイプラインの最後のステップでは、埋め込まれたレビューをPineconeにアップロードします。

以下は、PineconeにデータをアップサートするPythonコードです:

import uuid
from pinecone import Pinecone, Index

# Initialize Pinecone client with your API key
pc = Pinecone(api_key="PINECONE_API_KEY")
index = pc.Index("brightdata-ai-dataset")  # Replace with your actual index name

# Sample review data (with embeddings already attached)
reviews_with_embeddings = [
    {
        "date": "Apr 9, 2024",
        "title": "Amazing Laptop!",
        "description": "This M1 MacBook Air is incredibly fast and the battery lasts forever.",
        "rating": 5,
        "embedding": [0.0123, -0.0456, ..., 0.0789],  # 384-dimensional vector
    }
    # ... more reviews
]

# Prepare vector records for upload
vectors = []
for review in reviews_with_embeddings:
    if "embedding" not in review:
        continue  # Skip entries without embeddings

    vectors.append(
        {
            "id": str(uuid.uuid4()),  # Unique vector ID
            "values": review["embedding"],
            "metadata": {
                "title": review.get("title"),
                "description": review.get("description"),
                "rating": review.get("rating"),
                # Add more metadata fields if needed
            },
        }
    )

# Batch upload to Pinecone (100 vectors per request)
for i in range(0, len(vectors), 100):
    batch = vectors[i : i + 100]
    index.upsert(vectors=batch)

Pineconeにアップサートする各ベクターには、以下を含める必要があります:

  • id:一意な文字列識別子 (必須)
  • :ベクトルそのもの(浮動小数点数のリスト、例えば384次元)
  • メタデータ:フィルタリングとコンテキストのためのオプションのキーと値のペア(JSON互換)

ベクトル構造の例:

アップロードが完了すると、Pineconeインデックスにレビューベクターが入力されます:

記録付き松ぼっくりインデックス

AIに対応したベクターデータセットがPineconeに保存され、次のステップ🔥に進む準備が整いました。

すべてのステップ(埋め込み生成、Pineconeアップロード)を組み合わせた動作例については、GitHubにある完全な実装をご覧ください。

(オプションだが推奨)AI-Readyデータセットの活用

エンベッディングがPineconeでインデックス化されたことで、セマンティック検索やRAGシステムなどのアプリケーションをパワーアップできます。このステップでは、ベクターデータベースを照会し、インテリジェントな応答を生成する方法を示します。

セマンティック検索

ベクトル化されたデータセットを活用する最も簡単な方法は、セマンティック検索です。キーワード検索とは異なり、セマンティック検索では、ユーザーは自然言語でクエリーを行い、たとえ同じ単語を共有していなくても、概念的に類似したコンテンツを検索することができます。

自然言語によるクエリーでシステムをテストしてみよう:

queries = [
    "good price for students",
    "lightweight and good for travel",
]

学生にとって良い価格」というクエリに対しては、次のように表示される:

#1 (Score: 0.6201)
ID: 75878bdc-8d96-416a-8292-484971c3bd61
Date: Aug 3, 2024
Rating: 5.0
Description: Just what my daughter needed for college and the price was perfect

#2 (Score: 0.5868)
ID: 758963ae-0927-4e82-bece-d098991f5a73
Date: Jun 13, 2024
Rating: 5.0
Description: The price was right. Perfect graduation present for my grandson

見事に機能します!自然言語によるクエリは、関連性の高い結果を返します。

これがセマンティック検索の仕組みだ:

  1. クエリの埋め込み:検索クエリは、インデックス作成に使用されたのと同じall-MiniLM-L6-v2モデルを使用してベクトルに変換される。
  2. ベクトル検索:Pineconeはコサイン類似度を使用して最も類似したベクトルを見つけます。
  3. メタデータの検索:結果には類似度スコアと関連メタデータの両方が含まれます。

完全な実装については、こちらをご覧ください:セマンティックサーチクライアントのPythonファイル

検索を超える:検索拡張世代(RAG)

セマンティック検索が機能するようになれば、LLMを利用したRAGシステムの構築まであと一歩です。検索拡張生成(RAG)により、LLMはベクトル化されたデータセットのような外部コンテキストを使用して、根拠のある応答を生成することができます。

RAGフロー:

  1. ユーザーが質問する(例:「このMacBookは大学生に適していますか?)
  2. 意味検索はPineconeから関連文書を検索します。
  3. 検索されたコンテキストと質問は、Google GeminiのようなLLMに送られる。
  4. LLMはあなたのデータセットから得た事実を回答する。

RAGの回答例:

🤔 User: Is the battery life good for college use?
🤖 Assistant: Yes, users report long battery life—enough to last through full days of classes and study.

🤔 User: How does this compare to a Chromebook?
🤖 Assistant: One review says the MacBook Air "works so smoothly compared to a Chromebook".

RAGとセマンティック検索に使用されている全コードをご覧ください:RAGチャットボットの実装

次のステップ

AIに対応したベクターデータセットを作成するための完全なパイプラインを構築することに成功しました。ここでは、実装を拡張して最適化する方法を説明します:

  1. 大規模なデータ取得より広範なデータニーズには、AIモデルとエージェントに最適化された、無制限でコンプライアンスに準拠したウェブデータアクセスが可能なBright DataのAI-Ready Web Data Infrastructureをご利用ください。
  2. 埋め込みモデルの実験: all-MiniLM-L6-v2は効率的ですが、より大きなモデルや多言語モデルに切り替えることで、特定のユースケースでより良い結果が得られるかもしれません。また、Google Geminiや OpenAIのAPIを埋め込んでみることもできます。
  3. 抽出プロンプトを絞り込む:Geminiプロンプトを、抽出する必要のあるさまざまなWebサイト構造やデータスキーマに合わせて調整します。
  4. 高度な Pinecone 機能の活用:フィルタリング、名前空間、メタデータインデックス、ハイブリッド検索など、Pinecone の公式ドキュメントをご覧ください。
  5. パイプラインを自動化する:オーケストレーションにはApache AirflowやPrefect、クラウドネイティブなスケジューリングにはAWS Step FunctionsやGoogle Cloud Workflowsなどのツールを使って、本番ワークフローにこのパイプラインを統合する。
  6. AIを活用したアプリケーションの構築セマンティック検索やRAGコンポーネントを使用して、カスタマーサポートチャットボット、ナレッジベース検索、レコメンデーションエンジンなどの実世界のツールを作成します。

結論

AI 対応のベクトルデータセットを作成・管理し、生のウェブデータを大規模な言語モデル用の貴重な資産に変換する、完全で堅牢なパイプラインの構築に成功しました。スケーラブルなウェブスクレイピングのためのBright Data、インテリジェントな構造化抽出のためのGoogle Gemini、セマンティック埋め込みを生成するためのSentence Transformers、ベクトルストレージと検索のためのPineconeを組み合わせることで、LLMアプリケーションを強化するためのカスタムデータを効果的に準備することができます。

このアプローチにより、LLMは特定のドメイン知識を根拠とし、より正確で、適切で、価値のあるAIを活用したソリューションを提供することができる。

クレジットカードは必要ありません