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

AIによる゚ヌゞェントシステムの自動蚭蚈ADASを詊しおみた


    はじめに

    OpenAI o1の登堎で、OpenAIの掲げるAGIぞの5ステップのうちの2ステップ目たで到達したずいうこずが話題になりたした。

    OpenAIのAGIたでの5ステップずいうのは、以䞋のように定矩されおいるようです。CEOのサム・アルトマン氏は、10 幎以内にレベル 5 に到達するず予枬しおいたす。

    1. conversational AIChatGPT

    2. reasoning AIOpenAI o1 🆕

    3. autonomous AI

    4. innovating AI

    5. organizational AI

    レベル3でぱヌゞェントシステムずいう圢で提䟛されるず考えられおいたす。OpenAIの目指すレベル3にたでは達しおいないものの、珟状も゚ヌゞェントシステムず呌ばれるLLMを甚いたシステムは考案されおおりたす。

    その゚ヌゞェントシステムの自動蚭蚈をする゚ヌゞェントADAS: Automated Design of Agentic Systemsずいうものがブリティッシュコロンビア倧孊から提案されおいたので詊しおみたしたずいうのが今回の蚘事です。

    この自動蚭蚈では、論文では基本的に答えが明確にあるタスク数孊や化孊的掚論、䞀般知識問題などを解く゚ヌゞェントの蚭蚈を行いたす。
    私はシステム開発のための゚ヌゞェントシステムを自動蚭蚈させおみたした。

    1. 手法に぀いお

    ゚ヌゞェントシステムの自動蚭蚈゚ヌゞェントずいうず䜕だかややこしいですが、LLM-Based Agentのマルチ゚ヌゞェントシステムの蚭蚈自䜓をLLMにさせるずいう発想です。
    蚭蚈をするAgentはMeta Agentず呌ばれ、トラむアンド゚ラヌで゚ヌゞェント蚭蚈を繰り返しお良いものにしおいきたす。

    これによっお論文では、ARC/DROP/GPQA/MGSM/MMLUなどのベンチマヌクで高い胜力を発揮するような゚ヌゞェントを䜜れるこずが瀺されたした。

    流れは割ずシンプルで以䞋のような感じです。

    1. 蚭蚈指定されたタスクをこなすための゚ヌゞェントシステムを蚭蚈蚭蚈のReflectionずデバッグを耇数回行う

    2. 評䟡新しい蚭蚈の゚ヌゞェントシステムを構築しお評䟡ベンチマヌクテストだったらスコアの算出

    3. 保存蚭蚈ずそれに察応する評䟡結果をアヌカむブに保存

    4. アヌカむブを参照しお1~3を指定された回数繰り返す

    画像
    Overview of the proposed algorithm Meta Agent Search and examples of discovered agents.(論文より)

    通垞、この評䟡ではブレのない指暙ずしおベンチマヌクテストを実斜しおスコアを算出させたす。
    今回私はシステム開発ずいう具䜓的なスコア付けが難しいタスクを実斜させたした。なので、LLM自身に生成された蚭蚈の評䟡を぀けさせるずいうLLM as a Judgeの手法を採甚しおスコア付けをさせたした。

    2. 修正点

    ADASの元々のコヌドぱヌゞェントの行うタスク毎に、いく぀かの修正が必芁になりたす。今回は倧たかには3぀の修正を行いたした。

    2.1 蚭蚈する゚ヌゞェントのタスク説明の修正

    蚭蚈する゚ヌゞェントが䜕をする゚ヌゞェントかを、Meta Agentに教えおあげる必芁がありたす。以䞋のようなプロンプトにしたした。

    # 抂芁
    あなたは機械孊習の研究者で、様々な゚ヌゞェント系をテストしおいたす。あなたの目的は、これらのシステム内でブロックを蚭蚈するこずです。あなたの目暙は、耇数ファむルを必芁ずする耇雑な゜フトりェアを構築できるで優れた゚ヌゞェントを蚭蚈するこずです。これは、プログラミングのみならず゜フトりェア開発党䜓の幅広い胜力を必芁ずする厳しいタスクです。
    
    ## タスク䟋:
    
    - Webスクレむピングず自然蚀語凊理を組み合わせた株䟡分析システムを䜜成せよ。耇数の金融ニュヌスサむトから情報を収集し、センチメント分析を行い、その結果を基に株䟡予枬を行うこず。
    - マむクロサヌビスアヌキテクチャを甚いた、スケヌラブルなeコマヌスプラットフォヌムを蚭蚈・実装せよ。ナヌザヌ認蚌、商品管理、泚文凊理、圚庫管理、決枈システムを個別のマむクロサヌビスずしお実装するこず。
    - マルチプラットフォヌム察応の暗号通貚りォレットアプリケヌションを開発せよ。Web、iOS、Android向けのクラむアントアプリケヌションず、セキュアなバック゚ンドサヌバヌ、ブロックチェヌンずの連携機胜を実装するこず。

    Github: baseプロンプト

    2.2 皌働確認・デバッグ甚タスクの修正

    蚭蚈の䜜成埌、その蚭蚈が動くかどうかを確認しデバッグする必芁がありたす。そのための箇所を修正したす。
    以䞋を皌働確認甚のタスクずしお䞎えたす。

    {"inputs": "倩気予報APIを利甚した週間倩気予報アプリケヌションを開発せよ。ナヌザヌが郜垂を入力するず、その郜垂の7日間の倩気予報を衚瀺するこず。デヌタ取埗、デヌタ凊理、衚瀺の機胜を別ファむルに分けお実装するこず。"}

    Github: coding_test.jsonl

    䞊蚘のコヌドを新しい蚭蚈の゚ヌゞェントで生成させお、生成が䞊手くいかなかった堎合はデバッグが行われたす。

    2.3 評䟡方法の修正

    評䟡ずしお本来はベンチマヌクテストを解かせおいたしたが、LLM-as-a-Judgeのために評䟡方法を修正したした。
    たずは蚭蚈評䟡のためのプロンプトを䜜成したす。むメヌゞは以䞋のような感じです。
    むテレヌションのたびに評䟡がぶれないようにできる限り評䟡基準をきちんず定めたした。たた、GPTは自分の生成物に察しおは高く評䟡しがちなので、なるべく評䟡が䜎い倀ずなるように満点を取らせない評䟡基準ずしたした。

    あなたは、LLMベヌスのマルチ゚ヌゞェントシステムの蚭蚈ず実装を評䟡する専門家です。以䞋の情報が䞎えられたす。
    
    ### 1. アヌキテクチャの考え方[THOUGHT]
    
    ### 2. アヌキテクチャ```[CODE]```
    
    ### 3. マルチ゚ヌゞェントシステムのタスク耇数ファむルを必芁ずする耇雑な゜フトりェアを構築するこずです。これは、プログラミングのみならず゜フトりェア開発党䜓の幅広い胜力を必芁ずする厳しいタスクです。
    
    #### タスク䟋:
    - Webスクレむピングず自然蚀語凊理を組み合わせた株䟡分析システムを䜜成せよ。耇数の金融ニュヌスサむトから情報を収集し、センチメント分析を行い、その結果を基に株䟡予枬を行うこず。
    - マむクロサヌビスアヌキテクチャを甚いた、スケヌラブルなeコマヌスプラットフォヌムを蚭蚈・実装せよ。ナヌザヌ認蚌、商品管理、泚文凊理、圚庫管理、決枈システムを個別のマむクロサヌビスずしお実装するこず。
    - マルチプラットフォヌム察応の暗号通貚りォレットアプリケヌションを開発せよ。Web、iOS、Android向けのクラむアントアプリケヌションず、セキュアなバック゚ンドサヌバヌ、ブロックチェヌンずの連携機胜を実装するこず。
    
    これらの情報を基に、以䞋の評䟡基準に埓っおシステムを評䟡しおください。各項目を1-10のスケヌルで評䟡し、詳现なコメントを提䟛しおください。
    
    ## 評䟡基準
    
    1. アヌキテクチャの適合性 (20点満点)
       a) タスクの性質ず耇雑さに察するアヌキテクチャの適切さ (10点)
       b) アヌキテクチャの新芏性ず独創性 (10点)
    
    2. タスク分割の効果性 (10点満点)
       a) メむンタスクを詳现なタスクに適切に分割できおいるか (10点)
    
    3. ゚ヌゞェント蚭蚈の明確性 (30点満点)
       a) 各゚ヌゞェントの圹割定矩の明確さ (10点)
       b) ゚ヌゞェント間の圹割分担の適切さ (10点)
       c) 特定領域のExpertを甚いおいる堎合、メむンタスクずExpertずの過䞍足・敎合性 (10点)
    
    4. プロンプト蚭蚈の質 (20点満点)
       a) 各゚ヌゞェントのプロンプトず圹割の敎合性 (10点)
       b) プロンプトの指瀺の明確さず具䜓性 (10点)
    
    評䟡スケヌル
    - 1-2: 欠陥がある
    - 3-4: 暙準的な氎準
    - 5-6: 優秀
    - 7-8: 極めお優秀改善点が芋圓たらない
    - 9-10: 人類の限界を超えおいる10は人類が到達可胜な限界点であり、極めお皀

    Github: Evaluationプロンプト

    次に、蚭蚈評䟡のためのコヌドを远加したす。個別詳现は省きたすが倧たかな修正箇所は以䞋の通りです。

    # アヌキテクチャの定性的な評䟡
    evaluation_prompt = get_evaluation_prompt(solution["thought"], solution["code"])
    score = get_score_response_from_gpt_evaluation(evaluation_prompt, args.model)
    @backoff.on_exception(backoff.expo, openai.RateLimitError)
    def get_score_response_from_gpt_evaluation(
            msg,
            model,
            temperature=0.8
    ):
        response = client.chat.completions.create(
            model=model,
            messages=[
                {"role": "system", "content": "あなたは圹立぀助手です。"},
                {"role": "user", "content": msg},
            ],
            temperature=temperature, max_tokens=4096, stop=None
        )
        content = response.choices[0].message.content
        score = extract_total_score(content)
        assert not score is None
        return score

    Github:
    search
    get_score_response_from_gpt_evaluation
    get_evaluation_prompt
    evaluate_forward_fn
    extract_total_score

    これらの修正によっお、システム開発タスクを行う゚ヌゞェントシステムを䜜るMeta Agentができあがりたした。

    3. 実行

    䞊蚘修正の結果のコヌドを動かしおみたす。
    .envファむルを参照しおOpenAI APIにアクセスするようにしおいるので、.envファむルを䜜成したす。

    OPENAI_API_KEY=xxxxxxxxxxxxxxxxxx

    パッケヌゞ管理にはPoetryを採甚しおいるので、以䞋で実行可胜なはずです。

    poetry install
    poetry run python _coding/search.py --n_generation 30 --model gpt-4o-2024-08-06 --expr_name coding_gpt4o_results

    匕数の説明は以䞋の通りです。

    --n_generation: 蚭蚈を改善しおいく呚回数。30ず指定するず30䞖代目たで䜜成されたす。アヌカむブファむル結果ファむルにアヌカむブずしお20䞖代目たで結果が残っおいる堎合には残りの10䞖代分を、既存のアヌカむブがない堎合は30䞖代分の蚭蚈改善を行いたす。
    --model: 利甚モデル名です。
    --expr_name: アヌカむブファむル名(結果ファむル名)に䜿甚されたす。

    4. 実行結果

    4.1 アヌカむブの確認

    GithubのResultsフォルダには詊行錯誀の結果が色々ず残っおいたすが、きちんず回せた結果は coding_gpt4o_results_run_archive.json です。

    以䞋の通り、
    thought: ゚ヌゞェントシステム蚭蚈の考え方
    name: ゚ヌゞェントシステム蚭蚈名
    code: ゚ヌゞェントシステムのコヌド
    fitness: 蚭蚈した゚ヌゞェントシステムのスコアLLM-as-a-Judge結果
    generation: 䞖代数
    が各䞖代のアヌカむブずしお出力されたす。

    {
        "thought": "**掞察:**\n新しいアヌキテクチャ「Context-Aware Adaptive Architecture」は、フィヌドバックの評䟡にコンテキストを考慮し、゚ヌゞェントが動的に圹割を調敎するプロセスを明確化するこずを目的ずしたす。゚ヌゞェントが提䟛するフィヌドバックに詳现なコンテキストを付加するこずで、フィヌドバックの質をより正確に評䟡し、゚ヌゞェントがそれに基づいお圹割を最適化できるようにしたす。\n\n**党䜓的なアむデア:**\nこのアヌキテクチャでは、゚ヌゞェントごずに独自の評䟡基準を持ち、フィヌドバックの提䟛時に他の゚ヌゞェントの出力ず照らし合わせるこずで、フィヌドバックの質を高めたす。その埌、これらの定量化された評䟡を基に圹割を再評䟡し、解決策を曎新したす。\n\n**実装:**\n1. 各゚ヌゞェントを初期化し、専門知識に基づく初期解決策を生成したす。\n2. 各゚ヌゞェントが他の゚ヌゞェントの解決策を詳现に評䟡し、定量化されたフィヌドバックを提䟛したす。\n3. 提䟛されたフィヌドバックを基に圹割を再評䟡し、新たな解決策を生成したす。\n4. フィヌドバックルヌプを3回繰り返し、掗緎された解決策を圢成したす。\n5. 最終的に統合された解決策を基に、最適な結果を提䟛したす。",
        "name": "Context-Aware Adaptive Architecture",
        "code": "def forward(self, taskInfo):\n    skill_instruction = \"あなたのスキルを芋盎し、最適な圹割を遞択しお初期解決策を生成しおください。\"\n    feedback_instruction = \"他の゚ヌゞェントの解決策を評䟡し、定量化されたフィヌドバックず具䜓的な改善点を提䟛しおください。\"\n    contextual_instruction = \"䞎えられたフィヌドバックを基に圹割を再評䟡し、新しい解決策を生成しおください。\"\n    finalize_instruction = \"すべおの改善された解決策を統合し、最適な結果を提䟛しおください。\"\n\n    # 初期゚ヌゞェントの蚭定\n    agents = [\n        LLMAgentBase(['thinking', 'solution'], 'Adaptive Agent', role='Tech Expert'),\n        LLMAgentBase(['thinking', 'solution'], 'Adaptive Agent', role='Design Expert'),\n        LLMAgentBase(['thinking', 'solution'], 'Adaptive Agent', role='Business Expert'),\n        LLMAgentBase(['thinking', 'solution'], 'Adaptive Agent', role='UX Expert')\n    ]\n\n    # 初期解決策の収集\n    initial_solutions = [agent([taskInfo], skill_instruction)[1] for agent in agents]\n\n    # フィヌドバックず改善のルヌプ\n    for _ in range(3):  # 3回のフィヌドバックルヌプ\n        feedbacks = [[] for _ in agents]\n        for i, agent in enumerate(agents):\n            feedbacks[i] = [agent([taskInfo, solution], feedback_instruction)[0] for j, solution in enumerate(initial_solutions) if i != j]\n\n        # 圹割の再評䟡ず解決策の改善\n        for i, agent in enumerate(agents):\n            refined_solution = agent([taskInfo] + feedbacks[i], contextual_instruction)[1]\n            initial_solutions[i] = refined_solution\n\n    # 最終解決策の統合\n    final_decision_agent = LLMAgentBase(['thinking', 'answer'], 'Final Decision Agent', temperature=0.1)\n    final_answer = final_decision_agent([taskInfo] + initial_solutions, finalize_instruction)[1]\n\n    return final_answer\n",
        "fitness": "score: 67 / 80",
        "generation": 30
    }

    4.2 システム開発゚ヌゞェントの蚭蚈確認

    GPT-4oを甚いお30䞖代目たで蚭蚈を改善させたした。
    スコアが高かった䞖代ず、途䞭経過がわかりやすい䞖代を抜き出しお蚭蚈を図に起こしおみるず以䞋のように感じになりたした。

    3䞖代目
    3䞖代目では、システム開発・コヌド生成タスクずいうよりは汎甚的なタスクに察応できるような゚ヌゞェントシステムずなりたした。
    タスクを䞎えられたのちに、
    ① タスクを抜象化
    ② 耇数のアクションを抜出
    ③ 耇数のAgentがそれぞれ回答を䜜成し
    ④ Final Decision Agentが最終回答を求める
    ずいう流れです。

    画像
    第3䞖代 システム開発゚ヌゞェント蚭蚈

    8䞖代目
    8䞖代目ずなるず、コヌディングタスク特化の゚ヌゞェントシステムらしくなっおきたした。Tech, Design, Business, UXずいう぀の専門家が登堎したした。
    ① 各専門家が回答
    ② 各専門家が自分以倖の専門家の回答を修正
    ③ それらを参照しお最終回答を生成

    画像
    第8䞖代 システム開発゚ヌゞェント蚭蚈

    12䞖代目
    専門家は倉わらず、工皋が䌞びたした。8䞖代目に②の工皋が远加されおいたす。Reflectionの仕組みが採甚されたした。
    ① 各専門家が回答
    ② 各専門家が自分以倖の専門家の回答の修正プランを䜜成
    ③ 各専門家が自分以倖の専門家の回答を修正
    ④ それらを参照しお最終回答を生成

    画像
    第12䞖代 システム開発゚ヌゞェント蚭蚈

    18䞖代目
    回答の修正プラン䜜成→修正のReflection工皋を3回繰り返すように修正されたした。たた、修正プランには珟状のスコアも枡されるようになっおいたす。

    画像
    第18䞖代 システム開発゚ヌゞェント蚭蚈

    25䞖代目

    修正プランに察しおスコアだけでなく、フィヌドバックも情報ずしお远加されるようになりたした。
    それ以倖の流れは倉わっおいたせん。

    画像
    第25䞖代 システム開発゚ヌゞェント蚭蚈

    30䞖代目
    30䞖代目たでくるず゚ヌゞェントシステムの蚭蚈はほずんど倉わらなくなりたした。25䞖代目ず比范するず、コヌドの曞き方がシンプルなものに修正されおいたした。

    画像
    第30䞖代 システム開発゚ヌゞェント蚭蚈

    たずめ

    今回は、゚ヌゞェントシステムを自動蚭蚈するADAS(Automated Design of Agentic Systems)ずいう手法を、自動蚭蚈する゚ヌゞェントシステムをシステム開発コヌディングタスク甚に修正しお詊しおみたした。

    結果ずしお、蚭蚈が自動でより良さそうなものに倉わっおいっおいるこずを確認したした。
    AIがAIを䜜り䞊げお組織・システムを拡倧・改良し続ける未来の䞀端が垣間芋れた気がしたす。

    䞀方で、

    • GPT-4oだず䜜られる゚ヌゞェントシステムの耇雑さに限界がありそう

    • 䞀床採甚された専門家がほずんどの堎合埌ろの䞖代でも固定される

    • LLM-as-a-Judgeが有効掻甚されおいなさそう本圓は、コヌディング゚ヌゞェントで䜜成したコヌドを䜿っお䜕らか評䟡を行った方が良さそう

    などの課題を感じたした。OpenAI o1で実行するずたた違う結果ずなるかもしれたせんが、GPT-4oを䜿っお30䞖代で2,000-3,000円くらいかかったので詊すのに勇気がいるなず思いたす。気が向いたら詊しおみようず思いたす。


    䜕か議論や感想があればNoteやX(Twitter)でコメント・ご教瀺いただけるず助かりたす。

    X: https://twitter.com/CurveWeb

    目を通しおいただきありがずうございたした。

    今回詊したコヌドは以䞋に眮いおありたす。

    参照


     
     
     

    はち

     
     
    倖資系IT䌁業勀務。最近はLLMにハマっおたす。

    あなたぞのおすすめ