チャットボットに生成AIを組み込む際、各社のAPI(OpenAI、Gemini、Bedrock(Claude))のレスポンスを比較して出力の違いなどを検証したかったので、PostmanのNewmanを活用して、APIリクエストを一括実行して結果をCSVに保存する方法を試してみました。
各APIの設定方法から、Postman(Newman)を使ったレスポンスの比較方法まで解説します。
APIの設定
まず、各社の生成AI API(OpenAI, Gemini, Bedrock)をPostmanで設定します。
1. OpenAI API
APIキーの作成
OpenAIのAPIプラットフォームにログインし、APIキーを作成します。
また、APIを利用するには最低5 USDのクレジットをチャージする必要があります。
Postmanの設定
OpenAIの/chat/completions
エンドポイントにリクエストを送ります。
-
エンドポイント
POST https://api.openai.com/v1/chat/completions
-
Headers
Content-Type: application/json Authorization: Bearer <APIキー>
-
Body
{ "model": "gpt-4o", "messages": [ { "role": "system", "content": "{{system_prompt}}" }, { "role": "user", "content": "{{input_prompt}}" } ], "max_tokens": 200, "temperature": 0.7 }
補足
-
{{system_prompt}}
と{{input_prompt}}
にはNewmanで使用するprompts.json
の値が入ります(後述) -
max_tokens
とtemperature
は任意のパラメータです
2. Gemini API
APIキーの作成
Google Cloudのプロジェクトを作成し、Gemini APIを有効化します。
次に、「APIとサービス > 認証情報」からAPIキーを作成します。
Postmanの設定
Geminiのエンドポイントは、APIキーをクエリパラメータとして渡します。
-
エンドポイント
POST https://generativelanguage.googleapis.com/v1/models/gemini-1.5-pro:generateContent
-
Params
key: <APIキー>
-
Headers
Content-Type: application/json
-
Body
{ "contents": [ { "role": "user", "parts": [ { "text": "{{system_prompt}}" } ] }, { "role": "user", "parts": [ { "text": "{{input_prompt}}" } ] } ], "generationConfig": { "temperature": 0.7, "maxOutputTokens": 200 } }
3. Bedrock(Claude API)
APIキーの作成
AWSコンソールで「Amazon Bedrock > モデルアクセス」を開き、使用したいモデルのアクセス権をリクエストします。
IAMユーザーを作成し、Bedrockアクセス用のIAMポリシーを設定します。
BedrockFullAccess
ポリシーを適用すると便利ですが、アクセスキー漏洩のリスクがあるため、必要な権限のみを付与するカスタムポリシーを推奨します。
設定後、IAMでアクセスキー(およびシークレットアクセスキー)を発行します。
Postmanの設定
Bedrock APIはAWS Signature認証を使用するため、PostmanのAuthタブでAWS認証を設定します。
-
エンドポイント
POST https://bedrock-runtime.ap-northeast-1.amazonaws.com/model/anthropic.claude-3-5-sonnet-20240620-v1:0/invoke
-
Auth
Auth Type: AWS Signature AccessKey: <発行したアクセスキー> SecretKey: <発行したシークレットアクセスキー> AWS Region: <リージョン> Service Name: bedrock
-
Headers
Content-Type: application/json Accept: application/json
-
Body
{ "messages": [ { "role": "system", "content": "{{system_prompt}}" }, { "role": "user", "content": "{{input_prompt}}" } ], "max_tokens": 200, "anthropic_version": "bedrock-2023-05-31" }
Newmanの設定
Newmanは、CLIから実行できるPostmanのCollection Runnerです。
JSONにまとめた検証用のプロンプトを読み込んでAPIリクエストを実行し、異なるAIモデルに同じプロンプトを送信して、レスポンスを比較・検証することができます。
PostmanのGUIでもCollection Runnerを実行できますが、標準機能ではCSVに出力できないため、今回はNewmanを使用しました。Newmanを使うことで、CLIでの一括実行と結果の自動出力が可能になります。
1. インストール
まず、作業用フォルダを作成し、newman
とnewman-reporter-csv
をローカルにインストールします。
$ npm install newman newman-reporter-csv
2. collection.json
の作成
PostmanのCollection Runnerで使用するAPI定義をcollection.json
にエクスポートします。
- PostmanでAPIリクエストを作成
- 「Export」から「Collection v2.1」を選択
-
collection.json
として保存
これにより、Postmanのリクエスト設定がそのままcollection.json
に保存され、Newmanで再利用できます。
3. prompts.json
の作成
テスト用のプロンプトをprompts.json
にまとめます。
このファイルを使って、異なるプロンプトを一括でAPIに送信し、レスポンスを比較できます。
記載例
[
{
"system_prompt": "あなたは旅行のプランナーです。",
"input_prompt": "おすすめの旅行先を3つ提案してください。"
},
{
"system_prompt": "あなたはITエンジニアであり、初心者向けのプログラミング講師でもあります。",
"input_prompt": "プログラミング初心者におすすめの学習言語を3つ提案してください。"
},
{
"system_prompt": "あなたは健康アドバイザーです。",
"input_prompt": "毎日の健康習慣として取り入れるべき3つの習慣を提案してください。"
}
]
4. Newmanの実行
以下のコマンドを実行すると、APIリクエストが自動で実行され、レスポンスがCSVに出力されます。
$ npx newman run collection.json -d prompts.json -r cli,csv \
--reporter-csv-export responses.csv --reporter-csv-includeBody
-
-d prompts.json
→ データファイル(prompts.json
)を指定し、各プロンプトを順番に適用 -
-r cli,csv
→ CLI出力とCSVレポートの両方を有効化 -
--reporter-csv-export responses.csv
→ レスポンス結果をresponses.csv
に保存 -
--reporter-csv-includeBody
→ レスポンスの中身をCSVのフィールドに含める
実行すると、以下のようなCSVが生成されます。