導入:テスト仕様書作成という「苦行」から解放されよう
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にインポートする機能を追加してみよう。まずは今日、最初のエージェントチームを立ち上げることから始めてほしい。


コメント