🎓 レベル:発展 | 重要度:B(推奨) 📎 前提:オフライン・プライベートなLLMアプリ | 原理:ツール使用とエージェント(機械学習)
要点(結論先出し)
- ツール使用(function calling)=LLMが「この関数をこの引数で呼びたい」とJSONで表明し、アプリが実行して結果を返す仕組み。LLMに手足を与える。
- これを多段で回すとエージェントになる(観察→思考→行動のループ)。ローカルでも組めるが、モデルの能力と安全設計が鍵。
- 原理は機械学習へ。ここはローカルで動かす際の現実(対応モデル・暴走・権限)に集中。
概念 ── LLMは「呼びたい」と言うだけ
LLM自身は関数を実行しません。「天気APIを city=Tokyo で呼んで」とJSONで出力し、アプリがそれを実行して結果を会話に戻す。LLMはその結果を見て次を決めます。これを繰り返すのがエージェント。原理は機械学習へ → ツール使用とエージェント。
flowchart LR U["ユーザーの目的"] --> M["LLMが思考"] M --> CALL["ツール呼び出しをJSONで表明"] CALL --> APP["アプリが実行(検索・計算・ファイル)"] APP --> OBS["結果を会話へ返す"] OBS --> M M --> ANS["十分なら最終回答"]
ローカルでの現実(要最新確認)
- 対応モデルを選ぶ:function calling を学習したモデルでないと、ツール呼び出しの精度が出ない。対応状況は要最新確認。
- 小型モデルは多段で崩れやすい:長い計画・複数ツールの連携は、ローカルの中小モデルだと失敗が増える。タスクを小さく。
- OpenAI互換のtools機能:エンジンが対応していれば既存のエージェント枠組みをローカルに向けられる(→ OpenAI互換API、対応は要最新確認)。
運用の勘所
- ツールは最小限・明確に。説明と引数schemaを厳密に書くほど呼び出し精度が上がる。
- 多段ループに上限(最大ステップ)を設ける。暴走と無限ループを止める。
- 権限を絞る:ファイル削除・コマンド実行など破壊的ツールはサンドボックス/確認を挟む。
- 失敗時のフォールバック:ツール結果が空/エラーのときの振る舞いを決めておく。
なぜそうするか
RAGが「知識」を足すなら、ツール使用は「行動」を足します。検索・計算・社内システム操作をLLMに任せれば、ローカルで閉じた自動化が組める。ただしローカルの中小モデルは大型クラウドより計画力が弱いので、タスクを小さく刻み、安全弁を置くのが成功の条件です。
⚠️ よくある落とし穴
- 非対応モデルでツールを期待:呼び出しが安定しない。対応モデルを選ぶ。
- 権限を渡しすぎる:破壊的操作を無確認で実行させない。最小権限+確認。
- ステップ上限なし:ループで暴走、時間とVRAMを浪費。上限必須。
- プロンプトインジェクションの連鎖:取り込んだ文書やツール出力の指示に従ってしまう。信頼境界を意識 → オフライン・プライベートなLLMアプリ
対応lab
- ツール呼び出しは OpenAI互換の tools 機能を使う(対応エンジン要確認)。接続の土台は
local-llm-study/labs/openai_compat_api.md。
関連
- 原理 → ツール使用とエージェント
- アプリ構成 → オフライン・プライベートなLLMアプリ
- 章の入口へ → 第7章 ローカルRAGとアプリ 目次