【完全自動化】AutoGenでマルチエージェントを構築し、Salesforceテストケースを爆速生成する方法

AutoGenマルチエージェント構築手順:RAGでテスト生成自動化 AI開発(自作AI)
【完全自動化】AutoGenでマルチエージェントを構築し、Salesforceテストケースを爆速生成する方法

導入:テスト仕様書作成という「苦行」から解放されよう

AIハック術師のハヤトだ。

開発現場において、最も退屈で、かつ精神力を削られる作業は何か。コーディングではない。「テスト仕様書の作成」と「テストケースの列挙」だ。

特にSalesforceのような複雑なプラットフォーム開発では、要件定義書を読み解き、網羅的なテストケースを書き出すだけで数日を費やすこともザラにある。もし、この作業を「複数のAIエージェントたち」が勝手に会議を行い、勝手に成果物を納品してくれるとしたらどうだろうか?

今回は、Microsoftが開発した最強のフレームワーク「AutoGen」を使用し、RAG(検索拡張生成)を搭載したマルチエージェントシステムを構築する。具体的には、「Salesforceの仕様書を読み込み、テストケースを作成し、レビューまで完了させてファイルに保存する」一連の流れを完全自動化する。

単なるAIチャットではない。彼らは自律的に動き、連携する「君の部下」だ。この記事を読み終える頃には、君の手元には「最強のテスト自動化チーム」が結成されているはずだ。

本論:AutoGen × RAG で実現する「自律型テスト生成工場」

なぜ「ChatGPT」単体ではダメなのか?

多くの人はChatGPTに「このコードのテスト書いて」と頼むだろう。しかし、業務レベルのテスト作成には以下の壁がある。

  • コンテキスト不足: 長大な仕様書(PDFやMarkdown)をすべてプロンプトに入れるのは非効率。
  • 幻覚(ハルシネーション): 存在しないApexメソッドや項目名を捏造する。
  • 単一視点: エッジケースやセキュリティ観点のテストが漏れやすい。

これらを解決するのが「AutoGenによるマルチエージェント」「RAG」の組み合わせだ。

システムの全体像(アーキテクチャ)

今回構築するシステムは、以下の3つのエージェントで構成される。

エージェント名 役割 (Role) 主な機能
Boss (Admin) 管理者・ユーザー 人間の代理。要件を投げ、最終確認を行う。RAG機能で資料を検索する。
Tester (Assistant) テストエンジニア 検索された仕様に基づき、具体的なテストケース(正常系・異常系)を作成する。
Reviewer (Assistant) QAマネージャー 作成されたテストケースをレビューし、漏れや矛盾を指摘して修正させる。

独自解説:AutoGenにおける「RAG」の威力

AutoGenの強力な点は、RetrieveUserProxyAgentというクラスを使うことで、エージェント自体に「資料を検索する能力」を簡単に付与できることだ。

通常、RAGを実装するにはLangChainなどでベクトルデータベース(ChromaDBなど)を構築し、Embeddingを行う複雑なコードが必要だ。しかし、AutoGenならわずか数行の設定で、指定したフォルダ内のドキュメントを読み込み、エージェントがそれを参照して回答するようになる。

これにより、エージェントは「一般論」ではなく、「君のプロジェクトの仕様書」に基づいた正確なテストケースを生成できるのだ。

実践ガイド:やってみよう

ここからは、実際にPythonを使ってこのシステムを構築する。コピペで動作するように作ってあるが、APIキーの設定などは各自の環境に合わせてくれ。

ステップ1:前提環境の準備

まずは必要なライブラリをインストールする。ベクトルデータベースのchromadbも同時にインストールされる。

pip install pyautogen[retrievechat] chromadb pypdf

※Python 3.9以上推奨。Dockerが使える環境だとコード実行がより安全だが、今回はローカル実行(またはGoogle Colab)を想定する。

ステップ2:設定とインポート

以下のコードをapp.pyとして保存するか、Notebookに貼り付ける。APIキーは環境変数か直接指定で設定しよう。

import os
import autogen
from autogen.agentchat.contrib.retrieve_user_proxy_agent import RetrieveUserProxyAgent

# OpenAI APIキーの設定
# 環境変数 'OPENAI_API_KEY' が設定されていない場合は直接入力
config_list = [
    {
        'model': 'gpt-4-turbo',
        'api_key': os.getenv("OPENAI_API_KEY", "YOUR_API_KEY_HERE")
    }
]

llm_config = {
    "timeout": 600,
    "cache_seed": 42,
    "config_list": config_list,
    "temperature": 0,
}

ステップ3:エージェントの定義

ここが核心部だ。RAG機能を持つRetrieveUserProxyAgentと、実作業を行うAssistantAgentを定義する。

# 1. RAG機能付き管理者エージェント (Boss)
# docs_path には読み込ませたい仕様書(PDF, txt, md)があるフォルダ、またはURLを指定
boss_aid = RetrieveUserProxyAgent(
    name="Boss_Assistant",
    is_termination_msg=lambda x: x.get("content", "") and x.get("content", "").rstrip().endswith("TERMINATE"),
    human_input_mode="NEVER",
    max_consecutive_auto_reply=3,
    retrieve_config={
        "task": "qa",
        "docs_path": ["https://raw.githubusercontent.com/microsoft/autogen/main/README.md"], # テスト用にWeb上のファイル指定。実際はローカルパスでOK
        "chunk_token_size": 1000,
        "model": config_list[0]["model"],
        "client": autogen.ChatCompletion.create, # 内部的なクライアント設定
        "embedding_model": "all-mpnet-base-v2", # デフォルトの埋め込みモデル
    },
    code_execution_config=False,  # コード実行はしない
)

# 2. テスト作成エージェント (Tester)
tester = autogen.AssistantAgent(
    name="Tester",
    system_message="""
    あなたは熟練のSalesforce QAエンジニアです。
    与えられた仕様情報に基づいて、包括的なテストケースを作成してください。
    以下の項目を含めること:
    - テストケースID
    - 概要
    - 前提条件
    - 手順
    - 期待される結果
    - 異常系・境界値テストも含めること。
    出力はMarkdownの表形式で行ってください。
    """,
    llm_config=llm_config,
)

# 3. レビュー担当エージェント (Reviewer)
reviewer = autogen.AssistantAgent(
    name="Reviewer",
    system_message="""
    あなたは厳しいQAマネージャーです。
    Testerが作成したテストケースをレビューしてください。
    - 漏れている観点はないか?
    - Salesforceの制限(ガバナ制限など)を考慮しているか?
    - 曖昧な表現はないか?
    問題があれば指摘し、修正を命じてください。
    問題がなければ、最後に承認として 'APPROVED' とだけ出力してください。
    """,
    llm_config=llm_config,
)

ステップ4:グループチャットの開始

エージェントたちを同じ部屋(GroupChat)に入れ、管理者が会話を開始する。

# グループチャットの定義
groupchat = autogen.GroupChat(
    agents=[boss_aid, tester, reviewer],
    messages=[],
    max_round=12
)

manager = autogen.GroupChatManager(groupchat=groupchat, llm_config=llm_config)

# 会話の開始
# ここで具体的な指示を出す
problem = """
提供されたドキュメントの内容に基づいて、主要機能の結合テストケースを作成してください。
レビュー完了後、最終的なテストケース一覧を出力してください。
"""

# RAGエージェントから会話をスタート
boss_aid.initiate_chat(
    manager,
    problem=problem,
)

よくあるエラーと対処法 (Tips)

  • `chromadb`のエラー: sqlite3のバージョンが古い場合に発生しやすい。pysqlite3-binaryをインストールし、コードの冒頭でsys.modules['sqlite3'] = __import__('pysqlite3')とするハックが必要な場合がある。
  • 無限ループ: Reviewerが永遠に承認しない場合がある。max_roundを適切に設定するか、プロンプトで「些細な指摘は避けて」と指示を追加しよう。
  • 日本語化: システムメッセージを日本語にするだけで、エージェントは日本語で会話する。ただし、精度の高いGPT-4系の使用を強く推奨する。

まとめ:AIを「使う」側から「働かせる」側へ

今回紹介したコードを実行すれば、画面上でエージェントたちが勝手に議論し、テストケースが組み上がっていく様子が見られるはずだ。これは単なる効率化ではない。「思考の自動化」だ。

Salesforce開発に限らず、この「RAG × マルチエージェント」の構成は、要件定義、マニュアル作成、コードレビューなど、あらゆるデスクワークに応用できる。

次は、この出力をCSVファイルとして保存し、そのままJiraやSalesforceにインポートする機能を追加してみよう。まずは今日、最初のエージェントチームを立ち上げることから始めてほしい。

コメント

タイトルとURLをコピーしました