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

【408ランの実隓で刀明】AI゚ヌゞェントの数え間違いはツヌルで盎る

    AI゚ヌゞェントに「この䞭から条件に合うものを数えお」ず頌んだこずはありたせんか

    私は、返っおきた数字をそのたた信じおいたした。数えるくらいできるだろう、ず。

    なので330件のIDリストを枡しお数えさせ、その過皋を党郚蚘録したした。

    3぀のフレヌムワヌク、同じモデル、同じ蚘録プロキシを通した408ランです。

    結果は3぀ずも92.3%でした。ただし䞭身は同じではありたせんでした。

    コヌド・トレヌス・解析スクリプトはgitで公開しおいたす。


    䜕を詊したか行を返すツヌルず、数を返すツヌル

    倉えたのは、ツヌルの返し方だけです。

    IDの䞀芧をそのたた返すツヌルず、件数を蚈算しお返すツヌルを甚意したした。

      蚭蚈A: ツヌルが行を返す         蚭蚈B: ツヌルが数を返す
      ┌──────────────────────┐      ┌──────────────────────┐
      │ ツヌル → [3, 7, 11,  │      │ ツヌル → {count:322, │
      │         
 330ä»¶]     │      │         min, max}    │
      └──────────┬───────────┘      └──────────┬───────────┘
                 â–Œ モデルが数える               â–Œ モデルは読むだけ
             答「321」実際は322          答「322」そのたた

    リストの長さは11件・110件・330件の3段階、聞き方は7通り、各3回です。

    合蚈408ランになりたした。


    330件では数字が3぀ずも92.3%、ただし理由は2皮類


    たず抌さえおおきたいのは、モヌド名は「ツヌルに䜕を頌んだか」でしかないこずです。

    「フレヌムワヌクがモデルに䜕を枡したか」は別の話で、そちらは蚘録から数えたした。

      330件で「id >= 9 は䜕件か」
      ┌────────────┬──────────────┬──────────────┐
      │            │ 行を返すずき  │ 数を返すずき  │
      ├────────────┌──────────────┌───────────────
      │ CrewAI     │   92.3%      │    100%      │
      │ LangGraph  │   92.3%      │    100%      │
      │ Strands    │   92.3%      │    100%      │
      └────────────┮──────────────┮──────────────┘
      各26ランのうち24ラン正解92.3%

    92.3%ずいう数字は3぀ずも同じですが、倱敗の䞭身は2皮類に分かれたす。

    CrewAIずStrandsは、2ランず぀「1〜2ずれた答え」を返したした。

    LangGraphの2ランは、そもそも答えを出さずに終わっおいたす。

    同じ数字でも、同じ倱敗ではありたせん。

    11件ず110件では、ほがすべおが100%でした。

    䟋倖は1件だけで、CrewAIが数を返すモヌドの110件で107件を「106」ず答えたした。


    間違い方も2皮類あった

    間違えた5件を、蚘録されたIDリストから数え盎したした。

      Strands  322件ず数えるべきずころを「321」境界の読み違い
      Strands  同じく「321」境界の読み違い
      CrewAI   323件のずころを「322」境界の読み違い
      CrewAI   321件のずころを「320」集蚈のズレ
      CrewAI   107件のずころを「106」集蚈のズレ

    「境界の読み違い」は、>= 9 を > 9 ず読んだものです。

    リストには9がちょうど1件あるので、答えがその分だけずれたす。

    驚いたのは、5件すべおがツヌルを呌んでいたこずです。

    しかも5件すべお、正しいリストがその堎最終プロンプトにありたした。

    私が最初に曞いた「3件はツヌル未䜿甚」は、蚈枬偎のバグでした。

    CrewAIのツヌル名を数え損ねおいお、呌び出しが0回に芋えおいたのです。

    蚌拠はツヌル境界にある、ず蚀いながら、私の集蚈コヌドが境界を芋おいたせんでした。

    数を届けられた2぀だけ、コストが䞋がった

    同じ「数を返す」モヌドでも、モデルに届いたかどうかは3぀で違いたした。

      1問あたりのトヌクン330件・回答が出たランの平均
      LangGraph  8,574 → 143     60分の1
      Strands   11,528 → 1,418   8分の1
      CrewAI    14,600 → 12,565  1.2倍。ほが倉わらず

    CrewAIでは、数を返すモヌドでも分析圹に届いたのはIDリストでした。

    だからモヌドを倉えおも「自分で数える」工皋が残り、コストもほが倉わりたせん。

    数を実際に受け取った2぀は、答えが100%になり、コストが䞋がりたした。

    同じ「ツヌルに数えさせる」蚭蚈でも、届かなければ䜕も倉わりたせん。

    フレヌムワヌクの差が出なかったこずの芋方

    今回いちばん驚いたのは、3぀の差が出なかったこずです。

    LangGraphはツヌル呌び出しがコヌドの䞭にあり、CrewAIずStrandsはモデル駆動です。

    構造が違うのに、330件では3぀ずも同じ数字に着地したした。

    この条件の範囲では、フレヌムワヌクの局では防げたせんでした。

    防ぐ堎所は、ツヌルの返し方か、モデルの倖偎の集蚈です。

      モデル → ツヌル → モデル → 答え
          ↑ ここで数えさせるず負ける
                     ↑ ここツヌル偎で数えれば、届く限り消える


    どう防ぐかツヌルの返し方を倉える

    数を扱うツヌルを曞くずき、私は次のようにしおいたす。

    • 数える察象が数癟件を超えるなら、件数をツヌル偎で蚈算しお返す

    • そのうえで、数が最終プロンプトに実際に茉ったかを確認する

    • 答えを受け取ったら、ツヌルを呌んだかを確認する0回を蚱さない

    • 数字を䞋流に枡す前に、ツヌルの蚘録ず突き合わせる

    2぀目が今回いちばん効きたした。蚭蚈しただけでは、届きたせん。


    正盎な限界

    • 各セル21〜26ランです。統蚈的䞻匵ではなく方向性です

    • モデルは党ラン同䞀。別のモデルなら間違い方も倉わりたす

    • 途䞭、蚘録先のレヌト制限で萜ちたランがありたす170ラベル

    • それらは再実行で埋め、採甚したのは成功した方の蚘録だけです

    • 2ランは答えを出さずに終わりたした1回の呌び出しで䞊限たで生成

    • そのうち1本のトレヌスには、䞊限匵り付きの蚘録が2回分残っおいたす

    • 採甚した集蚈からは陀倖しおいたす


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

    あなたぞのおすすめ