[MockGPT] ChatGPTのモックAPIを使ってテストする [WireMock]

2023.08.04

Introduction

生成AI(Generative AI)とは、データから文章や画像などのコンテンツを生成する
アルゴリズムやサービスです。
最近は独自アプリに生成AI(のAPI)を組み込んで利用するケースもあります。
そういった場合、当然テストをするわけで、
生成AIのAPI部分もなんとかする必要があります。

例えばChatGPTのAPI(OpenAI API)を使っている場合、
呼び出し自体に時間や料金がかかることもあります。

そういったケースでMockGPTが役立ちます。
このサービスは後述するWireMock Cloud を利用した無料ツールで、
簡単な設定をすれば、ChatGPTのAPIを使ったアプリのテストが
低コストで可能です。

WireMock?

Wiremockは、APIやサービスのモックを作成するためのツールです。
このあたりからダウンロードしてローカルにセットアップし、
開発やテスト用途でAPIのシミュレートするために使います。
リクエストとレスポンスの定義ができたり定義をファイルに保存して使えたりと
使いやすいツールです。

※以前記事を書いてました

WireMock Cloud?

Wiremock Cloudはその名の通り、WireMockのCloud版です。
ここからSignupすればすぐに使用できます。
WebUIからAPIのベース(テンプレートも多数ある)を選択し、
各種APIを定義していきます。
ログイン後、サンプル用Mock APIが定義してあるので、
すぐにアクセスすることができます。

MockGPT?

MockGPTとは、WireMock Cloudを使ったシンプルなツールです。
これを使うことでChatGPTを利用した処理に対してモックを使うことができます。
ここのパブリックバージョンのMockGPTを
そのまま使うこともできますし、WireMock Cloudでカスタマイズして使うこともできます。

MockGPTを使ってみる

では、パブリックなMockGPTを使ってみます。
まずはここにあるサンプルを動かしてみます。

import { OpenAI } from "langchain/llms/openai";
import { PromptTemplate } from "langchain/prompts";
import { LLMChain } from "langchain/chains";
import "dotenv/config";

const template = "今度設立する{name}を扱う会社について、会社名を3つ提案してください。 ";
const prompt = new PromptTemplate({
  template: template,
  inputVariables: ["name"],
});

const model     = new OpenAI({ 
    modelName: "gpt-4-0613",
    temperature: 0.9,
});

export const exec = async () => {
    //prompt template & chain
    const chain = new LLMChain({ llm: model, prompt: prompt });
    const res = await chain.call({ name: "ケーキ" });
    console.log(res.text);
};

exec();

ChatGPTに会社名の提案をしてもらいます。
実行してみると、数十秒後に↓の答えがかえってきます。

% npx ts-node main.ts

1. "Dolce Paradiso" 
- '甘い楽園'を意味するイタリア語です。高品質で美しいケーキを提供するイメージを伝えます。

2. "Sweet Harmony Bakery" 
- '甘い調和のベーカリー'という意味で、おいしいケーキがハーモニーを奏でる、という意味が含まれています。

3. "Cake Symphony" 
- 'ケーキの交響曲'を意味し、異なるフレーバーとデザインのケーキが一緒になると
美しい'音楽'を奏でる、というコンセプトを表現しています。

ではMockGPTでMockのレスポンスを返すようにしましょう。
画面下にあるテキストエリアにChatGPTから返したいレスポンスを記述します。

mockgpt-3

このページではすでにbaseURLと固有のAPIキーが表示されているので、
それを設定します。

const model = new OpenAI({ 
    modelName: "gpt-4-0613",
    temperature: 0.9,
},{
  apiKey : '<api Key>',
  basePath: '<URL>'
});

もう一度実行してみましょう。
設定したレスポンスがすぐにかえってきます。
もちろんトークンの消費もしていません。

% npx ts-node main.ts

自分で考えろ

Summary

今回はMockGPTをつかってOpenAI APIのMockテストをしてみました。
テストでトークンを消費する心配もありませんし、
実際のChatGPTのレスポンスよりかなり速いことがわかります。

References