1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

複数の生成AI APIをPostman(Newman)で自動テストしてレスポンスをCSVに出力する

Posted at

チャットボットに生成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キー作成

また、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_tokenstemperatureは任意のパラメータです

Postman 設定

2. Gemini API

APIキーの作成

Google Cloudのプロジェクトを作成し、Gemini APIを有効化します。

Google Cloud 設定

次に、「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 > モデルアクセス」を開き、使用したいモデルのアクセス権をリクエストします。

Bedrock 設定

IAMユーザーを作成し、Bedrockアクセス用のIAMポリシーを設定します。
BedrockFullAccessポリシーを適用すると便利ですが、アクセスキー漏洩のリスクがあるため、必要な権限のみを付与するカスタムポリシーを推奨します。

設定後、IAMでアクセスキー(およびシークレットアクセスキー)を発行します。

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
    

Postman AWS 設定

  • 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. インストール

まず、作業用フォルダを作成し、newmannewman-reporter-csvをローカルにインストールします。

$ npm install newman newman-reporter-csv

2. collection.jsonの作成

PostmanのCollection Runnerで使用するAPI定義をcollection.jsonにエクスポートします。

  1. PostmanでAPIリクエストを作成
  2. 「Export」から「Collection v2.1」を選択
  3. collection.jsonとして保存

Postman Export

これにより、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が生成されます。

スクリーンショット 2025-03-02 16.57.36.png

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?