1個目からね、今日個人的に一番カロリー高い説もある気がするんですけど、
Build Your Own Branded BT Harnessっていうクラウドフレアの記事ですね。
で、結構な対策となっているので、ぜひ興味ある方は自分ご自身読んでいただければって感じなんですけど。
長いな。
長いんよ、結構長い。
途中で長いことに気づいて、ああこれちゃんと読もうと思って丁寧に読んだんですけど。
すごいですね。
ざっくりどういう記事かっていうと、前回、だいぶ前に取り上げたFirefoxのMITOSでバグ大量に見つけてバグフィックスいっぱい出たような裏側の話をしたと思うんですけど。
その時に話したのが、MITOS適当に走らせたらバグいっぱい見つけたよってわけじゃなくて、
MITOSは何だろうと、そのLLMモデルを組み込んだ、今風で言うとハーネス的な仕組み。
まず探索して検証して、記表済みのイシューと重複してないか見て、POCを書いてみたいな、そういうシステムを組んでたからFirefoxがいっぱい見つけられたんだよねみたいな話をしたんですけど。
それのまさにクラウドフレア版という感じで。
クラウドフレア内部でMITOSを使って、彼らも相当数のバグを見つけてるんですけど、
そのバグを効率よく精度高く見つけるために組んでるシステムの解説というような感じです。
結構、全部読んじゃうと時間がかかるんで、気になったところを思い出しながら、かいつまみながら話そうかなと思うんですけど、
一つ、Firefoxも共通してて、なるほどというかそうだよねと思ったところとしては、
モデルに依存しないものをまず作るのが大事だよっていうのが前提としてあって、
理由としては、いいモデルがあったときに簡単に差し替えられるようにしたいっていうのはもちろんなんだけど、
なるほどなと思ったのは、1個のモデルに対して依存して最適化しちゃうと、
コードパスっていう表現をしてたんだけど、おそらく探索する範囲とか傾向とか偏りみたいなのがそのモデルに引っ張られちゃうっていう部分があるので、
結果として調査のカバレッジっていうのが下がってしまうっていうのがあって、
これ、記事中で実際にそうしてますって書いてあるんだけど、
例えば脆弱性を発見してそれを検証するっていう部分をステップで分けたときに、
そのステップごとでモデルを分けることで視点を増やしてカバレッジを下がってしまうとか、
何かに引っ張られるのを避けるっていうのがいいんじゃないかみたいな話が書いてありますと。
あとはハーネスっていうからには結構体操のシステムを組んでるよって話なんだけど、
体操のシステムじゃなくて、これだったらダメなんだっけっていう部分の問いが2つあって、
1つはサブエージェントにいろいろタスクを入れ込みして調査させるんじゃダメなのかみたいな部分に関しては、
サブエージェントを聞ければ確かにコンテキストを逼迫するとか、分岐探索みたいなのを効率的にやるっていうのはおそらく可能。
一方で、探索する過程で必要なメタデータとか結果を映像化して溜め込んで横断的に参照するっていう部分がどうしても必要になってくる。
まだいろいろ細かい部分で再適化していこうとなったときに、サブエージェントに区切ってそれぞれのプロンプトをめちゃくちゃ頑張ってチューニングすれば解決って問題には全然なさそうだし、
結構いい表現だなと思った。
オーケストレーションの問題であって、プロンプトってどうにかなる問題ではないっていうふうに表現されていますよと。
一番最初は取り組み始めとしてはスキルを素朴に作って、それで始めてみましたよっていう部分から始まってたんだけど、
課題は3つあって、1つはコンテキストがどうしても不足しますよっていう部分と、また持続性っていうのがなるほどなったんだけど、
スキル実際にこれOSSになってるんですけど、7ステップあってそれぞれは結構時間かかりそうな内容になってる。
一方で、どっかのステップで何かの理由でクラッシュすると全部やり直しにしなきゃいけないっていう部分で、トークンもめっちゃ無駄だし時間も無駄になるっていう部分がある。
あともう1つがリポジトリ間の推論で、当然ですけど、クラウドフレアぐらいのアプリケーション、大抵の会社のアプリケーションはそうなってると思うんですけど、
システム全体を見たときにそれが1つのリポジトリに収まってるわけじゃなくて、クラウドフレアの場合は126のリポジトリがお互いいろんな依存しあったりとか通信しあって組み上げられてるシステムなんだけど、
それを丸っと考慮して評価するっていうのがスキルだと結構難しいと。
例えば、あるアプリケーション、ある単一のリポジトリで、あるシステムとの内部システムの通信部分に怪しい脆弱性っぽいものが見つかりましたってなったときに、
じゃあその通信先で何が起きるのかとか、どういう認証が求められてるのかとか、そういう部分ってどうしてもリポジトリの方に行かないと情報がつかめないし、
そもそもその通信先が本番で動いてるんだっけみたいな話とか、そういうのを丸っと含めていかないとやっぱり精度も上がっていかないし、
語源値みたいなのも増えていくっていう部分があって、その部分の課題が大きかったですよと。
なんでこの3つの課題を解決するために徐々に組んでいったらハーネスっぽいものというか、今回記事で紹介してるシステムになりましたっていう話ですね。
詳しく全体像を超ざっくり話すと、大きく分けて2つのステップに分かれていて、1つが脆弱性発見、なんかVDHか、何の略か忘れたけどVDH、脆弱性を見つけるところと、
ディレクションハーネスじゃないの、きっと。
でもHがハーネスだと次がなんかあれかな、ちょっと待って。
記事を読めば多分すぐ出てくるんですけど、Vulnerability Discovery Harness、でもハーネスだったね。
見つける部分と、見つけたものを検証するVulnerability Validation Systemっていう2ステップに分けてデザインされてるっていう感じですね。
で、そうだな、割と直感的に全然理解できるというか、シンプルな2ステップになってるんですけど、それぞれのステップの中でそれなりに複雑なことをしていて、
例えば印象深かったものを話すと、脆弱性を発見するフェーズでは、やみくもにコードを読み始めて脆弱性を探すんじゃなくて、
脅威モデリングみたいなものも行うように、ELEMに指示を出してますよみたいな話。
その脅威モデリングみたいなのは、結構スタンダードな攻撃クラス、例えばメモリリークとか、DDoSとか何かいくつか記事中であったんだけど、
そういうものに加えてモデル自身が判断して、こういう攻撃がありそうみたいな独自の攻撃クラスと表現してるんだけど、
その攻撃クラスを自分で決めて その脅威モデリングを組んで検証
するっていうのも いろいろさせる っていうのをやってますと その
上で実際に脅威モデリングした 上で 実際にアプリケーションを
動かして 本当に刺さるんだっけ っていうのを検証したりっていう
のをやりますよ みたいな話とか あとは重複排除みたいな話が結構
ちっちゃくこういうの回すんだ ったら 多分 あんまり 人間が手動
で対応でいいんだけど 126リポジトリ でガンガン回すってなったときに
どうしても課題になるのが 調査 結果の重複みたいなのがあって
これ自体もこの重複をいい感じ に排除するエージェントを専用
で立てて それをステップとして 組み込まなきゃいけないぐらい
結構大事な要素ですよっていう のが書いてあって この重複要素
をLLMにやらせてる理由としては やっぱり文字列判定とか あとは
このファイルパス このファイル メタデータから機械的に判定する
っていうのはどうしても限界がある から ここにLLMを加わせることによって
結構効率的に重複の排除ができる ようになってますよ みたいな話
があったりとか あとはウィッシュリスト かな ウィッシュリストの仕組み
がすごい面白くて さっき言った ように 実際にアプリケーション
動作させてガチャガチャするっていうことを するんで ハーネス自体がある程度
の権限とか環境をいじる権限を 持ってたりするんだけど その過程
でこのバグを検証するのにこの ツールが足りないみたいなのが
あったときに それを欲しいです っていうふうに書き込む ファイル
なのかJSONなのか分からないですけど そういうウィッシュリストって呼ばれる
ものがあって このウィッシュリスト を運用することによって AIアジェント
がこれがないと困るっていうもの を溜め込んでいって クラウドフライヤー
の人間がそのウィッシュリスト を見て ハーネス側に改善を加えて
っていうループをどんどん回す っていうことをやってるらしい
面白いね ウィッシュリスト
そう どこだっけな 128のリポジトリ に対して この記事を書いた時点
で25472回の書き込みがあったって ことなんで どんどんどんどんこれ
これあれこれって言ってくる みたいな感じで この記事を書いて
る間にも このPoCをエンドツーエンド で検証するためにはFreeBSDのVM
が必要ですっていうのを書き込 まれていたりみたいな感じで 結構
面白いなというか これは脆弱性 探索以外にも結構効きそうなアイデア
だなって思ったりしたなっていう 感じですね
あとは何でなんだろうって分かん なかったんで 誰か教えてくれって
感じなのが 静的解析のツールを 最初から使えるようにしてたん
だけど 脆弱性探し出すエージェント ハンターエージェントって表現
をしてるんだけど このハンター エージェントがそれを全然1ヶ月
間1回も使わなかったっていうの があって なんで あんま早くに
渡しても意味ないよってことが 書いてあって 具体的にはセミグレット
を使えるようにしてたんだけど エージェント 1回も手を出さなかった
らしくて これは何でなんだろう っていうのが理由が書いてなかった
ので ちょっと気になるんですけど よく分かるけど これ使うでしょ
って思ったのが意外と使われない みたいな話なのかなっていう感じ
ですね
おもろいね
セミグレップを使おうとすると ルールとか書かないといけないんだよね あれね
自分で使ってないんだよなセミグレップ
プリセットはある認識だけどね カスタマーももちろん書けるけど
そうだよね だから多分プリセット で足りなくて なんか
多分普通にグレップしたほうが早いんだろうな 早めでグレップしたほうが早いんだろうな
そうかもね
エージェントしてるね
語源地とかも多いっていう噂は聞く から 推定解析なゆえに
あとは結構面白くて 調べて探し出して 見つけたものに対して批判的な
検証を別のエージェントにやらせて 最終的にこれは良さそうっていう
調査結果ができたら それを特定の フォーマットを強制して かつ POCとかも
全部書かせて 最後の最後の検証で POCが動作しなかったら その結果
信頼性が低いっていうマークをつけて 最終結果を出すっていうふうに
結構 正式性を発見するフェーズでも 語源地がなるべく少なくなるように
いろんなところにこまごまと工夫が 凝らされてるなという感じですね
この見つけた結果たちを検証するのが Validity Validation System VBSで
ここでは三つだけやっていて 一つは重複解除 ここではJiraチケットに
起票されてないかとかも見に行くらしいんで この時点で起票済みだったら
多分恥いて プラス判定評価ですね それが本当に正しいレポートなのか
って評価するけど このときに本番環境 そのシステムが本番環境で
動くものなのかみたいな部分とか そういういろんなコンテキストを
加味した上で評価したりとか あと面白いというか 確かになったのは
最新のブランチをちゃんと見に行って 同じバグがまだ残ってるかっていうのも
見に行くっていう なんで 後述 最後に書いてあるんですけど
これオンデマンドに回すんじゃなくて 定期的に多分週1ぐらいで回してるんで
回すタイミングとのズレによっては 確かにズレるようになってくるんで
運用してる概要への決め細やかさを 感じるなっていう部分と また修正ですね
最終的に重複してない評価して これは確かにまずいって思ったものは
自動で修正コミットを積むっていうのを やっていて その際にリグレッションテストも
作る なんでTDD的に まずPOC再現するテストを書いて
レッドになるのを判定して その後バッチを当てて グリーンになったら
コミット積むっていうような挙動をする このプロセスがうまくいかなかった場合は
人間が対応が必要ですよっていうフラグを立てて コミットを勝手に積まないようにするとか
またこれで多分プレリクラー立つのか分かんないですけど このコミットが
自動でリリースすることは決してないようにしていて 基本的には最後の取り出として
人間が絶対にレビューする これは理由としては プロダクション行動に対する責任を
持つというガバナンス的な側面とかを 加味してそういうふうにしてみたいですね
なので検証のほうは割とシンプルではあるものの コマゴマと運用がかかりまみえる
工夫が凝らされてるなっていう感じですね
あとは気になるお値段なんですけど 具体的な言及はなくて書けないみたいな
表現書いてあったけど 基本的に安くはないんだけど コストの傾向としては
基本的にハント 反対人と言って 前着性探すところにめちゃくちゃお金がかかる
だけど メタデータの映像化とかをしていくと 例えば同じリポジトリで
2回目にハントするときは1回目のハント ちゃんといろいろ情報が溜まってれば
約半分のコストで済むっていうような表現が書いてあって
今言った理由は実は僕の推測で こういう理由で済むみたいなっていうか
具体的なところは透けて見えないけど そういうことなのかなって解釈したんですけど
そういう部分とか またリポジトリごとに お金がトークン破産しないように
予算をリポジトリ単位で組んで タスク上限を設けてみたいな制限を設けたりとか
またさっき言ったようにPRごとにチェックするんじゃなくて 定期実行にしていて
でかいリポジトリとかでこれ回すと 実行に14時間とかかかることもあるらしくて
それなりに重い処理をしてるという感じですね
あとはこれが本当に正しいのかっていうのを どう検証してるのみたいな話で
データを可視化して それぞれのファーネル分析みたいな感じで
最初に100個これが脆弱性テストですって出してきて それを批判的なエジェントにやらせたら
10個しか正しくないみたいなのをコンテキスト注入して 40パーセントまで引き上げたみたいな
そういう感じでフェーズフェーズの数字を取って 改善をしてるっていうことをやってるみたいです
いやー面白いな
面白いよね かなり面白い
で これめちゃくちゃ アサスって感じなんだけど
このハーネス指令はオープンソースにする予定らしいんで 正座待機って感じですね
いやーちょっと マジで頼ますって感じだな
見てる感じはこれをベースに自社に最適化とか 全然できるベースになりそうだし
最初に言ったまずスキルでやってみたってやつは もうすでにOSSになってるんで見れるんですけど
そっからもう一歩踏み込んだシステムって感じだと思う
なんかリチャルカセキュリティのホワイトペーパーも 合わせて読むと多分もっと面白くって
これはなんか二役エージェントがいるけど 三役いる 三役作るって話をしてるんだよね
リチャルカセキュリティのホワイトペーパーだと
ハント側と これで言うとハント側と それに対して批判的に検証するエージェントがいて
仲裁役のエージェントもいるっていうのを リチャルカのホワイトペーパーだと書いてて
なるほどね 面白いね
仲裁役の言及はなかったな
これは多分ないんだよね だから
で 多分見てる感じ ちょっとごめん なんかサマリーを読んでしか今話してないからわかんないんだけど
なんか割とエージェント依存が結構強めの なんていうかアプローチだなという印象があって
リチャルカの場合は もっとエージェントの外に出すっていうのを
割とアプローチとして紹介してた感じがするな イメージ的には
再現性みたいな部分なのかな
再現性っていうよりは プロンプトの改善だとどうしようもない部分があるよっていうところを
読んでくれって話なんですよ
これよりも全然ボリューム少ないから 読んでもらった方が早いんだけど
プロンプトの改善だとどうしようもないっていうところが言ってあるから
できるだけ決定的な仕組みのほうに持ってくる 倒しくるっていうのをやらないとダメだよっていうのを紹介してたね
その辺がどんぐらい組み込まれてるかはちょっと
わかんないね
コードがオープンになったら見てみたいな
とはいえ決定論的じゃない部分に 委ねなきゃいけないみたいな言及は確かどっかであって
やっぱこういうシステムを組むってことは LLMの不確実性と向き合わなきゃいけないっていう部分だから
そこに対してまだまだ道の中だけど ここまでの成果が出てますっていう感じのところが
書いてあった気がするな どこだっけな
ちょっと見つけたら
結構ね 結構細々 なるべく再現性を持つように工夫されてる気がするんだよな
なんかその脆弱性 ハンターエージェントの実行時間が不自然に短くなったりしたら
それをお前おかしいだろって言って再開させる仕組みが入ってたりとか
結構細々 多分あるんだよね
ちょっと改めて全部読みたいなこれ
おすすめこれは なかなか まずセキュリティ
まあAIを使って脆弱性を探すっていう文明かもそうだけど
なんていうか みんながハーネスって言ってるのはこれかみたいな気持ちで
なんかちょうどこの山の登り方を考えてて めっちゃ助かるなって感じですね
ていうか この 何て言ったらいいんだろう
リチウム化のホワイトペーパー周り 実案件で使ってて
そのコーデしちゃうっていう部分が 微妙に言及があったりするんだけど
割とそのベンチマークとして使われてるのが OSS ばっかりで
何て言ってるんだろう 授業に使われてるコードベースに対して
こういうことやってますよっていう話って まだあんまり出てないと思うんだよね
そうなんだよな このハーネスの話に今 世の中がシフトしてきたから
だからこそハーネスの話に着目して こういうのが出せるようになってきてるっていうのがあると思ってて
例えばだけど このモデルをうちのコードに回したらこうでしたみたいな話って 出せないじゃん
そうだね
ハーネスの話にシフトしたからこそ こういう事例が出てくるようになったんだと思っていて
まあ助かります
助かるね
ちょっと楽しみ待ちつつ これ読んで自分で不完全に靴に組んでみたいなって気持ちがあったな
たぶんね めちゃくちゃ大変だと思うんだよね
どこをどうピックアップするのかっていうのもそうだし
何て言ったらいいんだろう エージェントの作り方みたいな部分が正直まだ未知数すぎて
今すごくユーザーに寄っちゃってるから 自分の立ち位置が
そこをちゃんと学ばんとなっていう感じはあるね正直
そうね
なんか裏側がクロードコードかどうかさえ想像できないもん
クロードコードなのかなさすがに わかんないけど
まあ普通にAPI使って アンスロピックのAPI使ってんじゃないの違うのかな
アンスロピックなりオープンAIなり
そうな気もしつつ
でもそのクロードコードとかって色々システムプロンプトが入ってるから
コード読んでって言った時にシュッと始められるわけで
確かにね
APIとか名前叩くとその辺からやるのがどんぐらい大変なんだろうみたいな
確かにね
想像が全然できていない感じやな
それはあるかもしんない
クロード-Pでプロセスとしてポコポコ立ち上げるのが
でもどうなんだろうみたいなね
ちょっと作ってみたいよね
はいぜひおすすめです
じゃあ次行きますか
次行きましょう