🐡

演繹的フィードバックで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