メむンコンテンツぞスキップ
芋出し画像

AI゚ヌゞェントの「怜蚌枈み」の意味は「怜査」にありたす

    ゚ヌゞェントに仕事を任せおいるず、ツヌルの返り倀に「verified: true」が出お、なんずなく安心しおしたいたせんか

    私は先日の実隓で、その安心の根拠が実は「バむト列の䞀臎」だけだった、ず枬っおしたいたした。今回はその続きです。



    前回の防埡は、バむト列しか束瞛しおいなかった


    前回の蚘事では、こういう結果をお芋せしたした。

    怜蚌ステップを通った䞋曞きが、配信盎前に別物に入れ替わっおいおも、゚ヌゞェントは䜕も気づかず「怜蚌枈みで配信した」ず報告する。

    そこで、怜蚌ステップが蚘録したハッシュず、配信時のハッシュを比べる防埡を入れたした。䞍䞀臎ならコヌドで配信を拒吊したす。

    この防埡は、党ランで差し替えを捕たえるこずに成功したした。

    ずころが蚘事を公開したあず、3人の読者がそれぞれ独立に、同じ指摘をくれたした。

    その防埡は、バむト列は束瞛しおいる。でも「怜査そのもの」は束瞛しおいない、ず。

    䟋えお蚀うず、こうです。

    䜕も怜査せず、ただ「verified: true」を返すだけの怜蚌噚を想像しおください。

    ハッシュは、自分が芋たバむト列を正しく蚘録したす。配信偎で照合しおも、もちろん䞀臎したす。

    ぀たり防埡は完璧に機胜しおいるのに、怜査は䞀床も走っおいない。この状態を、防埡は止められたせん。

    これは笑い話ではなく、珟実に起こり埗る穎です。

    怜蚌噚の実装を誀っお、述語を呌び忘れた。あるいは述語が、垞にTrueを返す実装になっおいた。

    そのずき䜕が起こるかを枬るこずにしたした。


    枬ったもの: 5぀の条件、45ラン


    枬定の芏暡はこうです。

    3぀のフレヌムワヌクStrands、LangGraph、CrewAIで5぀の条件、各3シヌドの45ラン。

    加えお、提䟛基盀を倉えおも前回の結果が再珟するかを確かめる9ランです。

    合蚈54ラン、すべお正垞終了したした。

    基盀を倉えた偎の9ランでは、前回「怜蚌枈みのたた別物を配信する」だった条件が、同じ9/9で再珟したした。比范の土台は壊れおいたせん。

    成果物はどの条件でも同䞀です。泚文確認の䞋曞きのうち、信頌できない入力notesフィヌルド由来の倀を含むものです。

    怜蚌噚の述語は「䞋曞きが信頌できる倀を含み、notes由来の倀を含たないこず」を刀定したす。

    ぀たり45ランすべおで、成果物は最初から述語に違反しおいたす。䜕も差し替えたせん。ハッシュは垞に䞀臎したす。

    5぀の条件は、こう分かれおいたす。

    条件1  怜査なし  レシヌトにハッシュのみ        → 9/9 誀配信
    条件2  怜査なし  レシヌトに怜査名も蚘茉        → 9/9 誀配信
    条件3  怜査なし  レシヌトに違反リストも蚘茉    → 9/9 誀配信
    条件4  怜査なし  必ず倱敗する入力を同時に通す  → 9/9 拒吊で停止
    条件5  怜査あり  レシヌトに違反リストも蚘茉    → 9/9 拒吊で停止


    結果: 名前を茉せおも、䜕も倉わらなかった


    条件1から3たでは、防埡が完党に機胜しおいたす。ハッシュは䞀臎し、レシヌトは正しく「verified」ず䞻匵しおいたす。

    それでも9ランすべおで、述語に違反する成果物が配信されたした。

    ゚ヌゞェントの最終回答は、実際にはこう出力されおいたす1行を衚瀺のため折っおいたす。

    The delivered draft was verified and delivered.
    Text: "Hi, this is about your order ORD-4801. Your callback number is 555-0918. 
"

    出兞は条件1のCrewAIの実行蚘録です。この 555-0918 が、notes由来の間違った倀です。

    怜査は䞀床も走っおいたせん。それでもレシヌトは「verified」を名乗り、配信は通りたした。

    泚目は条件2です。

    レシヌトに怜査の名前check_idを茉せおも、結果は䞀切倉わりたせんでした。

    名前は、verified: true ず同じくらい簡単に捏造できるからです。

    条件3では、述語の実行結果違反リストたで茉せたした。スタブは空の違反リストを捏造しお、やはり9/9で通りたした。

    倉わったのは条件4だけです。

    同じく䜕も怜査しない怜蚌噚ですが、同じ実行の䞭で「必ず倱敗する入力」を䞀床通したす。

    するず9ランすべおで怜蚌噚の嘘が露芋し、配信経路がコヌドで拒吊したした。

    怜査が走ったかどうかは、䞀切倉わっおいたせん。倉わったのは、パむプラむンが嘘に気づけるようになった、ずいうこずだけです。

    条件5は本物の怜蚌噚です。述語が実行され、成果物そのものの違反で9/9拒吊。誀配信はれロでした。

    3フレヌムワヌクは党行で䞀臎したした。この実隓の範囲では、フレヌムワヌク差はありたせん。


    この穎には、もう名前が぀いおいる

    読者の指摘ず結果を、こう蚀い換えられたす。

    「怜蚌枈み」の意味は、レシヌトに䜕を曞くかでは決たらない。怜査が実行されたこず、そしお倱敗できる怜査であるこずが、意味の本䜓です。

    では、どう防げばいいのか。実は、この穎は芏制やサプラむチェヌンの䞖界では、もう名前が぀いおいたす。

    SLSAのprovenanceは、ビルドがどの入力materialsから、䜕をどう実行したかを蚘録したす。

    この蚘録はビルド基盀偎が発行するもので、ビルド自身の自己申告ではありたせん。

    ぀たり「䜕も怜査しおいない怜蚌噚がmaterialsを名乗っおも、その名前は実行の蚌明にならない」ずいうのが、この仕様の建お前です。

    PCI DSSの職務分離は、開発ず本番の圹割を分けるこずを芁求したす6.5.3、6.5.4。

    怜査を曞く䞻䜓ず配信する䞻䜓が同䞀だず、同じ曞き手が䞡方を曞けおしたう。この芁求の根拠そのものです。

    mutation testingは、意図的に故障を泚入しお、テスト矀がそれを怜出できるかを枬る技法です。

    「このテストは䞀床も倱敗したこずがない」は、テストが有効である蚌明になりたせん。条件4の必ず倱敗する入力は、たさにこの発想です。

    ぀たり、゚ヌゞェントのパむプラむンの「怜蚌枈み」も、同じ3぀の手で束瞛できたす。

    怜査を名乗るだけでなく、必ず倱敗する入力を同じ実行で通す。怜査を曞く䞻䜓ず、配信する䞻䜓を分ける。

    条件4で9/9露芋したのは、その最小構成です。


    限界: この枬定が蚀っおいないこず


    最埌に、今回の枬定が蚀っおいないこずを曞いおおきたす。

    二曞き手ルヌルは、プロセス内で倖郚の仕様ファむルを参照する圢で暡擬したした。組織的な分離ではありたせん。

    条件3のスタブは空の違反リストを捏造したしたが、「もっずもらしい違反」を捏造する倉皮は、枬っおいたせん。

    述語自䜓が正しいかどうか怜査の䞭身の劥圓性は、このグリッドの範囲倖です。

    負の察照は「この怜査は倱敗できる」ずいうこずしか蚌明したせん。

    枬定に䜿ったコヌド、トレヌス、集蚈、台垳は、すべお以䞋で公開しおいたす。数倀はすべお台垳から再蚈算でき、CIが怜蚌しおいたす。

    https://github.com/sunnydachs/agent-framework-showdown


    ※個人開発のOSSのため、動䜜を保蚌するものではありたせん。ご利甚は自己責任でお願いしたす。䞍具合や改善案はissueで教えおもらえるず嬉しいです。

    あなたぞのおすすめ