117 人が閲覧(直近 30 日) プラットフォーム

Ollama Web Searchの使い方|APIキー設定・料金・Python実装【2026年9月】

Ollama Web Searchの使い方|APIキー設定・料金・Python実装【2026年9月】

Ollama Web Searchは、Ollamaが2025年9月24日に公開したWeb検索APIです。ローカルで動かすモデルに検索結果を渡して、学習データより新しい情報を答えさせる用途で使います。本記事では、公式ドキュメントとSDKのソースコードを2026年9月26日時点で確認し、APIキーの設定、REST・Python・JavaScriptでの呼び出し方、2026年8月の料金改定後の扱いを整理しました。PythonとJavaScriptのSDKは、公式サンプルと挙動が違う点をSDK単体で実行して確かめました(実APIへの検索リクエストや検索エージェント全体の動作までは含みません)。

まとめ:Ollama Web Searchの要点

  • エンドポイントは POST https://ollama.com/api/web_search(検索)と /api/web_fetch(ページ取得)の2本。検索件数は既定5件、最大10件。
  • 利用には無料のOllamaアカウントとAPIキーが必要。キーは環境変数 OLLAMA_API_KEY に入れてBearer認証で送る。
  • 推論はローカルでも、検索クエリはollama.comへ送られる。社外に出せないクエリを扱うなら使わない。
  • 2026年9月時点の料金ページにWeb検索の単価や無料枠の数値は載っていない。上限を超えると429が返る前提で実装する。
  • Python SDKは既定3件で、キー未設定のままimportし、その後に環境変数へキーを設定しても、モジュール関数の既定クライアントには反映されない。JavaScript SDKは文字列を渡すと例外になる。どちらも公式サンプルと挙動が違う。

以下、仕組み、認証、呼び出し方、料金、外部ツール連携の順に解説します。

Ollama Web Searchの仕組みと提供範囲

Ollamaは、LlamaやQwen、gpt-ossなどのオープンモデルを自分のPCやサーバーで動かすためのツールです。Web Searchはその周辺機能で、検索そのものはOllama社のクラウド(ollama.com)が担います。ローカルのモデルが検索結果を受け取り、回答を組み立てる分担です。

web_searchとweb_fetchの違い

API 入力 返り値 用途
web_search query(必須)、max_results(既定5・最大10) results[](title・url・content) 候補ページを探す
web_fetch url(必須) title・content・links[] 1ページの本文を読む

web_searchが返す content は本文の抜粋です。詳細まで読ませたいときは、エージェントがweb_searchでURLを見つけ、web_fetchで本文を取りに行く2段構えになります。公式の検索エージェント例もこの形です。

ローカル推論時の検索クエリの送信先

モデルがローカルで動いていても、検索クエリと取得したいURLはollama.comへ送られます。公式FAQは、クラウド機能を止める方法として ~/.ollama/server.json に "disable_ollama_cloud": true を書くか、環境変数 OLLAMA_NO_CLOUD=1 を設定する手順を示しています。この設定はOllama本体に適用され、SDKやcURLからollama.comへの直接通信は遮断しません。設定後にOllamaを再起動すると、本体経由のクラウドモデルとWeb検索が無効になり、ログに Ollama cloud disabled: true と出ます。完全オフラインを求められる環境では、Web Searchは最初から選択肢に入りません。

APIキーの発行と認証設定

APIキーの発行とOLLAMA_API_KEYへの設定

ollama.comにサインインし、https://ollama.com/settings/keys でキーを作成します。公式ドキュメントの記載は「A free Ollama account is required」で、有料プランは必須ではありません。発行したキーは環境変数に入れておくと、cURL・Python・JavaScriptのどれからも同じ設定で使えます。

export OLLAMA_API_KEY="発行したキー"

キーはブラウザで動くコードやGitリポジトリに含めないでください。公式の認証ドキュメントも、キーをブラウザ側のコードとソース管理の外に置くよう求めています。

「Web search requires an Ollama account」と表示される条件

このメッセージはOllamaデスクトップアプリのチャット画面に出るものです。アプリのソース(app/ui/app/src/components/ChatForm.tsx)を読むと、未サインインのままWeb検索ボタンを押すとこの表示に切り替わります。アプリ上の操作でサインインするか、ターミナルで ollama signin を実行すれば解消します。

そもそも検索ボタンが見当たらない場合は、選んでいるモデルがツール呼び出し(tools)に対応していないか、クラウド機能が無効になっています。ボタンの表示条件は「tools対応モデル」かつ「クラウド無効化の設定がない」の2つです。

サインイン済みローカルサーバーの実験的検索API

Ollama本体のv0.18.0(2026年3月14日)以降には、ローカルサーバーに /api/experimental/web_search と /api/experimental/web_fetch が追加されています。サーバーのサインイン情報でollama.comへ中継する作りで、クライアント側からAPIキーを送る必要はありません。OpenClawなどの連携ツールはこの経路を使っており、公式のOpenClaw連携ページにも「ローカルモデルでのWeb検索には ollama signin が必要」とあります。ただし名前のとおりexperimentalで、公開APIリファレンスには載っていません。自作アプリから使うなら、仕様が固まっている https://ollama.com/api/web_search を直接呼ぶほうが安全です。

REST APIの呼び出し方(cURL)

検索は次の1リクエストで試せます。件数を変えたいときは max_results を1〜10の範囲で付けます。

curl https://ollama.com/api/web_search \
  --header "Authorization: Bearer $OLLAMA_API_KEY" \
  --header "Content-Type: application/json" \
  -d '{"query": "ollama new engine", "max_results": 3}'

レスポンスは {"results": [{"title": ..., "url": ..., "content": ...}]} の形です。ページ本文を取得するweb_fetchは、URLを1つ渡します。

curl https://ollama.com/api/web_fetch \
  --header "Authorization: Bearer $OLLAMA_API_KEY" \
  --header "Content-Type: application/json" \
  -d '{"url": "https://ollama.com/blog/web-search"}'

返り値の links にはページ内のリンク一覧が入ります。エージェントに次のページを辿らせる材料になりますが、そのまま全部をモデルに渡すとコンテキストを圧迫します。

PythonとJavaScriptからの呼び出し

Python:ollama 0.6.0以降のweb_search()と認証設定

Web検索の関数はPythonライブラリ0.6.0(2025年9月24日)で追加されました。2026年9月時点の最新は0.6.2です。

python -m pip install "ollama>=0.6.0"

上のコマンドをターミナルで実行した後、次のコードをPythonファイルに保存して実行します。

import ollama

res = ollama.web_search("ollama new engine", max_results=5)
for r in res.results:
    print(r.title, r.url)

page = ollama.web_fetch("https://ollama.com/blog/web-search")
print(page.title, len(page.content))

注意点が2つあります。1つ目は件数の既定値です。web_search() のシグネチャは max_results: int = 3 で、REST APIの既定5件より少なくなっています。5件ほしいなら明示してください。

2つ目はキーを読むタイミングです。ollama.web_search() などのモジュール関数は、import時に作られる既定クライアントを使い、クライアントは生成時に OLLAMA_API_KEY を読みます。ollama 0.6.2で、import ollama の後に os.environ["OLLAMA_API_KEY"] を設定して呼んだところ、ValueError: Authorization header with Bearer token is required for web search で止まりました。キーは起動前に環境変数で渡すか、設定後に ollama.Client() を作り直して、そのインスタンスから呼びます。

JavaScript:webSearch()のオブジェクト引数

npmの ollama(2026年9月時点の最新は0.6.3)では、webSearch() と webFetch() の引数がオブジェクトです。公式ドキュメントのWeb search章には client.webSearch("what is ollama?") と文字列を渡す例がありますが、0.6.3で実行すると Query is required の例外になりました。

Node.js環境で npm install [email protected] を実行し、次のコードを search.mjs に保存して node search.mjs で実行します。

import { Ollama } from "ollama";

const client = new Ollama({
  headers: { Authorization: `Bearer ${process.env.OLLAMA_API_KEY}` },
});
const res = await client.webSearch({ query: "ollama new engine" });
const page = await client.webFetch({ url: "https://ollama.com" });

件数の指定にも差があります。型定義上のプロパティ名は maxResults で、送信内容を横取りして確認すると、ボディに {"maxResults":3} のまま入っていました。REST APIの仕様書にあるパラメータ名は max_results です。返却件数は検索語によって指定上限を下回るため、results の長さだけでは指定が反映されたかを判定できません。件数指定を確実に送る必要がある場合は、REST APIへ max_results を指定して直接リクエストします。

ツール呼び出しによる検索エージェントの実装

web_searchとweb_fetchは、Pythonライブラリでは関数をそのまま tools に渡せます。モデルが検索の要否を判断し、必要なときだけ呼び出す作りです。

from ollama import chat, web_search, web_fetch

tools = {"web_search": web_search, "web_fetch": web_fetch}
messages = [{"role": "user", "content": "Ollamaの最新リリースの変更点は?"}]

while True:
    res = chat(model="qwen3:4b", messages=messages,
               tools=[web_search, web_fetch], think=True,
               options={"num_ctx": 32768})
    messages.append(res.message)
    if not res.message.tool_calls:
        print(res.message.content)
        break
    for call in res.message.tool_calls:
        fn = tools.get(call.function.name)
        out = fn(**call.function.arguments) if fn else "unknown tool"
        messages.append({"role": "tool", "tool_name": call.function.name,
                         "content": str(out)[:8000]})

公式例と同じく、ツールの結果は8,000文字で切り詰めています。検索結果は数千トークンに達することがあり、公式ドキュメントはコンテキスト長を少なくとも約32,000トークンに広げるよう推奨しています。モデルはtools対応のものを選びます。公式例は qwen3:4b です。ツール呼び出しの一般的な仕組みはAIツール使用(Tool Use)の仕組みと実装判断で解説しています。

料金と無料枠(2026年8月の改定後)

公開時のブログは「個人向けに十分な無料枠があり、より高いレート制限はOllamaのクラウドで提供する」と説明していました。その後、2026年8月31日にトークン単価制の新料金プランが導入されました。新規契約は新料金ですが、既存契約は旧料金体系を継続でき、利用者が設定画面で新料金へ移行できます。

プラン 月額 含まれる利用枠 同時実行
Free $0 スターターモデル向けの少量 1
Pro $20(年$200) $60分 3
Max $100 $300分 10
Team $500 $1,000分(共有) 10

この表はクラウドモデルの推論に関する枠です。2026年9月26日に公式の料金ページと2026年8月31日の改定告知を確認したところ、Web検索の単価や無料枠の回数はどちらにも記載がありませんでした。Web検索の公式ドキュメントも「無料アカウントが必要」と書くのみで、上限の数値は非公開です。

実装では、上限到達を例外ではなく通常の分岐として扱います。OllamaのAPIはレート制限の超過時にHTTP 429を返す仕様なので、429を受けたら待って再試行し、同じクエリの結果はキャッシュして呼び出し回数を減らします。料金を理由にプランを決めるなら、ollama.com/settings/usage で実際の消費を見てからにしてください。

MCP・Open WebUI・コーディングエージェントからの利用

MCPサーバー経由(Cline・Codex・Goose)

公式はPython製のMCPサーバー(ollama-pythonリポジトリの examples/web-search-mcp.py)を用意しており、MCP対応クライアントにweb_searchとweb_fetchを追加できます。Codexなら ~/.codex/config.toml に次を書きます。

[mcp_servers.web_search]
command = "uv"
args = ["run", "path/to/web-search-mcp.py"]
env = { "OLLAMA_API_KEY" = "発行したキー" }

Clineは「Manage MCP Servers」から同じ内容をJSONで登録します。CodexをOllamaのモデルで動かす手順はollama launch codex-appの手順にまとめています。

Open WebUIの検索エンジン設定

Open WebUIは検索エンジンの選択肢に ollama_cloud を持っており、内部で https://ollama.com/api/web_search を呼びます。管理画面のWeb検索設定で選ぶか、起動時の環境変数で指定します。Open WebUIは ENABLE_PERSISTENT_CONFIG の既定値がTrueで、一度保存した管理画面の設定を環境変数より優先します。環境変数を書き換えて再起動しても反映されないときは、管理画面で検索エンジンとAPIキーを直してください。最後にチャット入力欄でWeb検索をオンにします。

ENABLE_WEB_SEARCH=true
WEB_SEARCH_ENGINE=ollama_cloud
OLLAMA_CLOUD_API_KEY=発行したキー

古い解説に出てくる ENABLE_RAG_WEB_SEARCH は旧名で、v0.6.10のソースでは既に ENABLE_WEB_SEARCH へ改称されています。Open WebUI自体の導入はOpen WebUIの機能・インストール・APIキー発行、ファイルを読ませるRAG構成はOllamaとOpen WebUIでRAGチャットを実現する方法を参照してください。

Pi・OpenClawのWeb検索の自動設定

コーディングエージェントのPiでは、@ollama/pi-web-search パッケージがweb検索とfetchのツールを提供します。ollama launch pi で起動すればパッケージの導入と更新は自動で、手動なら pi install npm:@ollama/pi-web-search です。OpenClawも ollama launch openclaw で起動するとOllamaのWeb検索が自動で有効になります。Piの設定全体はPi(pi-coding-agent)をローカルLLMで動かす設定手順で扱っています。

Ollama Web Searchを使うべきでない場面と代替手段

検索基盤を自前で運用せず、APIキーで呼び出せる点が利点です。ただし、次の条件に当てはまるなら採用を見送ります。

  • 検索クエリ自体が機密(顧客名、未発表の製品名、社内システム名など)で、社外送信の承認が取れない。
  • 1回で10件を超える検索結果が必要、または検索エンジンや地域を指定したい。APIの入力はqueryとmax_resultsだけです。
  • 上限や単価が公開されていないサービスに、SLAを前提とした本番処理を載せられない。

代替手段は理由によって分かれます。件数や検索エンジンを自分で決めたいなら、自前でホストするメタ検索エンジンSearXNGが候補で、Open WebUIでも searxng を選べます。ただしSearXNGは外部の検索サービスへ検索語を中継する仕組みなので、機密クエリの問題は解決しません。検索語そのものを社外へ出せない場合は、社内文書だけを対象にした検索基盤やRAGを選びます。どちらも運用の手間は自分で引き受けることになるため、プロトタイプや個人利用ならOllama Web Searchのほうが早く動きます。

よくある質問

Ollama Web Searchは無料で使えますか?

無料のOllamaアカウントでAPIキーを発行すれば使えます。ただし2026年9月時点で、無料枠の回数や有料時の単価は公式に公開されていません。上限を超えるとHTTP 429が返るため、再試行とキャッシュを前提に組み込みます。

OLLAMA_API_KEYはどこで取得しますか?

ollama.comにサインインし、https://ollama.com/settings/keys で作成します。取得したキーは環境変数 OLLAMA_API_KEY に設定し、Authorization: Bearer ヘッダーで送ります。

ローカルのモデルだけでWeb検索できますか?

できません。検索はollama.comのクラウドで実行されるため、インターネット接続とアカウントが必要です。OLLAMA_NO_CLOUD=1 を設定してOllamaを再起動すると、Ollama本体経由のWeb検索は無効になります。ただし、SDKやcURLからollama.comへ直接送る検索リクエストは、この設定では遮断されません。

Ollamaアプリで「Web search requires an Ollama account」と出たらどうすればいいですか?

未サインインの状態で検索ボタンを押したときの表示です。アプリからサインインするか、ターミナルで ollama signin を実行してください。ボタン自体が出ない場合は、tools対応のモデルを選んでいるか、クラウド無効化の設定が入っていないかを確認します。

1回の検索で何件まで取得できますか?

REST APIは既定5件、最大10件です。Pythonライブラリの web_search() は既定値が3件なので、5件以上ほしいときは max_results を明示します。

関連記事

お気に入りに入れた記事の一覧

この記事は以下の記事からリンクされています

ほか 1 件の記事からもリンクされています。

資料請求

今日のトレンド記事 直近 24 時間で、いつもより多く読まれている記事

  1. 2026.09.30 テックブログ OpenAI Dotsとは?常時稼働エージェントの権限設計と自社システム接続【2026年9月】
  2. 2026.03.10 コラム 年収の壁【2026年最新】178万円・136万円・130万円の一覧と手取りの分岐点
  3. 2026.09.27 コラム 法定調書合計表とは?令和8年分の書き方と提出義務、給与・支払データからの集計自動化
  4. 2024.08.22 テックブログ Bokehとは?Pythonでインタラクティブなグラフを作る使い方【3.10対応】
  5. 2026.04.20 テックブログ Chrome(Gemini)のSkillsとは?使い方・作成手順・利用条件と表示されない時の対処

RELATED POSTS 関連記事

目次