Ollamaのtool callingをWindowsで使う方法|/api/chat・Python・JavaScript

公開日
2026-08-09
更新日
2026-08-09
情報確認日
2026-08-09
編集・運営
Local AI Compass

Ollamaのtool callingは、モデルがツールの呼び出しを提案し、アプリやスクリプトが引数を検証して実行し、その結果をモデルへ返す仕組みです。Windowsではまずlocalhostの /api/chat で小さな読み取り用関数を試し、tool_callsが返るか、実行許可と結果の戻し方が正しいかを確認してから複数ツールやagent loopへ広げます。

導入前に確認すること

  • Windowsのバージョン、メモリ容量、GPU/VRAM、空き容量を確認する
  • 最初は軽量モデル、短い質問、少ない同時作業から始める
  • 公式サイトの対応OS、利用規約、モデルのライセンスを確認する

先に結論:tool callingはモデルの要求とアプリの実行を分ける

Ollama公式docsのtool callingは、モデルが利用可能な関数を選び、tool callを返し、アプリが関数を実行して結果を次のmessagesへ戻し、最終回答を生成する流れです。モデルがWindowsのファイルやコマンドを直接操作する機能ではありません。

Ollama tool callingの実行分担
段階担当確認すること
tools定義アプリ・SDKfunction名、説明、引数JSON Schemaを最小限にする
tool_callsモデルtool名とargumentsが返ったか。返らない場合も正常な分岐にする
実行あなたのコードallowlist、型、値、権限、外部通信を検証してから実行する
tool結果アプリ・SDKassistant messageとtool messageを順番どおり追加する
最終回答モデルtool結果を受け、もう一度chatして回答を作る

JSON出力は返答の形を整える仕組み、MCPはツールやデータソースをつなぐプロトコル、tool callingはモデルからの関数呼び出し要求と実行結果の往復です。名前が似ていても同じ機能として混ぜません。

Windowsではモデル単体とlocalhostを先に確認する

tool callingを試す前に、Ollama本体、モデル名、通常の短いchatを分けて確認します。公式docsのサンプルモデル名は説明用の例であり、手元の環境でtool callingが成功する保証ではありません。まず公開情報や計算だけを返す読み取り用toolから始め、実ファイルや秘密情報を対象にしないでください。

  1. OllamaをWindowsで起動し、新しいPowerShellでollama lsとollama psを実行する。
  2. 利用するモデルがなければ、公式モデル名、タグ、空き容量、ライセンスを確認してollama pull MODELを実行する。
  3. ollama run MODELで短い通常chatを1回行い、モデル名とlocalhostの応答を記録する。
  4. 次に固定のtoolsを1個だけ定義し、stream=falseのnative /api/chatでtool_callsを確認する。
  5. tool_callsが返ったときだけ、allowlistにある読み取り用関数を実行し、その結果をtool messageとして戻す。
ollama ls
ollama ps
ollama run MODEL
GET http://localhost:11434/api/tags

端末chatが成功してもtool calling、OpenAI互換API、MCP、agent loopまで動くとは限りません。モデルのtool能力、API path、SDK、引数検証を別々に確認します。

native /api/chatで1つのtoolを呼び、結果を返す

Ollamaの公式例では、POST /api/chatへtoolsを渡すと、モデルの応答にassistantのtool_callsが含まれる場合があります。tool callが返ったら、アプリ側でfunction名とargumentsを確認し、実行後にassistant messageとtool roleの結果を含めて再度 /api/chatへ送ります。

curl.exe -s http://localhost:11434/api/chat -H "Content-Type: application/json" -d "{"model":"MODEL","messages":[{"role":"user","content":"東京の気温を確認して"}],"stream":false,"tools":[{"type":"function","function":{"name":"get_temperature","description":"指定都市のテスト用気温を返す","parameters":{"type":"object","required":["city"],"properties":{"city":{"type":"string"}}}}}]}"
Ollama native tool callingの分岐
応答の状態次にすることしてはいけないこと
tool_callsなし通常のassistant contentを表示するか、質問を終了する必ずtoolが返ると決めつける
既知のtool名argumentsの型・値・範囲を検証してからdispatchする文字列をそのままコマンドとして実行する
未知のtool名実行せずエラー結果または終了を返すモデルの名前だけで任意関数を探す
tool結果あり元のassistant messageとtool messageを順に追加して再送するtool結果だけを新しい会話として送る

JSONのargumentsはモデルが作った入力なので、JSONとして読めても安全な入力とは限りません。tool名を固定し、引数を型・列挙値・対象範囲で検証し、失敗時は実行せず理由を記録します。

Python・JavaScript SDKではdispatchをallowlistで書く

Ollama公式のPython・JavaScript例では、SDKのchatへtoolsを渡し、response.message.tool_callsを確認してから関数を呼び出します。Python SDKは関数からtool schemaを作る例もありますが、採用する関数と引数を自分のコード側で固定し、モデルに任意の関数を選ばせる設計にしません。

from ollama import chat

def get_temperature(city: str) -> str:
    values = {"東京": "18°C", "大阪": "20°C"}
    return values.get(city, "Unknown")

functions = {"get_temperature": get_temperature}
messages = [{"role": "user", "content": "東京の気温を確認して"}]
response = chat(model="MODEL", messages=messages, tools=[get_temperature], think=True)
messages.append(response.message)

for call in response.message.tool_calls or []:
    fn = functions.get(call.function.name)
    if fn is None or not isinstance(call.function.arguments.get("city"), str):
        continue
    result = fn(**call.function.arguments)
    messages.append({"role": "tool", "tool_name": call.function.name, "content": result})

if response.message.tool_calls:
    final_response = chat(model="MODEL", messages=messages, tools=[get_temperature], think=True)
    print(final_response.message.content)

JavaScriptでも、toolsのschema、availableFunctionsのallowlist、tool_callsのarguments、tool結果を追加する順番は同じです。SDKの導入コマンドは読者のアプリ側で実行するもので、このサイトの依存関係やpackage-lockを変更する手順ではありません。

Ollama SDK tool callingのコード境界
コード部分役割最低限の確認
toolsモデルに見せる関数のschemaname、description、required、properties
availableFunctions実際に呼べる関数のallowlistschemaの名前とdispatch先が一致するか
argumentsモデルが提案した引数型、範囲、列挙値、対象データ、外部送信の有無
messagesassistantとtoolの履歴tool resultを同じ会話へ順番どおり追加する

parallel tool callingとagent loopは別々に小さく試す

Ollama公式docsには、1回の応答で複数tool callを返すparallel tool callingと、tool結果を受けて次のtoolを選ぶmulti-turn agent loopの例があります。parallelは同じターンの複数結果を集めてから返し、agent loopは最大反復回数や終了条件をコード側で持たせます。

Ollama tool calling方式の違い
方式流れ初心者の開始点
single-shot1回toolを呼び、1回結果を返して終了読み取り用tool 1個、stream=false
parallel同じassistant messageの複数tool_callsを順に検証・実行し、結果をまとめて返す副作用のない独立したlookupだけ
agent looptool_callsがなくなるまでassistantとtoolを往復するmax turns、timeout、許可tool、ログを固定
  1. single-shotでtool_callsの形式とarguments検証を確認する。
  2. 独立した2つの読み取り用toolだけを定義し、parallelの結果をすべて集める。
  3. agent loopへ進む場合は最大反復回数、実行時間、1回あたりのtool数を設定する。
  4. 同じtoolを繰り返す、未知のtoolを選ぶ、引数が壊れる場合の終了分岐を作る。
  5. 削除、上書き、送信、購入などの副作用は自動loopに入れず、人間の確認を要求する。

agent loopが長くなるほど、tool結果、thinking、履歴がcontextへ戻り、PC負荷と誤操作の範囲が増えます。tool callingが動いたことを、agentとして安全に運用できることと同じにしません。

streamingではtool callの断片を完成させてから実行する

stream=trueでは、assistantのthinking、content、tool_callsが複数chunkに分かれて届く場合があります。Ollama公式docsは、断片を集めてassistant messageへ戻し、tool結果を追加して次のchatを行う流れを示しています。途中のtool名やargumentsだけで関数を実行しないことが重要です。

  1. まずstream=falseで、完成したtool_callsのJSONと通常のtool resultの流れを確認する。
  2. stream=trueへ変更し、thinking・content・tool_callsをそれぞれ蓄積する。
  3. 受信終了後にassistant messageを履歴へ追加し、tool_calls全体をJSON・型・allowlistで検証する。
  4. 検証済みの結果だけをtool roleで追加して、次のchatを呼び出す。
  5. 通信切断、空chunk、未知のtool、複数call、タイムアウトを終了分岐として扱う。
stream=falseで基準を作る
↓
stream=trueでchunkを蓄積
↓
assistant messageを確定
↓
tool_callsを検証・実行
↓
tool結果を返して再度chat

streamingは表示を早く始めるための仕組みで、tool callの引数検証を省略する機能ではありません。最初の実装では非streamでログを読みやすくし、安定後にstreamを追加するほうが原因を分けやすいです。

OpenAI互換・MCP・tool callingを混ぜず、最後に安全確認する

Ollamaのtool calling公式例はnative /api/chatを中心に説明しています。OpenAI互換の /v1/chat/completions でもtoolsを使える場合がありますが、対応フィールドやモデル能力は別に確認します。MCPはtoolを公開・接続する別レイヤーなので、native tool callingを試すだけでMCPサーバーが動くわけではありません。

Ollama連携方式の境界
仕組み主な入口確認範囲
Ollama native tool callingPOST /api/chattools、tool_calls、tool role、stream、think
OpenAI互換 toolPOST /v1/chat/completions等clientの対応、model、tools、response parser、互換範囲
MCPホストアプリとMCP servertools/resources/prompts、権限、filesystem、network、同意
Structured Outputformat・response_format等返答JSONのschema、検証、再試行。関数実行とは別
  • tool名をallowlistにし、未知のfunctionを実行しない。
  • argumentsをschemaだけでなく、型、値、対象フォルダ、URL、送信先、認証情報の有無で検証する。
  • 最初は読み取り専用・公開データ・localhostに限定し、削除、書き込み、コード実行、外部送信は人間の確認を必須にする。
  • local model、cloud model、embedding、web search、MCP、ログを別々の通信・保存経路として確認する。
  • tool callの成功、関数の成功、最終回答の正しさを同じ判定にしない。結果と根拠を記録する。

よくある質問

Ollamaはtool callingに対応していますか?

Ollama公式docsにはtool calling(function calling)の機能と、single、parallel、agent loop、streamingの例があります。ただしtool callを返すか、引数が安定するかはモデルやprompt、API、設定に依存するため、手元のモデルで小さく確認してください。

Ollamaのtool callingは自動で関数を実行しますか?

自動で任意の関数を実行するものとは考えません。モデルはtool nameとargumentsを提案し、アプリ側がallowlist、型、値、権限を検証してから実行し、結果をtool messageで返します。

Windowsで使うnative APIのendpointは何ですか?

この記事の中心はOllama nativeのPOST http://localhost:11434/api/chatです。tools、assistantのtool_calls、tool roleの結果を同じ会話へ追加します。OpenAI互換の/v1/chat/completionsは別のpathとresponse形式として確認してください。

OllamaのOpenAI互換APIでもtool callingできますか?

Ollama公式のOpenAI compatibility docsにはtoolsを含む対応項目が記載されていますが、native APIのすべてのフィールドやモデル能力が同じとは限りません。既存clientを使う場合はbase URL、model、tools、stream、parserを個別に確認します。

tool_callsが返らないときは故障ですか?

故障とは限りません。モデルが通常のcontentを返した、tool定義や質問が曖昧、モデルがtool callingに向かない、streamの組み立てに失敗した、API形式が違うなどの可能性があります。まずstream=false、tool 1個、短い質問で確認します。

複数のtoolを同時に呼べますか?

公式docsにはparallel tool callingの例があります。複数のtool_callsをすべて検証し、独立した読み取り処理だけを実行して、結果をまとめて同じassistant messageの後へ返します。副作用のある処理は自動並列にしません。

tool callingでファイル操作やコマンド実行をさせても安全ですか?

安全とは断定できません。ファイル、コマンド、ネットワーク、認証情報へ権限が広がるため、最初は公開データの読み取りと限定フォルダに絞り、書き込み・削除・外部送信は人間の確認と明示的なallowlistを必須にしてください。

次に読むおすすめルート

開発・API連携したい人

LM StudioとOllamaの違いを確認し、API、長文処理、RAGまで段階的に進みます。

  1. ローカルAIをAPIで使う方法
  2. WindowsでローカルAIコーディングを始める
  3. VS CodeでローカルAIを使う
  4. LM Studioのlms CLIを使う
  5. LM StudioのTool Useを使う
  6. LM StudioのStructured Outputを使う
  7. LM StudioのResponses APIを使う
  8. LM StudioのMCPをAPIで使う
  9. ローカルAIでJSON出力する方法
  10. LM StudioとOllamaの違い
  11. コンテキスト長とは
  12. RAG・埋め込み・ベクトルDBの仕組み
  13. OllamaのEmbedding APIを使う
  14. OllamaのResponses APIを使う
  15. OllamaのAPI認証を確認する
  16. OllamaをWindowsのLANから使う前の確認
  17. OllamaのモデルID・能力を確認する
  18. OllamaのModelfileを使う
  19. Ollama native API streamingを使う
  20. Ollama Web Search APIを使う
  21. OllamaのThinkingを使う
  22. LM StudioのEmbedding APIを使う
  23. RAG評価と引用確認の基礎
  24. faithfulness確認
  25. ローカルRAGのプライバシー
  26. MCPとは
  27. ローカルLLMの安全性とプライバシー
  28. Gemma 4 12Bの更新メモ
  29. Hermes Desktopとは
  30. Hermes DesktopとLM Studio接続
  31. Hermes DesktopとOllama接続
  32. Hermes Desktop接続トラブル
  33. Hermes DesktopでOpenRouterを使う
  34. Hermes DesktopでDeepSeek APIを使う
  35. Hermes DesktopでProviderを使い分ける
  36. Hermes DesktopとLM Studio接続の確認ポイント
  37. Hermes AgentとDesktopの違い
  38. Ollamaとは
  39. Windows ARMでローカルAIを使う前の確認
  40. WindowsでOllamaをインストールする
  41. Ollamaのローカルモデルとcloudモデルの違い
  42. Ollamaのモデル保存場所と移動
  43. Ollamaのモデル一覧・削除・容量整理
  44. OllamaのOpenAI互換APIを使う
  45. OllamaのStructured Outputsを使う
  46. OllamaのEmbedding APIを使う
  47. OllamaのResponses APIを使う
  48. OllamaのAPI認証を確認する
  49. OllamaのモデルID・能力を確認する
  50. OllamaのModelfileを使う
  51. Ollama native API streamingを使う
  52. LM StudioのEmbedding APIを使う
  53. Ollamaの解説
  54. 診断基準
  55. 比較表

あなたはどのタイプ?

関連チェック先

  • Ollama Tool calling - Ollamaの単発・並列・agent loop・streaming tool callingとPython/JavaScript例を確認できます。
  • Ollama Chat API - native /api/chatのmessages、tools、tool_calls、stream、think、keep_aliveを確認できます。
  • Ollama OpenAI compatibility - OpenAI互換APIのtools対応とnative APIとの違いを確認できます。
  • Ollama Windows - Windows版Ollamaとlocalhost APIの前提を確認できます。
  • Ollama Quickstart - Windowsを含むOllamaの起動、モデル実行、API利用の入口を確認できます。
  • Ollama Structured Outputs - JSON Schemaによる構造化出力とtool callingの役割の違いを確認できます。

関連ツール

比較表を見る / 最初に検討しやすいツールを確認する