開発実践ガイド

ローカルLLMのツール呼び出しに実行前検証を入れる方法

ローカルLLMのツール呼び出しに実行前検証を入れる方法
目次
公式

公式ページで入手・手順を確認

ツール呼び出しへ対応したモデルがツール名と引数を返しても、その内容をそのままシェルや外部APIへ渡すべきではない。

モデルは実行候補を作り、アプリ側が実際に実行してよいかを決める構成にする。

モデルのツール名と引数は実行候補。アプリ側で形式、許可対象、権限を確認し、不合格なら実行せず記録する。
モデルの提案を実行前に検証する。図を拡大して見る

最初のツールは副作用のないものにする

初回は、現在時刻を返す、固定データを検索する、といった読み取りだけのツールを一つ用意する。

ファイル削除、設定変更、外部送信のような操作を最初から入れない。引数の定義も小さくする。

{
  "name": "lookup_fixture",
  "arguments": {
    "key": "string"
  }
}

引数を解析して形式を検証する

モデルの出力は、信頼済みの入力として扱わない。

JSONとして解析できるか、必須項目があるか、型や許容値が正しいかをアプリ側で確認する。解析に失敗したり、未知の項目が含まれていたりしたら、ツールを実行せずエラーとして記録する。

ツール名と実行権限を別に確認する

引数の形式が正しくても、そのツールを現在の利用者や作業が呼んでよいとは限らない。

許可するツール一覧や権限を別に確認する。

1. そのツールは存在するか
2. 引数は正しいか
3. 現在の利用者・作業に実行権限があるか
4. 実行する
5. 結果をモデルへ返す

この順番なら、モデルが許可していないツール名を生成しても実行へ進まない。

実行結果もモデル出力と分けて残す

ツールの結果はモデルの推測ではなく、外部処理が返した情報だ。

記録では、

  • モデルが作ったツール名と引数
  • アプリ側の検証結果
  • 実際のツール実行結果

を別々に残す。

正常系だけでなく拒否できるかも試す

最初の確認では、正常な呼び出しに加えて次も試す。

  • 必須引数が足りない
  • 引数の型が違う
  • 許可一覧にないツール名
  • 許容範囲を外れた値

これらが実行前に止まれば、次に複数ツールや複数段階の処理へ進める。

Ollama側で最小のツール呼び出しを確認したい場合は、Ollamaのツール呼び出し入門を先に使える。モデル同士のツール選択能力を比べたい場合は、ツール呼び出し対応のローカルLLMを評価する方法へ進む。

まとめ

  • モデルがツール呼び出しを生成することと、その実行を許可することは分ける
  • 引数を形式どおりに解析・検証した後で、許可したツールと操作かを確認する
  • 最初はファイル削除や外部送信をせず、副作用のないツールだけで試す
  • モデルの出力、検証結果、実際の実行結果を別々に記録する
同じテーマから

サイト内検索