mcpField
L
llm-context

llm-context

github.com/braveエージェントワークフロー1921.3k 回インストール11 週間前に更新
リポジトリ

llm-context について

llm-context は Brave Search API のウェブコンテンツ抽出機能で、エージェントや RAG パイプライン、最新情報を必要とする LLM アプリ向けです。関連度順のスニペットや表、コードなどを返し、回答の根拠として利用できます。

主な機能

  1. 01関連するページ内容の検索と抽出
  2. 02テキスト断片と構造化データの返却
  3. 03コンテキスト量と関連度しきい値の設定
  4. 04Goggles によるソースの絞り込みと順位調整
  5. 05位置情報に基づく検索

活用シーン

  1. 01最新のウェブ情報で RAG を根拠付け
  2. 02エージェント処理に検索コンテキストを提供
  3. 03事実確認と情報源の収集

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/brave/brave-search-skills --skill llm-context

インストール後、Claude Code で/llm-contextを入力して読み込まれたか確認します。

詳細

LLM Context

API キーが必要です:https://api.search.brave.com で取得してください。

プラン:Search プランに含まれています。https://api-dashboard.search.brave.com/app/subscriptions/subscribe をご覧ください。

Brave LLM Context API は、リアルタイム検索結果に基づく LLM の応答生成に最適化された、関連性順にランク付け済みのウェブコンテンツを抽出して提供します。リンクやスニペットを返す従来のウェブ検索 API とは異なり、LLM Context は実際のページコンテンツ(テキストチャンク、表、コードブロック、構造化データ)を抽出するため、LLM や AI エージェントがそのまま内容を推論に利用できます。

LLM Context と AI Grounding の比較

機能LLM Context(本機能)AI Grounding(answers)
出力お客様の LLM 向けに抽出した生のコンテンツ引用付きのエンドツーエンドの AI 回答
インターフェースREST API(GET/POST)OpenAI 互換の /chat/completions
検索リクエストごとに 1 回の検索複数回の検索(反復的な調査)
速度高速(<1s)低速
プランSearchAnswers
エンドポイント/res/v1/llm/context/res/v1/chat/completions
最適な用途AI エージェント、RAG パイプライン、ツール呼び出しチャットインターフェース、調査モード

エンドポイント

GET  https://api.search.brave.com/res/v1/llm/context
POST https://api.search.brave.com/res/v1/llm/context

認証:X-Subscription-Token: <API_KEY> ヘッダー

任意のヘッダー:

  • Accept-Encoding: gzip — gzip 圧縮を有効にします

クイックスタート

GET リクエスト
curl -s "https://api.search.brave.com/res/v1/llm/context?q=tallest+mountains+in+the+world" \
  -H "Accept: application/json" \
  -H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}"
POST リクエスト(JSON ボディ)
curl -s --compressed -X POST "https://api.search.brave.com/res/v1/llm/context" \
  -H "Accept: application/json" \
  -H "Accept-Encoding: gzip" \
  -H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{"q": "tallest mountains in the world"}'
Goggles を使用する場合(インライン)
curl -s "https://api.search.brave.com/res/v1/llm/context" \
  -H "Accept: application/json" \
  -H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}" \
  -G \
  --data-urlencode "q=rust programming" \
  --data-urlencode 'goggles=$discard
$site=docs.rs
$site=rust-lang.org'

パラメーター

クエリパラメーター
パラメーター型必須デフォルト説明
qstringはい-検索クエリ(1~400 文字、最大 50 語)
countrystringいいえUS検索対象の国(2 文字の国コードまたは ALL)
search_langstringいいえen言語設定(2 文字以上の言語コード)
countintいいえ20対象とする検索結果の最大数(1~50)
spellcheckboolいいえtrue検索前にクエリのスペルチェックを行うかどうか
freshnessstringいいえ""ページの経過時間で検索結果を絞り込みます。ページの経過時間は、公開日や最終更新日など、コンテンツが示す最も関連性の高い日付に基づいて判定されます。指定可能な値:pd(24 時間以内)、pw(7 日以内)、pm(31 日以内)、py(365 日以内)、またはカスタムの日付範囲 YYYY-MM-DDtoYYYY-MM-DD(例:2022-04-01to2022-07-30)。
コンテキストサイズのパラメーター
パラメーター型必須デフォルト説明
maximum_number_of_urlsintいいえ20レスポンスに含める URL の最大数(1~50)
maximum_number_of_tokensintいいえ8192コンテキストのトークン数のおおよその上限(1024~32768)
maximum_number_of_snippetsintいいえ50すべての URL を対象とするスニペットの最大数(1~256)
maximum_number_of_tokens_per_urlintいいえ4096個々の URL ごとのトークン数の最大値(512~8192)
maximum_number_of_snippets_per_urlintいいえ50個々の URL ごとのスニペットの最大数(1~100)
フィルタリングとローカル検索のパラメーター
パラメーター型必須デフォルト説明
context_threshold_modestringいいえnullコンテンツを含める際の関連性のしきい値(strict/balanced/lenient/disabled)
safesearchstringいいえnull成人向けコンテンツのフィルター(off/moderate/strict)。未設定の場合はフィルタリングされません。ただし、ローカル検索は strict のままです。
enable_localboolいいえnullローカル検索の制御(true/false/null。下記参照)
gogglesstring/listいいえnullカスタムの再ランキングに使用する Goggle の URL またはインライン定義
enable_source_metadataboolいいえfalse各 sources[url] エントリに site_name、favicon、thumbnail、description を追加します

コンテキストサイズのガイドライン

タスクの種類件数max_tokens例
簡単な事実確認52048"Pythonが作られたのは何年ですか?"
標準的なクエリ208192"Reactフックのベストプラクティス"
複雑な調査5016384"本番環境向けAIフレームワークの比較"

コンテキストウィンドウを大きくすると、より多くの情報を得られますが、推論のレイテンシとコストが増加します。まずはデフォルト値を使用し、必要に応じて調整してください。

しきい値モード

モード動作
null(未設定)デフォルト — 現在のAPIバージョンでは lenient に解決されます
strictより高いしきい値 — 件数は少なくなりますが、関連性の高い結果が得られます
balanced網羅性と関連性のバランスが取れています
lenientより低いしきい値 — 結果は増えますが、関連性の低い内容が含まれることがあります
disabledしきい値によるフィルタリングなし — 抽出されたコンテンツをすべて返します

ローカル検索

enable_local パラメーターは、位置情報を考慮した検索を制御します。

値動作
null(未設定)自動検出 — 位置情報ヘッダーが指定されている場合に、ローカル検索が有効になります
trueローカル検索を強制 — 位置情報ヘッダーがなくても、常にローカル検索を使用します
false標準検索を強制 — 位置情報ヘッダーがあっても、常に標準のウェブランキングを使用します

ほとんどの用途では、enable_local を省略し、APIに位置情報ヘッダーから自動検出させてください。

位置情報ヘッダー

ヘッダー型説明
X-Loc-Latfloat緯度(-90.0~90.0)
X-Loc-Longfloat経度(-180.0~180.0)
X-Loc-Citystring市区町村名
X-Loc-Statestring州/地域コード(ISO 3166-2)
X-Loc-State-Namestring州/地域名
X-Loc-Countrystring2文字の国コード
X-Loc-Postal-Codestring郵便番号

優先順位:X-Loc-Lat + X-Loc-Long が優先されます。これらが指定されている場合、位置情報の解決にはテキストベースのヘッダー(City、State、Country、Postal-Code)は使用されません。座標がない場合にのみ、テキストベースのヘッダーを指定してください。

例:座標を使用
curl -s "https://api.search.brave.com/res/v1/llm/context" \
  -H "Accept: application/json" \
  -H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}" \
  -H "X-Loc-Lat: 37.7749" \
  -H "X-Loc-Long: -122.4194" \
  -G \
  --data-urlencode "q=best coffee shops near me"
例:地名を使用
curl -s "https://api.search.brave.com/res/v1/llm/context" \
  -H "Accept: application/json" \
  -H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}" \
  -H "X-Loc-City: San Francisco" \
  -H "X-Loc-State: CA" \
  -H "X-Loc-Country: US" \
  -G \
  --data-urlencode "q=best coffee shops near me"

Goggles(カスタムランキング)— Brave独自の機能

Gogglesを使うと、LLMの根拠となる情報源を制御できます。これはRAGの品質に欠かせません。

用途Goggleルール
公式ドキュメントのみ$discard\n$site=docs.python.org
ユーザーコンテンツを除外$discard,site=reddit.com\n$discard,site=stackoverflow.com
学術情報源$discard\n$site=arxiv.org\n$site=scholar.google.com
ペイウォールなし$discard,site=medium.com
方法例
ホスト型--data-urlencode "goggles=https://raw.githubusercontent.com/brave/goggles-quickstart/main/goggles/1k_short.goggle"
インライン--data-urlencode 'goggles=$discard\n$site=example.com'

ホスト型 GogglesはGitHubまたはGitLab上に置き、! name:、! description:、! author: のヘッダーを含めて、https://search.brave.com/goggles/create で登録する必要があります。インラインルールには登録は必要ありません。

構文:ルールは $ + カンマ区切りのオプションで始まります。アクション(いずれか1つ):discard、boost[=N]、downrank[=N] — Nは1~10の整数です。サイトフィルター:site=DOMAIN。例:$site=example.com,boost=3。ルールは \n(%0A)で区切ります。

許可リスト:$discard\n$site=docs.python.org\n$site=developer.mozilla.org — ブロックリスト:$discard,site=pinterest.com\n$discard,site=quora.com

リソース:Discover · 構文 · クイックスタート

レスポンス形式

標準レスポンス
{
  "grounding": {
    "generic": [
      {
        "url": "https://example.com/page",
        "title": "Page Title",
        "snippets": [
          "Relevant text chunk extracted from the page...",
          "Another relevant passage from the same page..."
        ]
      }
    ],
    "map": []
  },
  "sources": {
    "https://example.com/page": {
      "title": "Page Title",
      "hostname": "example.com",
      "age": ["Wednesday, January 15, 2025", "2025-01-15", "392 days ago", "2025-01-15T13:45:02Z"]
    }
  }
}
ローカルレスポンス(enable_local を使用)
{
  "grounding": {
    "generic": [...],
    "poi": {
      "name": "Business Name",
      "url": "https://business.com",
      "title": "Title of business.com website",
      "snippets": ["Business details and information..."]
    },
    "map": [
      {
        "name": "Place Name",
        "url": "https://place.com",
        "title": "Title of place.com website",
        "snippets": ["Place information and details..."]
      }
    ]
  },
  "sources": {
    "https://business.com": {
      "title": "Business Name",
      "hostname": "business.com",
      "age": []
    }
  }
}
レスポンスフィールド
フィールド型説明
groundingobject種類ごとのグラウンディング情報をすべて格納するコンテナ
grounding.genericarray抽出コンテンツを含む URL オブジェクトの配列(主なグラウンディングデータ)
grounding.generic[].urlstringソース URL
grounding.generic[].titlestringページタイトル
grounding.generic[].snippetsarrayクエリに関連する、抽出されたスマートチャンク
grounding.poiobject/nullPOI データ(ローカル検索時のみ)
grounding.poi.namestring/nullPOI 名
grounding.poi.urlstring/nullPOI のソース URL
grounding.poi.titlestring/nullPOI ページのタイトル
grounding.poi.snippetsarray/nullPOI のテキストスニペット
grounding.maparray地図/場所の検索結果(ローカル検索時のみ)
grounding.map[].namestring/null場所名
grounding.map[].urlstring/null場所のソース URL
grounding.map[].titlestring/null場所のページタイトル
grounding.map[].snippetsarray/null場所のテキストスニペット
sourcesobject参照されたすべての URL のメタデータ。URL をキーとして格納
sources[url].titlestringページタイトル
sources[url].hostnamestringソースのホスト名
sources[url].agearrayページの日付を4つの固定位置で示します:完全な日付、YYYY-MM-DD、相対的な経過時間、ISO 8601 タイムスタンプ。ページの日付が不明な場合は空です
sources[url].descriptionstringクエリとは無関係な、ページ自体の説明。enable_source_metadata が必要です
sources[url].site_namestringサイト名。enable_source_metadata が必要です
sources[url].faviconstringファビコンの URL。enable_source_metadata が必要です
sources[url].thumbnailobject/nullページのサムネイル(src、original)。enable_source_metadata が必要です
sources[url].snippetstring?ページの最適なスニペット

注:スニペットにはプレーンテキスト、または JSON 形式でシリアライズされた構造化データ(テーブル、スキーマ、コードブロック)が含まれる場合があります。LLM はこの混在形式を適切に処理できます。

ユースケース

  • AI エージェント:1回の呼び出しでそのまま使えるコンテンツを返すウェブ検索ツールをエージェントに提供します
  • RAG パイプライン:新鮮で関連性の高いウェブコンテンツに基づいて LLM の応答をグラウンディングします
  • AI アシスタントとチャットボット:実際のソースに裏付けられた事実に基づく回答を提供します
  • 質問応答:特定のクエリに絞ったコンテキストを取得します
  • ファクトチェック:最新のウェブコンテンツと照合して主張を検証します
  • コンテンツ調査:1回の API 呼び出しで、あらゆるトピックの資料を収集します

ベストプラクティス

  • トークン予算:まずデフォルト値(maximum_number_of_tokens=8192、count=20)から始めます。簡単な検索では減らし、複雑な調査では増やします。
  • ソースの品質:Goggles を使って信頼できるソースに絞り込みます。再現率より精度を優先する場合は、context_threshold_mode=strict を設定します。
  • パフォーマンス:ニーズを満たす範囲で、count と maximum_number_of_tokens を最小にします。ローカル検索では、位置情報のヘッダーを指定します。

コメント