10月1日、Braveが「AI web grounding: how to ground your LLMs and agents in live web data」と題した記事を公開した。LLMをリアルタイムのWeb情報に接地(グラウンディング)させる手法として、Brave Search APIのLLM Contextエンドポイント1回の呼び出しで検索・抽出・チャンク分割・リランキングを完結させるアプローチが紹介されている。従来のスクレイピングパイプラインとの具体的な比較と、OpenAI互換のAnswersエンドポイントを使った実装例も示されており、実装者にとって即座に参照価値がある内容だ。
RAGとWebグラウンディングの違いを整理する
混同されがちな2つの概念を記事は明確に区別している。
- RAG(Retrieval-Augmented Generation)はアーキテクチャ。ドキュメントを検索して、それを元に回答を生成するパターン。社内ドキュメントやサポートチケットのような静的・内部ナレッジに強い。
- Webグラウンディングはゴール。モデルの出力を現実の検証可能な事実に紐付けること。RAGはその手段のひとつ。
社内RAGでは「今朝のインシデント」「先週のリリースノート」「直近の四半期実績」には答えられない。そこにリアルタイムのWebグラウンディングが必要になる。
また、規制が厳しい業界や本番運用を見据えたプロダクト開発において、回答にソースURLとタイトルを付与できることは大きい。「概念実証」と「出荷可能なプロダクト」の差になると記事は指摘している。
LLMの「知識の鮮度問題」をWebグラウンディングで解決する
LLMはトレーニング時点でデータが凍結されているため、最新情報に関する質問に対して自信満々に間違った回答を返す。これが「ハルシネーション」と「データの陳腐化」という2つの失敗パターンだ。
Webグラウンディングは、クエリ実行時にリアルタイムのWeb情報をモデルに供給することでこの問題に対処する。モデルが「記憶から推測する」のではなく「ソースを引用して答える」状態に変わる。
従来の実装パイプラインの問題点
多くのチームはWebグラウンディングを以下の4ステップで実装している。
- Search APIを叩いてリンクを取得
- PlaywrightやPuppeteerなどのヘッドレスブラウザで各ページをフェッチ
- カスタムHTMLパーサとregexでマークアップをクリーニング
- テキストをチャンク分割してエンベディング
このパイプラインはレイテンシ・コスト・保守コストを積み上げるだけでなく、ナビゲーションバンや広告などのボイラープレートがトークン数を増やし、推論コストを圧迫する。
1回のAPI呼び出しで完結するLLM Contextエンドポイント
Brave Search APIのLLM Contextエンドポイント(/llm/context)は上記パイプライン全体を単一のAPI呼び出しに集約している。検索・コンテンツ抽出・チャンク分割・関連度ランキングをまとめて処理し、プロンプトに直接注入できる状態のテキスト・テーブル・コードを返す。
主なパラメータは以下の3つだ。
maximum_number_of_tokens(1024〜32768):返却するコンテキスト量を上限制御し、プロンプトのトークン予算を守るcontext_threshold_mode(strict/balanced/lenient):低関連度コンテンツを自動的に除外goggles:特定ドメインのブーストや除外をインラインで設定(後処理不要)
import requests
url = "https://api.search.brave.com/res/v1/llm/context"
headers = {
"Accept": "application/json",
"X-Subscription-Token": "YOUR_BRAVE_API_KEY",
}
params = {
"q": "How to implement asyncio in Python 3.12",
"maximum_number_of_tokens": 4096,
"context_threshold_mode": "strict",
"goggles": "$discard,site=pinterest.com\n$discard,site=quora.com",
}
resp = requests.get(url, headers=headers, params=params)
data = resp.json()
# grounding.generic に抽出済みスニペットが格納されている
context = "\n\n".join(
f"{item['title']} ({item['url']}):\n" + "\n".join(item["snippets"])
for item in data["grounding"]["generic"]
)
# sources はURL別のメタ情報。引用の付与に使う
for source_url, meta in data["sources"].items():
print(source_url, "—", meta.get("title"))
レスポンスはgrounding(本文コンテンツ)とsources(URLキーのメタデータ)に分離されており、引用の実装はsourcesをそのまま使うだけで済む。
OpenAI SDKをそのまま使えるAnswersエンドポイント
既存のOpenAIクライアントをそのまま流用したい場合、Answersエンドポイントが使える。base_urlを変更してmodel="brave"を指定するだけで、既存のチャットボットにリアルタイムWeb検索が加わる。
from openai import OpenAI
client = OpenAI(
api_key="YOUR_BRAVE_API_KEY",
base_url="https://api.search.brave.com/res/v1",
)
stream = client.chat.completions.create(
model="brave",
messages=[
{"role": "user", "content": "What were the major updates in the latest PyTorch release?"}
],
stream=True, # 引用にはstreamingが必須
extra_body={"enable_citations": True},
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")
注意点として、引用機能はstream=Trueが必須。引用はストリームされる各デルタのcontentフィールドにJSON形式でタグ付けされて流れてくる。具体的には、引用箇所が[{"url": "...", "title": "..."}]形式のJSONブロックとして本文テキストに埋め込まれる形式であり、ストリームを受け取りながらこのブロックを検出・分離する処理が実装側で必要になる。詳細なスキーマと処理例はAnswersドキュメントを参照のこと。
エージェント・MCP・各フレームワークへの統合
AIエージェントの文脈では、Webグラウンディングは「ツールコール」として機能する。エージェントが新鮮な情報を必要と判断したとき、検索エンドポイントを呼び出して結果を推論に使う。
公式のBrave Search MCPサーバーを使えばModel Context Protocol(MCP)対応クライアントから直接Webグラウンディングをツールとして使える。LangChainおよびLlamaIndex向けの統合も用意されている。
従来スタックとの比較
| タスク | 従来のグラウンディングスタック | Brave Search API |
|---|---|---|
| 検索 | サードパーティAPIまたはスクレイパー | 独自Webインデックス(※Brave自社の主張による) |
| 抽出 | ヘッドレスブラウザ(Puppeteer / Playwright) | 組み込みスマートチャンキング(/llm/context) |
| クリーニング | カスタムHTMLパーサ・regex | 整形済みテキスト・テーブル・コード |
| リランキング | ベクターDB + エンベディングモデル | インラインGoggles + 閾値モード |
| レイテンシ | 高(複数サービスの直列処理) | 低(シングルAPI呼び出し) |
インデックスの独立性とプライバシー
Braveは400億ページ以上の独自Webインデックスを保有しており、Big Tech以外でこのスケールを持つのは数少ない。他エンジンの結果を再販しているプロバイダーとは異なり、クローラーからAPIエンドポイントまでスタック全体を自社で運営している。
プライバシー面では、標準プランではクエリ記録を最大90日間保持(課金・トラブルシューティング・不正防止に限定利用)。エンタープライズ向けにはZero Data Retention(ZDR)オプションもあり、クエリが一切保持されないアーキテクチャを選択できる。
APIキーの取得と月額5ドル分の無料クレジットからトライアルを始められる。
詳細はAI web grounding: how to ground your LLMs and agents in live web dataを参照していただきたい。




