Clineだけを使ってツールを書かせてみた。この過程で見えてきた、Clineの特徴や注意点をまとめます。
コンテキストにない情報は知らない
期待するコードを書いてもらうには、その条件を漏れなく指示する必要があります。不足していた場合、その部分は適当に埋められてしまいます。
例えば、利用ライブラリの情報がプロンプトに含まれていない場合、既に特定のライブラリを使って書かれたコードがあっても、別のコードを書く時どのライブラリが使われるかは運任せです。
希望通りのライブラリが使われたとしても、非推奨となっている古い関数を使われることもあります。
実装済みの関数があっても、その関数の存在や利用意図が伝わらないと、関数を再実装し始めることもあります。
また、LLMはコンテキストが切り替わると全て忘れてしまうので、何度も同じ情報を含めて指示する必要があります。
同じ内容を毎回打ち込むのは面倒なので、設計ドキュメントを用意して毎回プロンプトに含めたり.clinerules
を使ったりするのが、有効な方法となります。
ただ、この方法は次の問題とトレードオフの関係になっています。
無関係な情報を与えすぎると頭が悪くなる
Clineで何度指示を工夫しても解決しなかった問題が、Chatに必要最小限の情報だけを書いたら、一発で解決したことがありました。(全く同じモデルで)
何かのレポートにもありましたが、LLMはコンテキストが長くなるほど性能が下がる傾向にあり、特に関係のない情報が多く含まれると、それに惑わされるようです。
LLMの性能が下がるといっても、正直どのくらい下がるか分からないし、そもそもモデルの性能評価自体が難しいです。とりあえず、必要そうな情報は全て与えるのが良さそうに思えますが、このよく分からない性能が非常に重要なのでそうもいきません。
現状、問題を解決できなくて永遠にループする状態が、事実上AIの性能限界と言えます。
AIがスタックした場合、あきらめて手動で問題を解決するか、LLMが解決できるレベルにタスクを分解してあげる必要があります。
できるだけAIに独力で問題を解決させるためには、必要最小限の情報だけを与えるのが理想になりそうですが、手間をかけずにどう情報を与えるのか、このバランスを取るのが今後の課題になりそうに思います。
まとめ
- コンテキストにない情報をAIは推測で埋めてしまうため、指示は詳細に行う必要がある
- 頻繁に必要となる情報はドキュメント化や
.clinerules
利用で手間を減らせる - コンテキストに無関係な情報が多すぎるとAIの性能が低下する
- 最小限かつ適切な情報を与えるバランスが今後の課題