演繹的フィードバックでLLMの精度を高めるMCP実装
先日、MCPサーバーを実装する上で有用と思われるセキュリティ対策のパターンを解説しました。
今回はセキュリティというより精度向上の話ですが、場合によってはセキュリティの向上にもなります。
具体的な話をすると、筆者が開発しているプロセス管理用のMCPサーバーでは、プロセス起動時にツールに対してscriptとargsを指定する必要があります。
例えば、npm run devというコマンドでプロセスを起動したい場合、script: 'npm'、args: ['run', 'dev']となります。
しかし、LLMが度々script: 'npm run dev'という指定の仕方をしてしまい、期待した動作にならないケースが散見されていました。
この問題を解決するために、最初はCLAUDE.mdに注意書きを書いていたのですが、それでも守らないケースがあるため対策を講じました。
バリデーションとエラーによる対策
今回講じた対策は、scriptにホワイトスペースが含まれているかをチェックし、含まれている場合は修正するように指示することです。
例えば、script: 'npm run dev'と送ってきた場合、MCPは以下のようなエラーメッセージを返却します。
scriptにホワイトスペースを含めることはできません。
script: 'npm', args: ['run', 'dev']というように分けて指定してください。
これを返すと、LLMが再度ツールを使用し直してくれます。
このやり方のメリットは、
- あくまでバリデーションは決定的なルールベースなので確実
- メモリを忘れて再度間違えても自動で直してくれる
ということです。
演繹的フィードバック
この決定的なルールベースでの判定と対話的なフィードバックによる自動補正を、僕は演繹的フィードバックと表現しています。
AIが帰納的であることのメリットである「ルールの自己補正」と、「決定的なルールがもたらす確実性」を組み合わせることで、LLMの精度向上と利便性をバランスよく享受することができそうです。
これはAIに完全に身をゆだねるVibe Codingにおいて重要なセーフティネットになると考えます。
Discussion