次がメモリーマネジメントの話です。
このEverything Cloud Codeのフックスとかを使うことによって、
自分がやり取りした内容がセッションの情報として、
この.cloud配下にテンプファイルとして配置されますよという機能が実装されています。
これを使うことによって、新しくいろいろ作業しました。
で、終わって、また次の日やるときに、
普通であれば前の日のことは全て忘れてしまっているんですけれども、
この前日の作業内容をもう一回プロンプトとして渡してあげることによって、
機能の続きからやることができるというような機能になっています。
どうやって差し込むかというと、
例えば昨日やったものが残っているのであれば、
--system promptで囲んであげて、機能のやつを差し込むみたいな、
そういったやり方でできますという話。
さらに、これ面白いなと思ったやり方なんですが、
特定の実装、特定の作業みたいなことをするときに、
あらかじめ決まっているプロンプト、--system promptを入れるという、
cloud-system promptで何とか何とかreview.mdみたいなやつを差し込んでおく。
かつ、これをエイリアスとして設定しておくことによって、
いつもやる作業が自動的に入っている状況で、
実装を開始できるというこのやり方、
非常にユニークで面白いなというふうに思いました。
最後にですね、このeverything-cloudコードに
hooksのサンプルが書いているんですけれども、
これを使うことによって何ができるかというと、
まず、play-compact-hookですね。
コンテキストが埋まってくると、
コンパクトという作業をすることによってコンテキストを圧縮して、
続きからまたやるという作業があるんですけれども、
これをコンパクトがトリガーされた瞬間に、
コンパクトする前に今までのやり取りを
添付ファイルに保存しておくという機能がありますね。
これは何でやっているかというと、コンパクトをすると、
結構今までやってきたことを忘れちゃうみたいなことがあるので、
そのバックアップとして保存しておくみたいな意味だというふうに思っています。
2つ目がstop-hookのトリガーですね。
これはセッションが終わったときに、今までのやり取りを
同じようにメモリとして添付ファイルに保存しておくというようなアプローチですね。
最後が、いちいちシステムプロンプトで渡さないといけないのかと、
めんどくさいよねというところがあるので、
セッションスタート-hookを使うことによって、新しいセッションが立ち上がったときに、
自動的に過去のメモリが呼び出されて、
機能のことを覚えている状況でスタートできますというような機能ですね。
こういったものが紹介されていました。
ただ、これにおいては、私は場合によって使うかなというふうに思っていて、
まず一つは、クロードコードのネイティブにも最近メモリ機能が含まれたので、
そっちを使ってもいいんじゃないかなというところと、
あとは、メモリの、クロードコードのメモリのどういうメモリが保存されているかって、
実際に.cloudハイカーで見ることができるんですけども、
見てみると、あんまりあってないんですかね。
やっぱり、AIが私とAIとのやりとりをサマライズしたものが入っていくので、
ちょっと意味を取り違っていたりとかいうところがあって、
そのメモリがある状態で次のセッションを始めてしまうと、
間違っているものをあたかも正解かのようにやってしまうと。
これは、ChatGPTとかGeminiとかの皆さんが使うチャットプロンプと同じことが起きると思うんですが、
変に間違った覚え方をされてしまっているものが、
ずっとあなたってこうですよねみたいなことを言われるみたいなところがあると思うんですが、
そういったことが起こる可能性があるので、
私は結構メモリ機能っていうのは使わないようにしていますね。
どっちかというと、もちろん便利な側面はあるんですけども、
やはりちょっとロバスト感があるというかですね、
曖昧さがあるというところはあるので、トレードオフかなと。
その人の性格とかにもよるんじゃないかなと思っているんですが、
私はどっちかというと、きちんとと定義したいみたいな派なので、
こういうメモリみたいな機能を使うんではなくて、
しっかり継続的にやるものであれば、
Cloud.MDとかSkillsにちゃんと落とし込んでいきたいなという派なので、
私はすごくいいアプローチだと思うんですけど、
使わなさそうだなというものかなというふうに思いました。
では次に行きましょうか。
これが結構私が感動したものなんですけれども、
Continuous Learning V2というスキルです。
これは何かというと、
日々やり取りをしますよね、Cloud Codeと。
やり取りしている中で、
これって同じパターンだよなというのがいっぱい出てきます。
AIは正解したり成功したり失敗したりする中で、
それを本当であれば自分でSkillsにしたりとか、
Cloud.MDにしていくことによって精査性が上がっていくんですけれども、
それを自動化しようというような仕組みですね。
どういうふうな動きをするかというと、
ここに書いているんですけれども、
まずセッションが立ち上がりますので、
何かプロンプトを打ちます、
何かツールを呼び出しますってなると、
フックが呼び出されて、
その人が何をやったのかっていうのが、
JSON Lファイルにどんどん保存されていきます。
この保存された情報をバックグラウンドで配布がですね、
これは重要なディシジョンなのか、
継続的にAIが間違ってしまうやり方なのか、
ユーザーが好む動き方なのかみたいなところを認識して、
それぞれカテゴライズしていきますというふうな機能ですね。
かつ、それがそのリポジトリだけの話なのか、
例えばその人の好みとかであれば、
別にリポジトリ関係なくグローバルな話だと思うので、
グローバルなスコープなのかみたいなところを自動的に判別します。
それができた後、何が出来上がるかというと、
プロジェクト配下、プロジェクトスラッシュ配下、
もしくはインスティンクトパーソナル配下、
要はグローバルですね。
グローバルの中にこういうふうなユーザーの好みがあるとか、
こういうふうな実装の傾向があるみたいなところを、
重みをつけた上で分類して、
ファイルを作ってくれるっていう機能があります。
最後にこのEvolveっていうコマンドを打つと、
それらのユーザーの今までの好みだとか、
実装のパターンみたいなものを、
じゃあこれをこういうふうなスキルズにしましょうとか、
こういうふうなエージェントにしましょうみたいなところを提案していってくれて、
それが実際にスキルズとかエージェントにどんどん反映されていくっていう機能です。
この点がすごく面白いなと思ったところは、
まずユーザーの動作みたいなところをログとしてしっかりとっているというところですね。
これによって同じパターンとか傾向をしっかり認識できるというところと、
かつそれを裏側でカテゴライズして分類して評価してみたいなところが動いていくので、
ユーザーが何か作業している間に、
これって同じパターンだよなとか、
これって自分の好みの実装パターンだよなとか、
これってAIがよく間違えるなみたいなところを自分で考えなくていいっていうところは、
自分の脳のメモリとかそのリソースを削減するという意味では非常に面白いかなというふうに思いました。
最後にそれを評価しただけでは意味がないので、
それを実際にコマンドとかスキルとかサブエージェントとかに落とし込んでいくというコマンドもありますというところがあるので、
これを本当に日々繰り返していけば非常に自分に合ったというか、
非常に賢い、精査性が高いクロードコードが出来上がっていきそうだなというふうに思いました。
残り2つちょっと私が気になったものをご紹介していきたいというふうに思っています。
次はですね、クロードの並列実行ですね。
よく私もXとかで見るのはクロードコードを何十個も開いて、
夜中に全部やらせていたら何か20個できましたみたいなそういうのを見るんですけど、
あれは正直ですね、AI驚き屋というかAI商材屋さんがやっているパターンが99%なんだろうなというふうに思っていて、
実際あんなこう20個も30個もターミナルしかもわざわざ綺麗に並べてやる人って本当のエンジニアでいないんじゃないかなというふうに思うんですが、
例えばですね、このボーリスさんが5個ターミナルでクロードを動かしているぞみたいなことをポストしているものに対して、
このエブリシングクロードコードを書いた著者はわりと否定的な意見を持っていて、
別に5個動かす必要ないよねみたいなことを言っていて、
本当に5個いるんだったら5個やればいいし、別に2個で目的達成するんだったら2個とか1個とかでもいいよねっていうことを言っています。
これはもう本当におっしゃる通りだなというふうに思っていて、
あとはその人間の脳のキャパシティの限界みたいなことがあるなというふうに思っていて、
5個もタスクを同時に実行することって人間かなり不可能だと思っていて、
もし似たような機能の実装であれば2,3個立ち上げることはできると思うんですが、
本当に深くフォーカスしてやらないといけないタスクがある場合は、
それを1個ディープフォーカスしないといけないタスクA, B, Cっていうのをそれぞれ動かして、
それを同時並行でやれるんですかっていうふうに考えた時には、
やっぱり本当に最小のクロードコードの数、ターミナルの数でやるべきだなというふうに私も思っていて、
チョーさんも同じような考え方を述べているというところですね。
それから細かいディープとしては、これはもう今やっている方は非常に多いと思うんですが、
ワークツーリーを使って作業しましょうと、そうすることによって、
ワークツーリーを使わないとコンフリクトが起きてしまうので、
ワークツーリーでちゃんと作業環境を分けてそれぞれの機能を実施しましょうというところと、
あとはこのリネーム機能も使って、このセッションが何の作業をしているのかみたいなところを
ちゃんと名前を付けることによって迷子にならないようにするというようなことをお勧めしていました。
あと最後に、このカスケードメソッドという考え方は、
非常にエンジニアの仕事のやり方のマインドセットとして面白いなというふうに思いました。
これは何を言っているかというと、複数のクロードコードのインスタンスを立ち上げますと、
その3つとか4つとか立ち上げた場合に、
これをマネジメントするためにカスケードパターンというのを使いましょうというのを推奨しています。
どういうフローかというと、まず新しいタスクを一番左のターミナルのタブで開きます。
それが終わったらどんどん右に、隣に隣に持っていって、一番左が一番新しいタスクで、
ちょっとずつ右に移っていくと。
このターミナルが、今ビデオポッドキャストを見ている方は画面が見れていると思いますけど、
この場合では2個立ち上がっていますが、まず左を立ち上げると。
古くなったものを右に、右に持っていくというような話ですね。
最終的には画面全体としても3つか4つぐらいにしておいて、そこにフォーカスして作業しましょうというようなレコメンデーションをされていました。
では最後ですね、オーケストレートコマンドという、このエブリシングクロードコードの実際のコードの中身を最後紹介したいなと思っていて、
これが結構私は感動したというか、これやりたいなと思ったものでした。
これはどういうことかというと、エージェントのワークフローをコマンドとして定義しているというものですね。
使い方としてはスラッシュオーケストレートでどういう実装のタイプなのかと、その実際のタスクの内容みたいなことを定義するというような機能です。
例えばスラッシュオーケストレートフィーチャーであれば、このワークフローで動きます。
プランナーが動き、TDDガイドのエージェントが動き、コードレビュアーのエージェントが動き、最後セキュリティレビュアーのエージェントが動くみたいなものが、
自動的に反映されていくと。なので、プロンプトを入れるときにまずプランナーエージェントを動かして、
TDDガイドのサブエージェントを動かしてって言わなくても、このスラッシュオーケストレートでやりたいことを書くだけで、
自動的にサブエージェントのワークフローを組んでくれるというものですね。
どういったワークフローのタイプがあるかというと、この例でいうと、フィーチャー、バグフィックス、リファクター、セキュリティってあって、
それぞれフィーチャーとバグフィックスであれば、最初プランナーがいて、その後実装がいる。
リファクターであれば、まずアーキテクトがいて、コードレビューして、最後TDDガイドがいる。
セキュリティであれば、まずセキュリティのレビュアーのエージェントが立ち上がって、コードレビュアーが来て、
最後にアーキテクトが立ち上がるみたいなパターンになってますね。
あと、この実装で私が面白いなというふうに思ったのは、このハンドオフドキュメントフォーマットというものですね。
この前のエージェントから次のエージェントに何か作業を依頼するときに、コンテキストが消えてしまうという問題があります。
例えば、これやってくださいと次のエージェントに渡すときに、その背景とかが分かってないと、
なんでこれやってるんだっけってのが分からなくて、ぐちゃぐちゃな結果になるみたいなことがあるんですが、
このハンドオフドキュメントのフォーマットを定義していることによって、
次のエージェントに対して、前々のタスクで何をやっていて、どういうことが分かって、どういう問題があって、
次はどういうことを解決していきたいかみたいなところを、ちゃんと定義されたドキュメントとして渡すことによって、
コンテキストが変にならずに、どんどんエージェントを次から次に渡していくことができるというアーキテクトになっていて、
これは非常に面白いかなというふうに思いました。
最後が、これは参考例が書いているものになっていて、
例えばフィーチャーでこういうものをやってくださいって言ったら、
プランナーが動き、TDDガイドが動き、コードレビューが動き、セキュリティレビューが動き、みたいなものですね。
じゃあですね、せっかくなのでこれで動いているプランナーのエージェントもちょっと見てみたいというふうに思うんですが、
オーケストレートでよく使っているこのプランナーというエージェントですが、
得意してすべきなのは、モデルをオーパスで選定しているということですね。
あと中身はそんなに難しいことは書いていなくてですね、あなたのロールはこういうものですよとか、
プランニングプロセスとしてまず要求項目をちゃんと分析して、アーキテクチャのレビューをして、
それをステップでブレイクダウンして、どういう順番でやるかみたいなところを書きましょうと。
最後にこういうふうなフォーマット、プランのフォーマットはこういうドキュメントフォーマットで出力しましょうというようなパターンが書いていますというような感じですね。
このオーケストレーションは、私もエージェントを使うことはあるんですけど、
毎回このエージェントを使ったとこのエージェントを使ってやっていたんですが、プロンプトで自分で入れてやっていたんですが、
この参考例のようにオーケストレーションみたいなコマンドを作って、そこで機能実装の場合はこの流れ、調査レポートの場合はこの流れみたいなところを事前に定義しておけば、
いちいち言わなくても自律的に判断してやってくれるし、かつプランニングはオーパスモデルを使って実装はソネットモデルを使うみたいなところで、
トークンの使用量を抑えることにも非常に貢献できそうだなというふうに思いました。