mablは、テストの自動化をよりスマートかつ効率的に行うために、生成AIの大型言語モデル(LLM)をバックグラウンドでますます活用するようになっていますが、エンドツーエンドのテストの一部としてLLMと直接統合したい場合もあります。独自のモデルをテストしたい場合、特定の公開モデルを呼び出してデータを生成し、テスト内のデータを分析したり、自動化されたベンチマークを実行したりする場合でも、mablは最小限の設定でGoogle Gemini、OpenAI ChatGPT、Anthropic Claudeなどのサービスとの統合を簡単に行うことができます。本記事では、これらのプロバイダーと直接統合する3つの例を紹介します。単純化のため、テストとモデルプロバイダーをそれぞれ1種類ずつ使用していますが、モデル、プロンプトの種類、ユースケースは入れ替えて使用することもできます。

OpenAI ChatGPTによるブラウザベースの画像検証

このシナリオでは、画像生成サービスがあり、その画像が入力に適切であることを検証するプロセスを自動化したいとします。これを実現するために、フロントエンドアプリ用の簡単なブラウザテストを作成し、検証のために入力と出力をChatGPTに渡すAPIステップを追加します。

A screenshot of the steps added to the mabl trainer to accomplish the task for the image prompt.

テスト手順を見ると、アプリにログインした後、入力用の変数(image_prompt)を設定し、その変数の値を画像生成フィールドに入力していることが分かります。ここで変数を使用することで、将来的に値を変更したり、データテーブルを使用して多くのシナリオをテストしたり、別のAPIの呼び出しに基づいて設定したりすることが容易になります(詳細は下記をご参照ください)。

生成された画像のURLも、変数(image_url)として取得しています。ここでは、ChatGPTを使用するのが便利です。GeminiとClaudeはどちらも、APIの呼び出しの一部としてBase64エンコードされた画像を送信する必要がありますが、ChatGPTは画像のURLを受け入れるからです。

 

最後に、image_promptとimage_urlの両方をOpenAI APIに渡します。APIは、プロンプトと画像の評価に基づいて、テストに合格したか不合格かを判断します。そのAPIの呼び出しを見てみましょう。

POST call to an APIご覧の通り、これは https://api.openai.com/v1/chat/completions API への POST コールです。この API にアクセスするには、OpenAI プラットフォームのアカウントを設定する必要があります。また、Content-Type ヘッダーとして application/json を指定する必要があります。OpenAI API キーを Bearer トークンとして使用できます。

以下が私のリクエスト本文です。リクエストの構造については、OpenAIがAPIリファレンスドキュメントで詳細を説明しているので、ここでは詳しく説明しませんが、プロンプトの内容についてはご説明します。テキストと画像(URL)の両方を渡すことで、GPT-4-turboのマルチモーダル機能を活用していることに注目してください。テキストはプロンプト()を提供し、モデルに画像(2番目のコンテンツブロックで提供)が関連しているかどうかを評価するように指示します。

carbon (1)最後に、テストの合格または不合格を決定するアサーションが必要です。このケースでは、レスポンスに「TRUE」が含まれている場合にテストに合格するように、APIステップでシンプルなアサーションを使用していますが、APIステップ内で、またはAPIステップで定義された変数に含まれるデータに基づいて、その後のアサーションステップで、より高度なロジックを含めることも可能です。

 Screenshot of an assertion to determine if the test response contains "TRUE".

これらすべてをまとめると、まず「黒猫が川を飛び越える」というプロンプトと、画像生成に使用しているAdobe Expressのスクリーンショットを送信します。スクリーンショットと応答は、こちらでご覧いただけます:

Screenshot of image of a black cat in mid-jump over water

 

「TRUE画像は、川または小川と思われる水域を飛び越える黒猫の姿を映し出しています。これは、黒猫が川を飛び越えるという説明と完全に一致しており、こうした特定のシナリオを探している人にとって、非常に適切な画像です。」

 

以上で完了です!これで、ブラウザテストにLLM APIコールを組み込むための便利なモデルができました。少し異なる例も見てみましょう。

Google Gemini を使用したモバイルテスト用データの生成

最後の例では、上記のインプットに則した画像がウェブアプリによって生成されたことを検証するためにLLMを使用しましたが、人々が何をインプットとして使用するかは予測できません。もし、インプットのプロンプトを生成してくれるAIのようなものがあればいいのですが…いや、これは別種の大規模言語モデル(LLM)の素晴らしいユースケースですね!

この場合、mablのネイティブモバイルテスト機能を使用し、生成AI APIとやりとりするために、再びAPIリクエスト(APIステップ)機能を活用します。

Screenshot of mabl's mobile interface used for creating new assertions.

テストの構造は、上記のブラウザの例と似ていますが、LLMを使用して値を生成します。まず、そのプロンプトを「Please give me a prompt that showcases the image generation power of large language models. Provide the prompt only, with no explanation(大規模言語モデルの画像生成力を示すプロンプトを教えてください。プロンプトのみを提供し、説明は不要です。)」のような値を持つ変数として宣言します。そして、それをGeminiへのAPI呼び出しの本文として使用します。応答を記録し、それを画像生成サービスのプロンプトとして使用します。最後に、上記のChatGPTへの元の呼び出しを使用して、生成されたプロンプトに関連する画像生成が行われたことを確認します。

新しい機能を見てみましょう:Geminiを使用して画像プロンプトを生成するAPI呼び出しです。

呼び出しは簡単です。詳細のほとんどはURLに記載されています。まず、私がモデルのGoogle AI Studio展開(generativelanguage.googleapis.com)を使用していることに注目してください。これは、Vertex AIで vanilla APIキーを使用する方法が分からなかったためです。また、テキストのみの処理を求めているため、モデルとしてgemini-proを使用していることにも注目してください。画像の分析も同時に依頼する場合は、マルチモーダルな gemini-pro-vision を使用したいところです。最後に、上記のリンクから Google AI スタジオ用の API キーを提供します。

Screenshot of mabl Trainer with a POST call.それ以外は、ヘッダー(Content-Type | application/json)の後に、検証プロンプトとともに送信する非常にシンプルなボディがあります。また、テスト実行ごとに実際のばらつきが得られるように、temperature を0.8に設定しました。最後に、応答が有効であることを示すアサーションがあります。

Geminiは、初回起動時に次のようなプロンプトを表示しました。「虹色の渦巻きと幽玄な形が渦巻く広大な渦巻きを想像してみてください。その中心では、抽象的なパターンの万華鏡が踊り、変容し、言葉では表現できないような視覚のシンフォニーを奏でています。」

そして、Adobeの生成AIが返した答えがこれです。かなり的を射ているのではないでしょうか。

A swirling vortex of iridescent colors and ethereal forms. In its center, a kaleidoscope of abstract patterns dances and transforms.「比較的気温が高いことの印象を強調し、Geminiは2回目の実行で「プールに浮かぶゴールデンレトリバーの画像を生成し、その子犬の頭にはラバーダックが乗っていて、サングラスをかけていて、マルガリータを飲んでいる」という指示を出しました。」

そして、これがAdobeが生成した(概ね合っている)画像です。

A golden retriever floating in a pool with a rubber duck on its head.

今後の実行では、最初の例のフローにこれらのプロンプトと画像を渡すことができます。生成AIを使用してプロンプトを生成し、そのプロンプトに基づいて画像を生成し、生成された画像がプロンプトに関連していることを検証するエンドツーエンドのテストを行うことができます。

正直に言うと・・・実際の使用例では、画像生成のプロンプトが必要な度にGeminiに新しいリクエストを送信することはないでしょう。その代わり、手動でリクエストを送信して、CSV形式で多くの興味深いプロンプトを生成し、それをmablにアップロードしてデータ駆動型テストの一部として使用します。

APIテストによるAnthropic Claudeのモデルベンチマーク

これまでは、mablのAPIステップを使用して、ブラウザやモバイルのエンドツーエンドテストでOpenAI ChatGPTやGoogle Geminiへの呼び出しを簡単に統合する方法をご紹介しました。 入力データの生成や、AI駆動型システムにおける非決定論的挙動の検証など、さまざまな用途にお役立ていただければ幸いです。 しかし、API自体のテストやベンチマークを行ったり、API駆動型トランザクションやフローにこれらのモデルを統合したい場合はどうでしょうか? この場合、APIステップではなく、mablのより包括的なAPIテスト機能を使用したいと思うかもしれません。それでは、Anthropic Claudeをターゲットとして、その機能を見ていきましょう。 

この例では、Claudeモデルの3つ(Opus、Sonnet、Haiku)の性能と精度のトレードオフを理解することが目的です。

Screenshot of mabl Trainer where you add the three Anthropic models to the test.3つのモデルそれぞれに対して同じプロンプトを検証したいので、3つのモデルでデータテーブルを作成します。次に、このデータテーブルを使用して3つのシナリオを並行して検証するシンプルなAPIテストを作成します。Claudeモデルそれぞれに対して1つずつ(llm変数による駆動)です。

ClaudeへのAPIの呼び出し変数は以下の通りです:

api.url https://api.anthropic.com/v1/messages
llm 上記のデータテーブルによって動的に生成される変数。
imgBase64 [Base64エンコード形式の画像を含む長い文字列]
validationPrompt [画像の検証を促すプロンプト]

 

次にリクエストボディを見てみましょう。

まず、データテーブルのシナリオによって異なるモデルを指定します。

メッセージには、画像とテキストの指示のみが渡されます。

繰り返しになりますが、ここでは他のパラメータの詳細については触れません。AnthropicのAPIドキュメントで詳細をご確認いただけます。

carbon (2)ベンチマークのユースケースでは、これらのモデル間のパフォーマンスと信頼性の違いを理解したいと考えています。ここでは、mablのテスト結果のダッシュボードでサンプルを実行できます。

Screenshot of test runs in mabl's Trainer.

より詳細な分析をしたい場合は、mablのBigQuery統合またはResults APIを使用して、データを分析ツールにエクスポートします。このデータがあれば、次のような疑問を解消することが可能となります。

  • Claudeのモデルのうちどれかが私のニーズを満たすだろうか?
  • 高速で手頃な価格のHaikuは私のユースケースに十分だろうか?
  • 必要な信頼性を実現するには、より高価で(潜在的に)動作が遅いOpusが必要だろうか?
  • それとも、Sonnetが正確性、価格、パフォーマンスの完璧なバランスを提供してくれるだろうか?
  • Claudeのモデルは、私のユースケースにおいてGeminiやChatGPTと比較してどうだろうか?

ぜひお手元で試してみてください!

この説明で、mablがサポートしている機能を使用して、人気の生成AIを活用したAPIとエンドツーエンドのテストでどのように連携できるか、その理由と方法についてご理解いただけたことと思います。mablの無料トライアルにご登録することで、ご自身でもお試しいただけます(対象となる生成AIプロバイダーのアカウントも必要となります)。また、mablのリリースノートにもご注目ください。私たちは、お客様がテストにAIを統合しやすくなるよう、プラットフォームの強化を常に続けてまいります。