Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AgentCoder: Multi-Agent-Based Code Generation with Iterative Testing and Optimisation #47

Open
shnakazawa opened this issue May 20, 2024 · 0 comments

Comments

@shnakazawa
Copy link
Contributor

Huang, Dong, et al. “AgentCoder: Multi-Agent-Based Code Generation with Iterative Testing and Optimisation.” arXiv [cs.CL], 20 Dec. 2023, http://arxiv.org/abs/2312.13010. arXiv.

  • プログラマエージェント、テスト設計エージェント、およびテスト実行エージェントの3つの特化したエージェントで構成されるマルチエージェントフレームワーク "AgentCoder" の提案
  • エージェントがコード生成、テストケース生成、実行、およびフィードバックを協調して行うことで、コードを自動で生成・修正する仕組みを構築
  • GPT-3.5を用いた評価では8割以上の精度で適切に動くコードが生成された。

全てをLLMでやろうとせず、単純なスクリプトに任せられる部分はスクリプト化してしまっている点もポイントか。

Abstract

The advancement of natural language processing (NLP) has been significantly boosted by the development of transformer-based large language models (LLMs). These models have revolutionized NLP tasks, particularly in code generation, aiding developers in creating software with enhanced efficiency. Despite their advancements, challenges in balancing code snippet generation with effective test case generation and execution persist. To address these issues, this paper introduces Multi-Agent Assistant Code Generation (AgentCoder), a novel solution comprising a multi-agent framework with specialized agents: the programmer agent, the test designer agent, and the test executor agent. During the coding procedure, the programmer agent will focus on the code generation and refinement based on the test executor agent's feedback. The test designer agent will generate test cases for the generated code, and the test executor agent will run the code with the test cases and write the feedback to the programmer. This collaborative system ensures robust code generation, surpassing the limitations of single-agent models and traditional methodologies. Our extensive experiments on 9 code generation models and 12 enhancement approaches showcase AgentCoder's superior performance over existing code generation models and prompt engineering techniques across various benchmarks. For example, AgentCoder achieves 77.4% and 89.1% pass@1 in HumanEval-ET and MBPP-ET with GPT-3.5, while SOTA baselines obtain only 69.5% and 63.0%.

(DeepL翻訳)

自然言語処理(NLP)の進歩は、変換器ベースの大規模言語モデル(LLM)の開発によって大きく後押しされてきた。これらのモデルは、特にコード生成における自然言語処理タスクに革命をもたらし、開発者が効率的にソフトウェアを作成できるようにしました。その進歩にもかかわらず、コード・スニペット生成と効果的なテスト・ケース生成および実行のバランスをとる上での課題は依然として残っている。これらの問題に対処するために、本論文では、プログラマエージェント、テスト設計者エージェント、およびテスト実行者エージェントという特化したエージェントを持つマルチエージェントフレームワークからなる新しいソリューションである、マルチエージェントアシスタントコード生成(AgentCoder)を紹介します。コーディング手順の間、プログラマエージェントは、テスト実行者エージェントのフィードバックに基づいて、コードの生成と改良に集中します。テスト設計エージェントは、生成されたコードのテストケースを生成し、テスト実行エージェントは、テストケースを使用してコードを実行し、プログラマにフィードバックを書き込みます。この協調システムは、単一エージェントモデルや伝統的な方法論の限界を超え、ロバストなコード生成を保証する。9つのコード生成モデルと12の機能強化アプローチに関する広範な実験により、AgentCoderが既存のコード生成モデルやプロンプトエンジニアリング手法よりも優れた性能を持つことが、さまざまなベンチマークで実証されています。例えば、GPT-3.5を使用したHumanEval-ETとMBPP-ETにおいて、AgentCoderは77.4%と89.1%のpass@1を達成しました。

コード

https://github.com/huangd1999/AgentCoder

解決した課題/先行研究との比較

  • LLMの登場により自然言語処理タスクの大幅な性能向上が達成され、その流れの一つとして、LLMにコードを書かせるという挑戦が進められている。
  • 一つの効果的なアプローチとして、self-refinementが報告されていた。
    • Zhang et al., 2023 では、人が用意したテストケースを生成コードがクリアできなかった場合、Self-Editプロンプトがコードを書き直す仕組みを提案。
    • Huang et al., 2023はLLMにテストケースも書かせる仕組み CodeCoT を提案。
  • 一方で、課題として以下が挙げられている。
    • 人がテストケースを生成する場合は専門知識が必要となる。
    • LLMに生成させる場合は、トークン数・計算量の制限から、コードが複雑になるとテストが単純になってしまうトレードオフがあった。
    • また、LLMは直前に生成したコード(会話の文脈)からバイアスを受けるため、テストの客観性や多様性が欠如していた。
  • 本論文ではコード生成とテストケース生成を独立したエージェントに担当させることで、一つのエージェントが両方のタスクを処理することによる弊害を克服。これにより、テストケースの品質と客観性が向上し、コード生成の精度も改善された。

技術・手法のポイント

Image from Gyazo

  • 3つのエージェント、プログラマエージェント、テスト設計エージェント、およびテスト実行エージェントを設計。Fig.1のように接続。
  • プログラマエージェントは Chain-of-Thought アプローチで典型的なプログラミングプロセスをシミュレートし、コードを生成する。
    • 課題理解→手法選択→擬似コードの作成→コード作成の4ステップ
  • テスト設計エージェントはプロンプトエンジニアリングで以下の3つを満たすテストを設計できるLLMエージェントとして構築。
    1. 基本的なテストケース
    2. エッジケース
    3. 入力のスケールが巨大なケース
  • テスト実行エージェントはLLMではなく単なるPythonスクリプト。前述の2エージェントの生成物を実行。
    • 全テストケースをクリア→完成と判断
    • クリアできないテストがあった→プログラマエージェントにテストケースとエラーメッセージをフィードバック
  • プログラマエージェントはテスト実行エージェントからのフィードバックをうけとり、再度コードを生成する。

評価指標

  • pass@1 をコード生成の評価指標として使用。
    • 「モデルが生成した最初のコードがテストケースを通過する割合」と定義されるが、ここでいうテストケースは「データセットごとに設定されたテストケース」であり、「テスト設計エージェントが生成したテスト」とは別。「テスト設計エージェントが生成したテストをすべてクリアしたコードが、データセットに設定されたテストケースを1発でクリアできる割合」がpass@1のスコアになる。
    • AgentCoderは最大5回のフィードバックループを回している (Section 4.4)。
  • 4つのデータセット (HumanEval, HumanEval-ET, MBPP, MBPP-ET) で先行研究と提案手法を評価。GPT-3.5やGPT-4を用いたときは8割を超える精度が出ている (Table 2)。

Image from Gyazo

  • 複数エージェントに分ける有用性も定量評価 (Tables 6-8)。

残された課題・議論・感想

  • 実行時間や必要リソースは単一エージェントのときよりも大きくなる点に注意が必要。
  • 今回評価に用いられたHumanEvalとMBPPは課題ごとに2, 3のテストケースしか用意されていない。実運用上で想定されうるテストケースを網羅できているわけではないので、「完全に動くものができた」とは言い切れない。
    • これはAgentCoderに限らず、他のコード生成フレームワークでも同じ話。
  • 本論文ではフィードバックループは最大5回まで検証されている。何回くらいループを回すと精度向上がプラトーに達するのかは気になるところ。
    • おそらくプラトーに達するところで(人の手でLLMにコード生成を頼むときに頻繁に起こる)「いつまでも同じエラーにハマり続ける現象」に陥っているのではと想像される。「◯回目以降のループではフィードバックのスタイルを変える」ような仕組みも作ってやれば、さらに精度向上が見込めないだろうか。

重要な引用

  • コード生成に関する基本的な技術とアプローチ
    • Zhangyin Feng, Daya Guo, Duyu Tang, Nan Duan, Xiaocheng Feng, Ming Gong, Linjun Shou, Bing Qin, Ting Liu, Daxin Jiang, and Ming Zhou. Code- BERT: A pre-trained model for programming and natural languages. In Findings of the Association for Computa- tional Linguistics: EMNLP 2020, pages 1536–1547, On- line, November 2020. Association for Computational Lin- guistics.
    • Yue Wang, Weishi Wang, Shafiq Joty, and Steven C.H. Hoi. Codet5: Identifier-aware unified pre-trained encoder-decoder models for code understand- ing and generation. In EMNLP, 2021.
  • Self-refinementアプローチの先行研究
    • Kechi Zhang, Zhuo Li, Jia Li, Ge Li, and Zhi Jin. Self-edit: Fault-aware code editor for code generation. ArXiv, abs/2305.04087, 2023.
    • Dong Huang, Qi Bu, and Heming Cui. Codecot and beyond: Learning to program and test like a developer. ArXiv, abs/2308.08784, 2023.

関連論文

  • 複数のAgentにコミュニケーションをさせるフレームワーク CAMEL
  • Agentごとに役割を分けてアプリを構築するフレームワーク MetaGPT
    • Hong, Sirui, et al. “MetaGPT: Meta Programming for A Multi-Agent Collaborative Framework.” arXiv [cs.AI], 1 Aug. 2023, http://arxiv.org/abs/2308.00352. arXiv.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant