試す
5,000検索
$9.25
$1.85/1K検索
- 1つのエージェントに組み込む
- 最大パックと同じAPI
- クレジットの有効期限なし
ユースケース · AIエージェント · ツール名 web_search
検索はできても読み取れないエージェントは、スニペットから推測するしかありません。検索と読み取りを1つでこなすツールを渡しましょう。ライブのWebを検索し、先頭ページを整形されたMarkdownで番号付きにして返すので、モデルが引用できます。
クイック回答
AIエージェントに、ページ本文を返すWeb検索ツールを渡すには?
Web検索APIを、検索クエリを受け取ってページ本文付きの番号付きソースを返すツールとしてラップします。LLMWebSearchはこれを1回の呼び出しで行います。ライブ検索によるランキング結果と、先頭3ページをMarkdownで読み取った本文を、1クレジットで返します。価格は5,000検索で$9.25から始まり、$1.20/1K検索まで下がります。KYC不要。暗号資産で支払い。
| ツール | POST https://llmwebsearch.com/api/v1/searchを呼び出すweb_search(query, recent) |
|---|---|
| 戻り値 | 最大20件のランキング結果。先頭3件はページ本文をMarkdownで付属 |
| 長さの制御 | 1ページあたりmax_chars、ページ数はread、リストはmax_results |
| コスト | 1クレジットで検索1回分です。最大20件のランク付けされた結果を取得でき、上位3ページは本文抽出されてMarkdownで返されます。4〜10ページを読む場合は2クレジットです。エラーで終わった呼び出しは無料です |
| フィルター | 結果の国と言語、期間(過去1日、1週間、1か月、1年)、Webまたはニュースの結果、含める/除外するドメインを選択できます |
| すぐに使える連携 | MCPサーバー、OpenAI function calling、LangChainとLlamaIndex、n8n、OpenClaw |
なぜなら、答えがスニペットに載っていることはほとんどないからです。検索結果ページには、検索エンジンが選んだタイトルと1〜2行が表示されるだけです。ユーザーが尋ねた数値、日付、ルールは、ページのさらに下の方にあります。
スニペットしか見えないエージェントには、2つの悪い選択肢しかありません。断片的な情報から答えて誤るリスクを取るか、各ページを取得するために2つ目のツールを呼び出すかです。後者は往復回数とツール定義を倍にします。
LLMWebSearchなら、最初のページはすでに読み込まれた状態で届きます。ナビゲーション、広告、Cookieバナーは除去されるので、モデルはトークンをコンテンツに使えます。残りの結果にはスニペットも付いており、モデルが再検索すべきかを判断する助けになります。
スキーマは小さく保ちましょう。必須のqueryが1つと、多くてもスイッチを1〜2個です。モデルはシンプルなツールのほうをより確実に呼び出します。以下の例では、time_range=monthにマップするrecentフラグを公開しており、それ以外はすべてコード内で固定されています。
関数はJSONではなくプレーンテキストを返します。各ソースは番号、タイトル、URLで始まり、その後にMarkdownが続きます。このレイアウトにより、[2]のような引用がモデルにとって自然になります。
エージェントにすでにweb_searchという名前のツールが含まれている場合(Claude CodeやOpenClawがそうであるように)、自分のツールにはsearch_webなど別の名前を付けてください。同じ名前のツールが2つあるとモデルが混乱します。
import json
import os
import requests
API = "https://llmwebsearch.com/api/v1/search"
HEADERS = {"Authorization": "Bearer " + os.environ["LLMWEBSEARCH_API_KEY"]}
# Tool definition in the OpenAI function-calling format; most agent frameworks accept the same JSON schema.
WEB_SEARCH_TOOL = {
"type": "function",
"function": {
"name": "web_search",
"description": "Search the live web. Returns numbered sources; the first ones include the page text in Markdown.",
"parameters": {
"type": "object",
"properties": {
"query": {"type": "string", "description": "A short search query, 3 to 8 words"},
"recent": {"type": "boolean", "description": "True to keep only results from the past month"},
},
"required": ["query"],
},
},
}
def web_search(query, recent=False, read=3, max_chars=4000):
"""Run one search (1 credit with read <= 3) and return compact text the model can cite."""
body = {"q": query, "max_results": 5, "read": read, "max_chars": max_chars}
if recent:
body["time_range"] = "month"
resp = requests.post(API, headers=HEADERS, json=body, timeout=60)
resp.raise_for_status()
lines = []
for r in resp.json()["results"]:
lines.append(f"[{r['position']}] {r['title']} — {r['url']}")
if r.get("content_status") == "ok":
lines.append(r["content"])
else:
lines.append(r.get("snippet", ""))
lines.append("")
return "\n".join(lines)
def run_tool_call(call):
"""Execute a tool call returned by the model and give back the text for the tool message."""
args = json.loads(call["function"]["arguments"])
return web_search(args["query"], recent=args.get("recent", False))答えが変化する事実やモデルが知り得ない事実に依存する場合に検索します。価格、バージョン、法律、スケジュール、最近の出来事が該当します。定義や安定した知識は通常、該当しません。
このルールをシステムプロンプトに書き、予算も加えましょう。次の3つの習慣が役立ちます:
3つのパラメータが、モデルに届くテキスト量を決めます。readは読み込むページ数を0〜10で設定します。max_charsは各ページを500〜50,000文字で上限設定します。max_resultsは一覧表示する結果数を1〜20で設定します。
チャットエージェントの場合、read=3とmax_chars=4000で1回の検索あたり約12,000文字のページ本文が返ります。これにより1つの会話で複数回の検索を行う余裕が生まれます。進めながら要約する調査ジョブでは、より長いページでも問題ありません。
word_countフィールドは、切り詰める前の完全なページがどれだけの長さだったかを示します。エージェントはこれを使って、extractエンドポイントでさらに取得すべきかを判断できます。
結果はタイトル、URL、スニペット付きで返りますが、本文は含まれません。content_statusフィールドが理由を示します。
blocked_by_robots:そのサイトのrobots.txtが当社のリーダーを許可していません。blocked_by_site_policy:robots.txtにContent-Signal: ai-input=noを設定しているサイトは、そのページのコンテンツが結果に含まれません。target_refused:サイトが拒否応答を返しました。そのステータスはtarget_statusにあります。fetch_failedまたはfetch_timeout:ページが時間内に読み込まれませんでした。サイトが当社のリーダーを拒否した場合、結果はコンテンツなしで、サイトのステータスとともに返されます。当社がCAPTCHAを解いたり、アカウントにサインインしたり、ブロックやペイウォールを回避したりすることは一切ありません。ページが空で返ってきた場合は、スニペットまたは別のソースを使うようエージェントに指示してください。各ページで何が起きたとしても、検索自体は1クレジットです。
組み込みツールは便利ですが、制御の余地が少なくなります。2026年10月22日時点で、OpenAIのweb_searchツールは1,000回あたり$10に加え、検索コンテンツが入力トークンとして課金されます。AnthropicのClaude web searchも1,000回の検索あたり$10に加えてトークンコストがかかります。Gemini 3 groundingは有料プランで月5,000回の検索が無料で、その後は1,000回あたり$14です。
これらのツールは主に、引用付きの文章による回答を返すもので、生のページは返しません。また、検索が1つのモデルベンダーに縛られます。スタンドアロンのツールはどのモデルでも動作し、各ページの長さを設定できます。組み込みツールの比較には完全な表があります。
readが3以下の場合、検索1回につき1クレジットです。チームで使うアシスタントが1日100問にそれぞれ4回の検索で答えると、月に約12,000回の検索になります。$41.25の25,000検索でその月と翌月の大半をまかなえます。
1人の開発者が使うコーディングエージェントは1日20回、つまり月に約600回検索するかもしれません。クレジットは期限切れにならないため、$9.25の5,000検索は数か月持ちます。コストガイドには、より大規模なワークロードの計算が示されています。
5,000検索でプロトタイプを作り、エージェントが日常的に使われるようになったら25,000検索または100,000検索に移行しましょう。
5,000検索
$9.25
$1.85/1K検索
25,000検索
$41.25
$1.65/1K検索
100,000検索
$145
$1.45/1K検索
全プラン共通: 上位3ページをMarkdownとして読み取り · 国、言語、時間、ドメインのフィルター · 失敗した呼び出しは課金なし · クレジットの有効期限なし
はい。検索をツールとして公開する小さなMCPサーバーを通じて可能です。MCPページにコードとクライアント設定があります。
はい。上記のスキーマはプレーンなJSON Schemaであり、Anthropic、Google、Mistral、オープンソースのフレームワークが小さな変更で受け入れます。このツールは当社のHTTPSエンドポイントを呼び出すだけです。
ツールラッパーで呼び出し回数を数え、予算を使い切ったら短いメッセージを返します。予算はシステムプロンプトにも書いておき、モデルがそれを計画に組み込めるようにしましょう。
その可能性はあります。ページ本文はデータとして扱いましょう。ソース内に見つかった指示を無視するようシステムプロンプトでモデルに伝え、ソースが単独でアクションをトリガーしないようにしてください。
$1.20/1K検索から · KYC不要
APIキーを取得