DEV Community

Cover image for ApidogでGLM-5.3-Flash APIをテストする方法
Akira
Akira

Posted on Originally published at apidog.com

ApidogでGLM-5.3-Flash APIをテストする方法

アプリケーションでLLMを交換するのは、1行の変更である一方、応答レイテンシー、トークンコスト、出力フォーマットの安定性、ツール呼び出し、画像処理の可否まで変わる大きなリスクを伴います。

今すぐApidogを試す

GLM-5.3-Flashは、そのトレードオフを具体的に示すモデルです。GLM-5.3より約9倍安く、ネイティブ画像処理に対応しています。一方、生成速度は約半分です。GLM-5.3はネイティブで画像をサポートしません。どちらが適しているかを判断するには、両方に対して実際のリクエストを実行する必要があります。

このガイドでは、ApidogでGLM-5.3-Flash APIの再利用可能なテストコレクションを作成します。テキスト、画像、ツール呼び出し、アサーション、GLM-5.3との比較実行を扱います。

なぜcurlだけでは不十分なのか

curlでのテスト方法は、APIガイドで確認できます。しかし、継続的な検証には次の問題があります。

  • Base64画像ペイロード: スクリーンショットのデータURLは何千文字にもなります。ターミナルに貼り付けたコマンドは読みにくく、編集や再実行にも向きません。
  • アサーションがない: curlは応答を表示するだけで、アプリケーションが必要とするフィールドや、応答が途中で切り詰められていないかを検証できません。

保存したコレクションなら、ペイロードを編集可能な状態で管理でき、アサーションを毎回実行できます。

環境をセットアップする

実行間で変わる値を環境変数に登録します。特にモデルIDを変数化すると、コレクション全体を別モデルへ切り替えられます。

変数
base_url https://api.z.ai/api/paas/v4
api_key あなたのZ.aiキー
model glm-5.3-flash

APIキーはリクエストヘッダーに直接記述せず、環境変数として保存してください。エクスポートしたコレクションやチームメイトと共有するファイルからキーを除外できます。

リクエスト1:テキスト補完

{{base_url}}/chat/completionsへのPOSTリクエストを作成します。

ヘッダー

[REDACTED CREDENTIAL] {{api_key}}
Content-Type: application/json
Enter fullscreen mode Exit fullscreen mode

ボディ

{
  "model": "{{model}}",
  "messages": [
    {"role": "user", "content": "Reply with exactly: OK"}
  ],
  "reasoning_effort": "low"
}
Enter fullscreen mode Exit fullscreen mode

このモデルのreasoning_effortはデフォルトでmaxです。推論トークンも出力トークンとして課金されるため、接続チェックではlowに設定します。

次のアサーションを追加します。

  • ステータスコードが200である
  • choices[0].message.contentが存在する
  • choices[0].finish_reasonstopである
  • usage.total_tokensが存在する

finish_reasonlengthの場合、応答は完了せず、出力上限で切り詰められています。モデルの最大出力値が情報源によって一貫していないため、切り詰めを明示的に検出しておく価値があります。

リクエスト2:画像呼び出し

GLM-5.3にはないネイティブ画像処理を検証します。

同じエンドポイントを使いますが、contentは型付きブロックの配列にします。

{
  "model": "{{model}}",
  "messages": [
    {
      "role": "user",
      "content": [
        {"type": "text", "text": "What color is the dominant shape in this image? Answer with one word."},
        {"type": "image_url", "image_url": {"url": "{{test_image_url}}"}}
      ]
    }
  ],
  "reasoning_effort": "low"
}
Enter fullscreen mode Exit fullscreen mode

既知の答えを持つ、安定して公開アクセスできる画像をtest_image_urlとして環境変数に登録します。固定画像への決定論的な質問にすると、デモではなく回帰テストとして利用できます。

ローカル画像の場合、image_url.urlにはbase64データURLを指定できます。リクエストボディを読みやすくするため、データURL自体を環境変数に保存してください。

data:image/png;base64,iVBORw0KGgo...
Enter fullscreen mode Exit fullscreen mode

次のアサーションを追加します。

  • ステータスコードが200である
  • choices[0].message.contentに既知の答えが含まれる
  • usage.prompt_tokensがテキストのみのリクエストより大きい

画像は入力トークンを消費します。プロンプトトークン数が増えなければ、画像が処理されず、無視されたまま200が返っている可能性があります。

ビジョン経路と失敗モードについては、GLM-5.3-Flashビジョンガイドを参照してください。

リクエスト3:ツール呼び出し

アプリケーションが関数呼び出しを利用するなら、ツール呼び出しも個別に検証します。ツール呼び出しのフォーマットはモデル統合の中でも特にバージョンに敏感で、プロバイダーの更新で壊れやすい部分です。

{
  "model": "{{model}}",
  "messages": [
    {"role": "user", "content": "Is the checkout-api service healthy?"}
  ],
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "get_deployment_status",
        "description": "Returns the current status of a named deployment.",
        "parameters": {
          "type": "object",
          "properties": {
            "service": {"type": "string", "description": "The service name."}
          },
          "required": ["service"]
        }
      }
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

次のアサーションを追加します。

  • choices[0].message.tool_callsが存在し、空ではない
  • choices[0].message.tool_calls[0].function.nameget_deployment_statusである
  • choices[0].finish_reasontool_callsである

ツール呼び出しの有無だけでなく関数名も検証すると、モデルが誤ったツールを選ぶ問題を検出できます。ツール定義を既存APIから生成する場合は、OpenAPI仕様をエージェントツールに変換する方法も利用できます。

GLM-5.3と比較する

モデルIDを環境変数にしておくと、同じコレクションを簡単に比較できます。

環境を複製し、modelglm-5.3に変更して実行します。次の3点を比較してください。

正確性

アサーションが引き続き成功するかを確認します。GLM-5.3はネイティブで画像を受け付けないため、画像リクエストは失敗します。これはテストの不具合ではなく、モデル差異の発見です。

レイテンシー

Apidogはリクエストごとの応答時間を報告します。GLM-5.3は約86トークン/秒、GLM-5.3-Flashは49トークン/秒で生成するため、長い出力ではGLM-5.3の方が早く完了すると予想されます。

コスト

usageオブジェクトから、リクエストごとのprompt_tokenscompletion_tokensを取得できます。各モデルの料金を掛け合わせれば、実際の1リクエストあたりのコストを比較できます。

reasoning_effortごとのcompletion_tokensも確認してください。デフォルトのmaxでは推論トークンも出力として課金されるため、短く見える回答でも大量の完了トークンを消費する場合があります。同じプロンプトをlowhighmaxで実行し、トークン数を比較すると、ワークロードに必要な推論レベルを判断できます。

ローカルデプロイメントをテストする

モデルのウェイトをセルフホストしている場合、vLLMとSGLangはどちらもOpenAI互換エンドポイントを公開できます。base_urlをローカルサーバーに変更し、同じコレクションを実行してください。

これはスイートの特に価値の高い使い方です。量子化ビルドは基本的なチャットテストに合格しても、ツールスキーマの処理を誤ったり、画像入力で性能が低下したりする可能性があります。こうした問題はスモークテストではなく、本番環境で発覚しがちです。

デプロイメント方法については、ローカル実行ガイドを参照してください。

CIに組み込む

コレクションが安定したら、スケジュールまたはCI/CDパイプラインで実行します。

  • モデル移行前の可否判断
  • プロバイダー側の予告されていない変更の検出
  • SDK更新後のリクエストシリアル化の確認

モデルプロバイダーは、安定したモデルIDの背後でモデルを更新することがあります。定期実行すれば、ユーザーから報告を受ける前に挙動の変化を検出できます。

ハッピーパス以外をテストする

基本テストが通ったら、次のケースを追加します。

  • 実際に利用する長さの長文コンテキスト。5Kトークンで動作しても、500Kトークンで動作するとは限りません。
  • 不正な入力に対するエラー処理
  • レート制限レスポンスとリトライロジック
  • アプリケーションで利用する場合の複数画像。各画像に個別のimage_urlブロックが必要です。
  • ストリーミング応答。標準補完とはレスポンス形状が異なります。

まとめ

価値があるのは個々のリクエストではなく、同じテストを繰り返し実行できることです。30秒で再テストできるモデル選択は、9月9日の価格変更、Z.aiによる次の改訂版のリリース、別プロバイダーへの移行提案があったときにも再評価できます。

Apidogは無料で始められます。OpenAI互換スキーマをインポートすれば、各リクエストを手作業で構築せずにテスト環境を整えられます。完成したコレクションにより、次回のモデル交換を大規模な変更ではなく、検証済みの差分変更として扱えます。

よくある質問

有料のApidogプランが必要ですか?

いいえ。環境変数とアサーションを含むコレクションは無料プランで利用できます。

読みにくいリクエストボディにせず、base64画像をテストするにはどうすればよいですか?

データURLを環境変数として保存し、ボディ内で{{test_image_url}}として参照してください。

同じ方法でコーディングプランのエンドポイントをテストできますか?

はい。base_urlを次の値に変更します。

https://api.z.ai/api/coding/paas/v4
Enter fullscreen mode Exit fullscreen mode

このエンドポイントは標準APIとは異なります。詳しくは、Claude Code and Clineガイドを参照してください。

他のプロバイダーにも使えますか?

ほとんどの場合使えます。OpenRouter、Cloudflare Workers AI、Vercel AI GatewayはいずれもOpenAI互換インターフェースを公開しています。base_urlとモデルIDのネームスペースを変更してください。

非決定的な応答にはどのようにアサートすればよいですか?

正確なテキストではなく、構造と制約を検証します。フィールドの存在、型、トークン数、finish_reason、既知の答えを持つ質問への部分文字列の包含などをアサートしてください。

Top comments (0)