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のファイルやコマンドを直接操作する機能ではありません。
| 段階 | 担当 | 確認すること |
|---|---|---|
| tools定義 | アプリ・SDK | function名、説明、引数JSON Schemaを最小限にする |
| tool_calls | モデル | tool名とargumentsが返ったか。返らない場合も正常な分岐にする |
| 実行 | あなたのコード | allowlist、型、値、権限、外部通信を検証してから実行する |
| tool結果 | アプリ・SDK | assistant messageとtool messageを順番どおり追加する |
| 最終回答 | モデル | tool結果を受け、もう一度chatして回答を作る |
JSON出力は返答の形を整える仕組み、MCPはツールやデータソースをつなぐプロトコル、tool callingはモデルからの関数呼び出し要求と実行結果の往復です。名前が似ていても同じ機能として混ぜません。
- Ollama OpenAI互換API - OpenAI形式のendpoint、model、tools対応を確認する
- MCPとは - MCP、API、JSON、RAGの役割と権限の違いを見る
- ローカルAIでJSON出力 - Structured Outputと出力検証の考え方へ進む
Windowsではモデル単体とlocalhostを先に確認する
tool callingを試す前に、Ollama本体、モデル名、通常の短いchatを分けて確認します。公式docsのサンプルモデル名は説明用の例であり、手元の環境でtool callingが成功する保証ではありません。まず公開情報や計算だけを返す読み取り用toolから始め、実ファイルや秘密情報を対象にしないでください。
- OllamaをWindowsで起動し、新しいPowerShellでollama lsとollama psを実行する。
- 利用するモデルがなければ、公式モデル名、タグ、空き容量、ライセンスを確認してollama pull MODELを実行する。
- ollama run MODELで短い通常chatを1回行い、モデル名とlocalhostの応答を記録する。
- 次に固定のtoolsを1個だけ定義し、stream=falseのnative /api/chatでtool_callsを確認する。
- 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、引数検証を別々に確認します。
- WindowsでOllamaをインストール - 導入、server、API、導入直後の確認へ戻る
- Ollamaモデル管理 - ls、show、ps、削除、再取得を確認する
- Ollamaが起動しないとき - localhostとserverの切り分けへ進む
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"}}}}}]}"
| 応答の状態 | 次にすること | してはいけないこと |
|---|---|---|
| tool_callsなし | 通常のassistant contentを表示するか、質問を終了する | 必ずtoolが返ると決めつける |
| 既知のtool名 | argumentsの型・値・範囲を検証してからdispatchする | 文字列をそのままコマンドとして実行する |
| 未知のtool名 | 実行せずエラー結果または終了を返す | モデルの名前だけで任意関数を探す |
| tool結果あり | 元のassistant messageとtool messageを順に追加して再送する | tool結果だけを新しい会話として送る |
JSONのargumentsはモデルが作った入力なので、JSONとして読めても安全な入力とは限りません。tool名を固定し、引数を型・列挙値・対象範囲で検証し、失敗時は実行せず理由を記録します。
- Ollama Tool calling公式docs - single toolとtool resultの公式payloadを見る
- Ollama Chat API公式docs - messages、tools、stream、responseを確認する
- ローカルAI API入門 - API、localhost、providerの基本を確認する
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を変更する手順ではありません。
| コード部分 | 役割 | 最低限の確認 |
|---|---|---|
| tools | モデルに見せる関数のschema | name、description、required、properties |
| availableFunctions | 実際に呼べる関数のallowlist | schemaの名前とdispatch先が一致するか |
| arguments | モデルが提案した引数 | 型、範囲、列挙値、対象データ、外部送信の有無 |
| messages | assistantとtoolの履歴 | tool resultを同じ会話へ順番どおり追加する |
- Ollama Tool calling公式docs - Python関数、JavaScript schema、tool結果の例を見る
- VS CodeとOllama - アプリ連携とモデルproviderの境界を確認する
- WindowsローカルAIコーディング - コードを実行させる前のcheckpointと権限を見る
parallel tool callingとagent loopは別々に小さく試す
Ollama公式docsには、1回の応答で複数tool callを返すparallel tool callingと、tool結果を受けて次のtoolを選ぶmulti-turn agent loopの例があります。parallelは同じターンの複数結果を集めてから返し、agent loopは最大反復回数や終了条件をコード側で持たせます。
| 方式 | 流れ | 初心者の開始点 |
|---|---|---|
| single-shot | 1回toolを呼び、1回結果を返して終了 | 読み取り用tool 1個、stream=false |
| parallel | 同じassistant messageの複数tool_callsを順に検証・実行し、結果をまとめて返す | 副作用のない独立したlookupだけ |
| agent loop | tool_callsがなくなるまでassistantとtoolを往復する | max turns、timeout、許可tool、ログを固定 |
- single-shotでtool_callsの形式とarguments検証を確認する。
- 独立した2つの読み取り用toolだけを定義し、parallelの結果をすべて集める。
- agent loopへ進む場合は最大反復回数、実行時間、1回あたりのtool数を設定する。
- 同じtoolを繰り返す、未知のtoolを選ぶ、引数が壊れる場合の終了分岐を作る。
- 削除、上書き、送信、購入などの副作用は自動loopに入れず、人間の確認を要求する。
agent loopが長くなるほど、tool結果、thinking、履歴がcontextへ戻り、PC負荷と誤操作の範囲が増えます。tool callingが動いたことを、agentとして安全に運用できることと同じにしません。
- ローカルAIエージェントのPC負荷 - tool loop、context、embedding、SSD負荷を分ける
- ローカルLLMの安全性 - 外部送信、履歴、provider、権限を確認する
- Ollamaのcontextとモデル管理 - モデル状態と実行中状態を確認する
streamingではtool callの断片を完成させてから実行する
stream=trueでは、assistantのthinking、content、tool_callsが複数chunkに分かれて届く場合があります。Ollama公式docsは、断片を集めてassistant messageへ戻し、tool結果を追加して次のchatを行う流れを示しています。途中のtool名やargumentsだけで関数を実行しないことが重要です。
- まずstream=falseで、完成したtool_callsのJSONと通常のtool resultの流れを確認する。
- stream=trueへ変更し、thinking・content・tool_callsをそれぞれ蓄積する。
- 受信終了後にassistant messageを履歴へ追加し、tool_calls全体をJSON・型・allowlistで検証する。
- 検証済みの結果だけをtool roleで追加して、次のchatを呼び出す。
- 通信切断、空chunk、未知のtool、複数call、タイムアウトを終了分岐として扱う。
stream=falseで基準を作る
↓
stream=trueでchunkを蓄積
↓
assistant messageを確定
↓
tool_callsを検証・実行
↓
tool結果を返して再度chatstreamingは表示を早く始めるための仕組みで、tool callの引数検証を省略する機能ではありません。最初の実装では非streamでログを読みやすくし、安定後にstreamを追加するほうが原因を分けやすいです。
- Ollama streaming tool calling公式docs - chunkの蓄積とtool resultの戻し方を見る
- Ollama回答が途中で止まるとき - stream、done、context、メモリの診断へ進む
- Ollamaが遅いとき - TTFT、tokens/s、PC負荷をtool loopと分ける
OpenAI互換・MCP・tool callingを混ぜず、最後に安全確認する
Ollamaのtool calling公式例はnative /api/chatを中心に説明しています。OpenAI互換の /v1/chat/completions でもtoolsを使える場合がありますが、対応フィールドやモデル能力は別に確認します。MCPはtoolを公開・接続する別レイヤーなので、native tool callingを試すだけでMCPサーバーが動くわけではありません。
| 仕組み | 主な入口 | 確認範囲 |
|---|---|---|
| Ollama native tool calling | POST /api/chat | tools、tool_calls、tool role、stream、think |
| OpenAI互換 tool | POST /v1/chat/completions等 | clientの対応、model、tools、response parser、互換範囲 |
| MCP | ホストアプリとMCP server | tools/resources/prompts、権限、filesystem、network、同意 |
| Structured Output | format・response_format等 | 返答JSONのschema、検証、再試行。関数実行とは別 |
- tool名をallowlistにし、未知のfunctionを実行しない。
- argumentsをschemaだけでなく、型、値、対象フォルダ、URL、送信先、認証情報の有無で検証する。
- 最初は読み取り専用・公開データ・localhostに限定し、削除、書き込み、コード実行、外部送信は人間の確認を必須にする。
- local model、cloud model、embedding、web search、MCP、ログを別々の通信・保存経路として確認する。
- tool callの成功、関数の成功、最終回答の正しさを同じ判定にしない。結果と根拠を記録する。
- Ollama OpenAI互換API - base URL、v1 endpoint、model、tools対応を確認する
- MCPの安全性 - MCP server、権限、外部送信の境界を見る
- Ollamaのlocal/cloud - モデル名だけで推論場所を決めないための確認へ進む
よくある質問
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まで段階的に進みます。
- ローカルAIをAPIで使う方法
- WindowsでローカルAIコーディングを始める
- VS CodeでローカルAIを使う
- LM Studioのlms CLIを使う
- LM StudioのTool Useを使う
- LM StudioのStructured Outputを使う
- LM StudioのResponses APIを使う
- LM StudioのMCPをAPIで使う
- ローカルAIでJSON出力する方法
- LM StudioとOllamaの違い
- コンテキスト長とは
- RAG・埋め込み・ベクトルDBの仕組み
- OllamaのEmbedding APIを使う
- OllamaのResponses APIを使う
- OllamaのAPI認証を確認する
- OllamaをWindowsのLANから使う前の確認
- OllamaのモデルID・能力を確認する
- OllamaのModelfileを使う
- Ollama native API streamingを使う
- Ollama Web Search APIを使う
- OllamaのThinkingを使う
- LM StudioのEmbedding APIを使う
- RAG評価と引用確認の基礎
- faithfulness確認
- ローカルRAGのプライバシー
- MCPとは
- ローカルLLMの安全性とプライバシー
- Gemma 4 12Bの更新メモ
- Hermes Desktopとは
- Hermes DesktopとLM Studio接続
- Hermes DesktopとOllama接続
- Hermes Desktop接続トラブル
- Hermes DesktopでOpenRouterを使う
- Hermes DesktopでDeepSeek APIを使う
- Hermes DesktopでProviderを使い分ける
- Hermes DesktopとLM Studio接続の確認ポイント
- Hermes AgentとDesktopの違い
- Ollamaとは
- Windows ARMでローカルAIを使う前の確認
- WindowsでOllamaをインストールする
- Ollamaのローカルモデルとcloudモデルの違い
- Ollamaのモデル保存場所と移動
- Ollamaのモデル一覧・削除・容量整理
- OllamaのOpenAI互換APIを使う
- OllamaのStructured Outputsを使う
- OllamaのEmbedding APIを使う
- OllamaのResponses APIを使う
- OllamaのAPI認証を確認する
- OllamaのモデルID・能力を確認する
- OllamaのModelfileを使う
- Ollama native API streamingを使う
- LM StudioのEmbedding APIを使う
- Ollamaの解説
- 診断基準
- 比較表
あなたはどのタイプ?
- 初めてローカルAIを触る人 - まず全体像をつかみ、LM StudioとOllamaの違い、モデルサイズの考え方を順番に確認します。
- LM Studio・Ollamaの症状別トラブルを解決したい人 - 起動、モデルロード、Prompt Processing、generation、API接続、GPU確認をツール別に分けて読みます。
- GPUなし・低スペックPCの人 - 軽量モデル、メモリ別の目安、重いときの確認ポイントを先に見ます。
- PDFや資料を読ませたい人 - 先に基本を押さえ、モデル単体の確認後にAnythingLLMへ進みます。
- ローカルAIエージェントを試したい人 - Bionic、Ollama、AnythingLLM、Hermesを役割別に分け、local/cloud、tool、保存、PC負荷を順番に確認します。
- 開発・API連携したい人 - LM StudioとOllamaの違いを確認し、API、長文処理、RAGまで段階的に進みます。
関連チェック先
- 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の役割の違いを確認できます。