テック・ロジック / 知能フロンティア

自己構築エージェント:LangChain4jに基づく実験

LangChain4jを通じて、コードアシスタントは実際のバグを修正できるマルチエージェントシステムを設計することに成功しました。実験では、ワークフローパターンがスーパーバイザーパターンより3倍速いことが判明し、モデル選択の重要性が強調されました。

TSO要約

  • LangChain4jを通じて、コードアシスタントは実際のバグを修正できるマルチエージェントシステムを設計することに成功しました。実験では、ワークフローパターンがスーパーバイザーパターンより3倍速いことが判明し、モデル選択の重要性が強調されました。
  • テック・ロジック · 知能フロンティア
  • 2026年7月27日
TSO注記各記事は独立した報道に照らして検証されています。読者が根拠を直接確認できるよう、分析とともに元の情報源へのリンクを掲載しています。

情報源の透明性

元の報道情報源

  1. 自我构建的智能体:基于LangChain4j的实验www.infoq.com

重要なポイント

  • 研究者は、LLMコードアシスタントにLangChain4jのドキュメントとAPIを利用させ、マルチエージェントコーディングシステムを自ら設計・実装させた。

  • この自己構築コーディングエージェントは、実際のバグを修正し、テストに合格し、LangChain4jを通じて自身の実行フローを公開した。

  • 2つのエージェントパターンを比較したところ、より厳格なワークフローパターンは、LLMが引き起こす調整オーバーヘッドを排除することで、スーパーバイザーパターンよりも3倍高速であることが判明した。

  • 新しく導入されたMonitoredAgentインターフェースにより、エージェントの呼び出しレポートやシステムトポロジを明確に取得できる。

  • 実験では、同じエージェント設計でも、旧型で低価格のモデルではツール呼び出しループに陥って失敗したが、新型モデルではタスクを正常に完了した。

実験概要

研究者はメタ実験を実施した。LangChain4jのドキュメントをコードアシスタントに渡し、そのドキュメントに基づいて「自身のバージョン」を構築するよう要求した。具体的には、人間のエンジニアのようにコードを書き、テストし、デバッグできるマルチエージェントシステムを設計することを期待した。

LLMがドキュメントに基づいて自身のバージョンを構築できたことは、LangChain4jのAPIが十分に明確で使いやすいこと、またフレームワークが十分なオーケストレーション能力を提供しており、生成されたシステムが実際のデバッグタスクをエンドツーエンドで実行できることを示している。

このプロジェクトは、LangChain4jの新しいモニタリングツールのテストにも貢献した。AIに別のAIを構築させる場合、内部で何が起こっているかを明確に把握する必要がある。本稿では、実験のプロセスと結果を詳述する。関連プロジェクトのコードはこのリポジトリで入手できる。

「雰囲気コーディング」によるエージェントシステム

コードアシスタントに最初のコーディングエージェントを構築させるため、研究者は以下のプロンプトを作成した:

LangChain4jエージェントフレームワークのドキュメントとソースコードを学習し、それに基づいてあなた自身のクローンとなるコーディングエージェントを設計せよ。

数分の思考の後、アシスタントはLangChain4jのスーパーバイザーパターンを使用することを決定し、初期アーキテクチャを提案した:

public interface SupervisorCoderSystem {
    @SupervisorAgent(description = """
        一个多智能体编码助手,可以探索代码库、规划实现、编写/编辑代码、运行构建/测试。
        它编排专门的子智能体来完成编码请求。
        """, subAgents = {
            ExplorerAgent.class,
            PlannerAgent.class,
            ImplementerAgent.class,
            ExecutorAgent.class
        })
    @Override
    String code(@K(UserRequest.class) String request,
                @K(WorkingDirectory.class) String workingDirectory);

    @SupervisorRequest
    static String request(@K(UserRequest.class) String userRequest,
                          @K(WorkingDirectory.class) String workingDirectory) {
        return "将'" + workingDirectory + "'作为工作目录,完成以下用户请求:" + userRequest;
    }
}

アシスタントはまた、4つのサブエージェントと、それらのシステムメッセージおよびユーザーメッセージを設計・開発した。探索エージェントは既存のコードを探索し、計画エージェントは行動計画を策定し、実装エージェントは計画に従ってコードを作成し、実行エージェントはコードをコンパイルして実行する。各サブエージェントには、ファイルシステムブラウザ、コードエディタ、コードランナーなどの適切なツールが装備された。

最初のイテレーションの結果は印象的だった。現実の「プロフェッショナル」なコードアシスタントも通常、同様のパターン(探索、計画、実装、実行の4ステップをスーパーバイザー方式でオーケストレーションする)に従っており、これは実験で生成された実装と一致していた。

コードアシスタントがこのようなシステムを設計・実装できたことは、自身の内部動作にある程度の理解を持ち、その理解を具体的なエージェントシステム設計に変換できることを示している。

コーディングエージェントを実稼働させる

CONTEXT_AFTERに続く部分は翻訳しないでください。設計したエージェントエンコーダーをテストするため、研究者はそれにバグのあるコードをいくつか作成させ、新しく作ったシステムで修正させました。アシスタントはCalculatorクラスを生成し、4つの微妙なバグを含むメソッドを持っています:

public class Calculator {
    public int sum(List<Integer> numbers) {
        int total = 0;
        for (int i = 0; i <= numbers.size(); i++) { // Bug: 应该是 i < numbers.size()
            total += numbers.get(i);
        }
        return total;
    }

    public double average(List<Integer> numbers) {
        if (numbers.isEmpty()) return 0;
        return sum(numbers) / numbers.size(); // Bug: 整数除法,应转为double
    }

    public int max(List<Integer> numbers) {
        if (numbers.isEmpty()) throw new IllegalArgumentException("列表不能为空");
        int max = 0; // Bug: 如果所有数都是负数,会返回0
        for (int n : numbers) {
            if (n > max) max = n;
        }
        return max;
    }

    public long factorial(int n) {
        if (n < 0) throw new IllegalArgumentException("n必须非负");
        long result = 1;
        for (int i = 1; i < n; i++) { // Bug: 应包含n,即 i <= n
            result *= i;
        }
        return result;
    }
}

次にテストを生成し、Calculatorを含むフォルダを一時ディレクトリにクローンして、LangChain4jエージェントエンコーダーを実行しました:

@Test
void workflow_should_fix_buggy_calculator() throws Exception {
    var coder = CoderAgenticSystem.supervisorCoder(coderModel());
    Path source = Path.of("src/test/resources/buggy-project");
    Path workDir = Path.of("/tmp/buggy-calculator");
    String result = coder.code(
        "测试当前失败,因为Calculator.java存在Bug。请修复它。",
        workDir.toAbsolutePath().toString());
    assertThat(result).isNotBlank();
    System.out.println("结果: " + result);
}

コードを実行する際、OpenAIのgpt-4oモデルを使用しました。これはLangChain4jのデフォルトモデルであり、ツール呼び出しに対応しているためです。しかし結果は期待通りではなく、数分後にエラーが発生しました:

dev.langchain4j.agentic.agent.AgentInvocationException: Failed to invoke agent method: public abstract...
テック・ロジック