LLMの使い方で、よく使っているのが、人間が制作したものをAIに簡単にチェックしてもらう、ということ。
以前作った、ブログを批評してくれるイルカは毎日常用している。
1つの文章を見てもらうだけでなく、2つの文章間に齟齬や、矛盾がないか見てもらう、ということも、たびたびやっている。
人にドキュメントを見せる前などはとくにそう。
同僚にチェックしてもらう前に、ちょっとした誤字とか、ここが意味不明です、みたいなところにつっこんでもらうと、最低限の品質を保てると考えている。
2つの文章を見比べるシチュエーションは、以下のようにいろいろと考えられる。
- 実装とテストの内容に齟齬がないかチェックしてもらう
- 実装とドキュメントの内容に齟齬がないかチェックしてもらう
- エンジニア向けと企画メンバー向けのドキュメントを見比べてもらう
- 自分のもとに届いた、受け取った情報と、自分の返答の流れがおかしなことになってないか見てもらう
こういう活動を自動化してくれるCLIツールがあると便利そう、と考えて、作ってみた。みた…と言いつつ、実装はAIにやってもらっている。
最初はシェルスクリプトでやっていたけど、あまりにエラーばかりになるので、Goで書き直してもらった。
github.com
使い方
複数のファイルを指定して起動すると、それらの内容をOpenAIに投げて、矛盾点を指摘してもらう。
簡単に作った、足し算プログラムと足し算ドキュメントを渡すと、このように、矛盾は見つからない、という出力が得られる。
OpenAI APIを使ってファイル間の矛盾を分析しています...
2025/05/19 21:43:18 OpenAI APIからの応答を受信しました
分析結果: 提供された計算機モジュールに関して、コードとドキュメントの間で顕著な矛盾は見られません。コードとドキュメントは、一貫して.add関数の使用方法と動作について説明しています。注意事項に関して言及されている内容も、コードでの実装と一致しています。
矛盾は見つかりませんでした
つづいて、わざとエラーや矛盾を混ぜたファイルを渡すと、このような矛盾点をずらすら紹介してくれる。
$ LLM_MODE=openai ./check_differences incorrect/*
OpenAI APIを使ってファイル間の矛盾を分析しています...
2025/05/19 21:42:58 OpenAI APIからの応答を受信しました
分析結果: JavaScriptファイルとドキュメントの間にいくつかの矛盾があります。特に、関数の動作とドキュメントの記載に関する差異が見られます。
incorrect/calculator.js,incorrect/calculator.md:add関数はドキュメントでは数値型に変換されると記載されていますが、コードでは変換されていません。そのため、文字列として連結される可能性があります。
incorrect/calculator.js,incorrect/calculator.md:multiply関数がcalculator.jsに存在しますが、calculator.mdには記載されていません。このため、ドキュメントからはこの関数の存在がわかりません。
incorrect/calculator.js,incorrect/calculator.md:使用例の項目で、コマンドライン引数がJavaScriptファイルでは2または3個必要とされていますが、ドキュメントでは2個のみが受け入れられると記載されています。
incorrect/calculator.js,incorrect/calculator.md:モジュールとしてエクスポートする際に、calculator.jsにはmultiply関数もエクスポートされていますが、calculator.mdにはそのような記載がありません。
原理的には機械的に矛盾の有無を教えてくれるツールを作れるはずだけど、うまくいくのか?と試しに作ってみたら、試しに作ってみたデータではうまくいっている。
手元にある適当なリポジトリの、実装ファイルとテストファイルなどを渡してみたら、矛盾なし、と教えてくれたり、!を消して論理式を逆にすると、論理式の仕様がちがう、と矛盾を指摘してくれたりした。
活用法
エラーがなければexit 0、矛盾があればexit 1なので、CIに組み込むような使い方もできるのではないかと考えているのだけど、LLM側のモデルが賢くなってくると、これまで納得してくれていたファイルの組でも、ある日賢くなって、矛盾を指摘し始める、ということがあるかもしれない。
毎回、リポジトリ内のドキュメント全部をLLMにわたすと、すごい金額になりそうなので、全ファイルを毎回チェックするんじゃなくて、変更のあったファイルをチェックするような使い方が向いていると思う。
どのファイルとどのファイルを比較すると有用か、という設定に苦労しそうだけど、READMEか何かを読んで対応を決めて、自分で探してくれるとよさそう。
ここまでの日記をAIに批評させたら、内容が専門的すぎる、というので、一般家庭での活用も考えておこうと思う。
大人が書いた日記と子どもが書いた日記を指定して実行すると、AIが矛盾を指摘してくれる。そのことから、大人と子供の、視線の違いとか、解釈の違いに気付ける、という使い方はどうでしょうか。
大人は、雨でバーベキューできず最悪のキャンプだった、とか言ってるけど、子どもは、家族でトランプができて楽しかったです、とか書いてて、いい話だね、みたいな使い方。
ディストピアっぽい使い方も考えておくと、生徒たちが書いた読書感想文をこのツールに渡して、他の生徒と矛盾する、異なる感想文を不合格とする、という採点に使う、とか。