4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

BedrockのOpenAIモデルでWeb検索が使えるようになったので、Tavilyと⽐べてみた

4
Posted at

はじめに

こんにちは、マナティです!

2026年8月、Amazon Bedrock上のOpenAIモデル(GPT-5.4/5.5/5.6)でWeb Searchが使えるようになりました。APIに tools=[{"type": "web_search"}] を1つ足すだけで、LLMが自動でWeb検索して最新情報を踏まえた回答を返してくれます。外部の検索APIもオーケストレーションも不要となる点がポイントになっています。

ちなみに、Nova向けのWeb検索機能(Nova Web Grounding)は以前からありました。今回はそれのOpenAI版が追加された形です。

ただ、LLMにWeb検索結果を渡して回答させること自体は、Tavilyのような外部検索APIを使えば以前から実現できていました。AWS内で完結するのは嬉しいですが、肝心の検索品質はどうなのか気になったので、同じ質問を投げて比べてみました。

比較対象

今回比較するのは以下の3つです。

Bedrock Web Search
OpenAIのGPT-5.4をBedrock経由で呼び出し、組み込みのWeb Search toolで検索から回答生成まで1回のAPI呼び出しで完結します。検索基盤はAWS内で運営されているWebインデックスとナレッジグラフです。OpenAI Responses APIで呼びます。

from openai import BedrockOpenAI
from aws_bedrock_token_generator import provide_token

client = BedrockOpenAI(
    aws_region="us-east-1",
    bedrock_token_provider=lambda: provide_token(region="us-east-1"),
)
response = client.responses.create(
    model="openai.gpt-5.4",
    input="質問文",
    tools=[{"type": "web_search", "external_web_access": False}],
)

Nova Web Grounding
Amazon Nova 2をConverse APIで呼び出し、nova_grounding systemToolで検索します。検索基盤はBedrock Web Searchと同じAWS内のインデックスを使っている可能性が高いですが、回答生成するモデルが異なります。

bedrock = boto3.client("bedrock-runtime", region_name="us-east-1")
response = bedrock.converse(
    modelId="us.amazon.nova-2-lite-v1:0",
    messages=[{"role": "user", "content": [{"text": "質問文"}]}],
    toolConfig={"tools": [{"systemTool": {"name": "nova_grounding"}}]},
)

Tavily Search + Claude
Tavilyで検索して、その結果をコンテキストとしてClaude Sonnet 5(Bedrock経由)に渡して回答を生成します。オーケストレーションは自前で書く必要がありますが、そのぶん検索結果を途中で確認したりカスタムできるのは良いところだと思います。

3手法の処理フロー

それぞれの処理は以下の通りとなっています。

Bedrock Web Search Nova Web Grounding Tavily + Claude
User User User
bedrock-mantle bedrock-runtime Tavily API
↓(検索結果)
GPT-5.4 Nova 2 自前オーケストレーション
↕(自動でWeb検索) ↕(自動でWeb検索) ↓(コンテキスト付与)
Amazon Web Index Amazon Web Index bedrock-runtime
回答 + 引用 回答 + 引用 Claude Sonnet 5
API 1回で完結 API 1回で完結 API 2回(検索+推論)

Bedrock Web SearchとNova Web GroundingはAPI 1回で検索から回答まで完結します。Tavily + Claudeに関しては検索APIとLLM推論を自前でつなぐ必要があります。

比較条件の整理

手法 検索基盤 回答生成モデル API呼び出し 外部APIキー
Bedrock Web Search AWS内のWebインデックス GPT-5.4 1回 不要
Nova Web Grounding AWS内のWebインデックス Nova 2 1回 不要
Tavily + Claude Tavily独自インデックス Claude Sonnet 5(Bedrock) 2回 Tavily APIキー

見ての通り、回答を生成するモデルが手法ごとに違います。Bedrock Web SearchはOpenAIモデル専用、Nova Web GroundingはNovaモデル専用というAPI側の制約があって、全手法をClaudeで揃えるといったことができません。

なので3つを並べて「検索品質ランキング」を出すのは厳密にはフェアではないです。ただ、実際にどの手法を使うか決める際は、モデルと検索の組み合わせをセットで選ぶことになるので、End-to-Endで比べること自体には意味があるかなと思っています。

比較方法

質問セット

4カテゴリ、計220問を用意しました。日本語110問、英語110問です。

カテゴリ 問数 狙い 質問例
factual 68問 正解が1つに定まる事実確認 LambdaのPayload上限、DynamoDBの最大アイテムサイズ
recent_news 32問 2026年8月発表の最新情報を拾えるか 「DynamoDBでベクトル検索はできますか?」
technical 60問 技術的な説明の正確性と網羅性 Converse APIとInvokeModel APIの使い分け
comparison 60問 判断を要する質問。根拠を示せるか 「ECS on Fargate vs EKS on Fargate」

factualの質問は公式ドキュメントで正解を検証してから作成しています。recent_newsでは、以下のような2026年8月発表のWhat's Newを拾えるかをテストしています。

など、直近1週間のWhat's Newを対象にしています。

評価軸

各回答を別のLLM(Claude Sonnet 5)に採点させました。いわゆる「LLM-as-a-Judge」という手法で、人間の代わりにLLMが回答の品質を評価します。

評価軸 何を見るか
事実正確性 誤情報がないか
網羅性 質問の各側面をカバーしているか
引用品質 出典URLが適切に提示されているか
情報鮮度 最新の情報を反映しているか

環境構築

Bedrock Web Searchを使うにはいくつか準備があります。

まずIAMです。AmazonBedrockMantleInferenceAccess マネージドポリシーをアタッチすれば、bedrock-mantleでの推論権限に加えて bedrock-websearch:InvokeSearchbedrock-websearch:InvokeFetch も含まれているので、Web Searchもそのまま使えます。

bedrock-mantleは通常のbedrock-runtimeとは別のエンドポイントで、認証もBearer Token方式です。aws-bedrock-token-generatorパッケージでAWS認証情報からトークンを生成する仕組みになっています。

公式ドキュメントによると、IAMポリシーが足りない場合でもWeb Searchはエラーにならず、モデルの訓練知識だけで回答する仕様のようです。検索されてないのに回答が返ってくるので、権限不足に気づきにくい点は注意が必要です。

Tavilyのほうは https://app.tavily.com/ でAPIキーを取得するだけです。無料枠で月1,000クエリ使えて、クレカ登録も不要なのは助かりますね。

pip install openai boto3 aws-bedrock-token-generator tavily-python

結果

220問 × 3手法 = 660回のAPI呼び出しを実行しました。日本語110問、英語110問です。

最初は20問で試したんですが、日本語と英語でスコアに差があるように見えたものの、20問では統計的に有意と言えませんでした。「今回くらいの小さな差を統計的に検出するには何問必要か」を事前に計算(検出力分析)したところ、各言語110問以上が必要と分かったので、220問に拡大しました。

全体スコア

各スコアは1〜5の5段階で、5が最高です。220問の平均値を出しています。総合スコアは4軸の単純平均です。

スコア 意味
5 全て正確・完璧
4 ほぼ正確、軽微な不足のみ
3 概ね良いが一部に誤りや欠けがある
2 重要な誤りや不足がある
1 ほぼ回答になっていない
手法 事実正確性 網羅性 引用品質 情報鮮度 総合(4軸平均)
Bedrock Web Search 4.13 4.02 2.92 3.00 3.52
Tavily + Claude 3.85 3.72 3.29 3.12 3.50
Nova Web Grounding 3.60 3.55 1.06 2.38 2.65

overall_scores.png

Bedrock Web SearchとTavily + Claudeがほぼ互角(3.52 vs 3.50)でした。この差が偶然なのか本当の差なのかを確認するために、Mann-Whitney U検定を使いました。スコアが1〜5の順序データで正規分布を仮定できないため、ノンパラメトリック検定を選んでいます。簡単に言うと、「2つのグループのスコア分布に意味のある違いがあるか」を判定する手法です。

結果、Bedrock Web SearchとTavily + Claudeの間に有意差なし(p=0.97)。一方、Nova Web Groundingは両方に対して有意に低い(p<0.0001)ことが確認できました。

Bedrock Web Searchは事実正確性と網羅性で強く、Tavily + Claudeは引用品質と情報鮮度で上回っています。得意分野が違うので、総合するとほぼ同じスコアになる形ですね。

Nova Web Groundingの引用品質が1.06とかなり低いのが目を引きますが、これは引用の質が悪いというより、返ってくるデータの形式の問題が大きいです。Novaは回答テキストと引用URLを別の構造で返すので、「どの文がどのURLの情報か」が分かりにくい…

一方、Bedrock Web Searchは回答文中の位置情報つきで引用を返しますし、Tavily + Claudeは回答文中に自然にURLが埋め込まれます。採点したLLMから見ると後者2つの方が「引用が適切に提示されている」と判断しやすいので、このスコア差は割り引いて見る必要があります。

カテゴリ別で見えたこと

category_scores.png

factualではTavily + Claudeが総合3.94、Bedrock Web Searchが3.88で僅差でした。正解が明確な質問は、どの検索基盤でもだいたい拾えるようです。

technicalではTavily + Claudeが引用と鮮度で大きくリードしていました。面白かったのが、Bedrock Web Searchが技術系の質問で引用なしのケースが半数あったことです。220問全体で見ても、Bedrock Web Searchは35.5%の質問で検索をスキップしていました。カテゴリ別だとtechnicalとcomparisonで50%、factualで22%、recent_newsで9%です。

search_skip_rate.png

公式ドキュメントにも「モデルが必要と判断した場合に検索する」と書かれていて、強制する公式パラメータは見つかりませんでした。対策としては、OpenAI API互換の tool_choice パラメータで強制する、レスポンスに検索結果が含まれているかチェックしてリトライする、といった方法が考えられます。

ちなみに、検索あり vs なしで正確性に差があるのかも調べてみました。検索ありの回答は事実正確性4.19、検索なしは4.03で、統計的にも有意差あり(p=0.01)。検索した方がやはり正確なので、スキップされるのはもったいないですね。

comparisonはBedrock Web Searchの正確性4.10と網羅性4.25が高かったです。GPT-5.4の推論力が活きるタイプの質問だったのかもしれません。

recent_newsは3手法とも苦戦しました。Bedrock Web Searchが3.12、Tavily + Claudeが2.77、Nova Web Groundingが2.05となり、最新情報はどの手法でも難しいようです。

日本語と英語で差はあるのか?

今回は日本語110問、英語110問で試したので、統計的に有意な差があるかを検定してみました。

手法 言語 事実正確性 網羅性 引用品質 情報鮮度
Bedrock Web Search 日本語 4.00 3.90 2.74 2.84
Bedrock Web Search 英語 4.26 4.15 3.11 3.15
Nova Web Grounding 日本語 3.38 3.43 1.09 2.22
Nova Web Grounding 英語 3.83 3.68 1.04 2.54
Tavily + Claude 日本語 3.84 3.59 3.29 3.05
Tavily + Claude 英語 3.87 3.85 3.28 3.19

lang_scores.png

Bedrock Web Search は英語の方が事実正確性(p=0.02)と網羅性(p=0.05)で統計的に有意に高い結果でした。

Nova Web Grounding はさらに顕著で、事実正確性(p=0.006)と情報鮮度(p=0.007)で英語が有意に優勢です。AWS内のWebインデックスは英語コンテンツの方が充実していることが数字で確認できました。

Tavily + Claude は全軸で日本語と英語に有意差なし(全てp>0.2)。Tavilyが日本語のブログ記事(DevelopersIOなど)も検索結果に含めていたことが効いていそうです。日本語でのWeb検索を使う場合、この言語に対する安定性は大きなメリットだと思います。

レイテンシ

手法 平均 中央値 最小 最大
Nova Web Grounding 6,268ms 5,898ms 1,974ms 15,189ms
Bedrock Web Search 9,083ms 8,007ms 1,616ms 30,218ms
Tavily + Claude 17,837ms 19,100ms 5,133ms 42,500ms

latency.png

Nova Web Groundingが最速で、Tavily + Claudeは検索+LLM推論の2段階なので倍近くかかります。

差が出た質問

一番見たかったrecent_newsの中から、最も差が出た質問を見てみます。DynamoDB Vector Searchは2026年8月5日にGAになったばかりなので、各手法がどこまで最新情報を拾えるかが分かりやすいです。

Bedrock Web Search Nova Web Grounding Tavily + Claude
GA日の回答 触れていない 「2024年8月」(誤り) 「2026年8月5日」(正確)
引用数 0件 2件 5件
レイテンシ 5,546ms 3,677ms 16,213ms

Bedrock Web Search

はい。Amazon DynamoDB 単体では一般的な意味での「ネイティブなベクトル検索DB」
ではありませんが、AWS 公式の機能としてベクトル検索に対応しています。
具体的には、DynamoDB に保存したベクトルに対して近似最近傍検索(ANN)を
行える仕組みがあります。

引用は0件で、Web検索を使わずモデルの知識だけで回答していました。
「対応しています」とは言っていますが、2026年8月の発表には触れていません。

Nova Web Grounding

はい、Amazon DynamoDBではベクトル検索が可能です。2024年8月に一般提供された機能で、
DynamoDBでベクトル埋め込みを操作データと共に保存し、類似性検索を直接実行できます。

引用:
- https://aws.amazon.com/blogs/aws/amazon-dynamodb-now-supports-real-time-vector-search-at-any-scale/
- https://aws.amazon.com/blogs/database/build-semantic-search-with-native-vector-support-in-amazon-dynamodb/

引用URLは公式ブログで正しいんですが、GA日を「2024年8月」と答えています。正しくは2026年8月です。

Tavily + Claude

はい、できます。Amazon DynamoDBは2026年8月5日にネイティブなベクトル検索機能を
一般提供(GA)として発表しました。
- 99%以上の再現率を維持しながら、1桁ミリ秒のレイテンシーでベクトル検索が可能
- 完全にサーバーレスであり、インフラの管理が不要

引用:
- https://aws.amazon.com/jp/blogs/news/amazon-dynamodb-now-supports-real-time-vector-search-at-any-scale
- https://aws.amazon.com/jp/blogs/news/build-semantic-search-with-native-vector-support-in-amazon-dynamodb
- https://dev.classmethod.jp/articles/dynamo-vector-strands
- https://qiita.com/yama3133/items/d0fc5f0ef530cf65008c
- https://www.reddit.com/r/aws/comments/13nv5ly/aws_dynamodb_as_vector_db

Tavilyの検索結果に最新のWhat's Newが含まれていたのが効いていますね。DevelopersIOの記事まで拾っているのも面白いです。

この1問だけで全体を語るのは危険ですが、最新情報の取得という点ではTavilyに分がありました。recent_news全体でもTavily + Claudeが相対的に良かったので、検索インデックスの鮮度に差があるのかもしれません。

結局どう選ぶか

220問で比べた結果、Bedrock Web SearchとTavily + Claudeはほぼ互角でした。ただし得意分野が違うので、何を重視するかで変わります。

重視する点 おすすめ 理由
事実正確性 Bedrock Web Search 全カテゴリで最高スコア(4.13)。特にfactual/comparisonが強い。
引用品質 Tavily + Claude 全カテゴリで安定(3.29)。ただしレイテンシは2倍となる。
レスポンス速度 Nova Web Grounding 平均6秒で最速。ただし品質はBedrock/Tavilyより低い。
最新情報 Tavily + Claude 2026年8月の情報を正確に拾えたのはTavilyのみ。
日本語での利用 Tavily + Claude 日本語・英語で品質差なし。AWS系は英語が有意に優勢。
コンプライアンス Bedrock Web Search データがAWS外に出ない。外部APIキー不要。

データをAWS外に出せないコンプライアンス要件がある場合は、外部APIキー不要でIAM権限だけで使えるので、Bedrock Web Searchが良いと思います。

ただし日本語メインで使うならTavily + Claudeの方が安定しているという結果が出ているので、ユースケースによって検討が必要です。

今回の比較で見えなかったこと

モデルが手法ごとに異なるので、検索品質だけを切り出して比較はできていません。Bedrock Web SearchをClaudeと組み合わせられれば公平な比較になりますが、現時点ではOpenAI GPT-5.4/5.5/5.6のみ対応で、Claude対応は未定です。

ちなみに、Bedrock Web Searchの external_web_access は今回 False で試しています。公式ドキュメントによると、True にしても現時点ではライブWebへの取得は行われず、AWS内のインデックスとキャッシュから検索される仕様です。将来のリリースでライブWeb取得が有効になる予定とのことですが、現時点では True でも False でも検索元は同じです。

AgentCore経由のWeb Search(MCP経由)やBrave Search APIとの比較も今回はやっていません。

まとめ

BedrockのOpenAIモデルでWeb検索が使えるようになったので、Nova Web GroundingとTavily + Claudeの3手法で220問を使って比較してみました。

220問を投げて分かったのは、Bedrock Web SearchとTavily + Claudeは総合スコアでほぼ互角(3.52 vs 3.50)で、統計的にも有意差がないということです。ただし得意分野が違っていて、事実正確性ならBedrock Web Search、引用と鮮度ならTavily + Claudeが上でした。

今回一番はっきりした差は言語の影響です。Bedrock Web SearchとNova Web Groundingは英語の方が統計的に有意にスコアが高く、Tavily + Claudeは日本語でも英語でも差がありませんでした。日本語メインで使うならこの点は重要だと思います。

もう一つ気になったのは、Bedrock Web Searchが35%の質問で検索をスキップしていたことです。検索した方が正確性が高い(4.19 vs 4.03、p=0.01)ので、もったいない…
対策として tool_choice での強制やリトライの仕組みが必要そうです。

現時点では external_web_accessTrue にしてもライブWeb取得は行われない仕様ですが、将来有効になったときにどう変わるかは気になります。AgentCore経由のWeb Search(MCP経由)との比較も次はやってみたいですね。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?