アプリケーションでLLMを交換するのは、1行の変更である一方、応答レイテンシー、トークンコスト、出力フォーマットの安定性、ツール呼び出し、画像処理の可否まで変わる大きなリスクを伴います。
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
ボディ
{
"model": "{{model}}",
"messages": [
{"role": "user", "content": "Reply with exactly: OK"}
],
"reasoning_effort": "low"
}
このモデルのreasoning_effortはデフォルトでmaxです。推論トークンも出力トークンとして課金されるため、接続チェックではlowに設定します。
次のアサーションを追加します。
- ステータスコードが
200である -
choices[0].message.contentが存在する -
choices[0].finish_reasonがstopである -
usage.total_tokensが存在する
finish_reasonがlengthの場合、応答は完了せず、出力上限で切り詰められています。モデルの最大出力値が情報源によって一貫していないため、切り詰めを明示的に検出しておく価値があります。
リクエスト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"
}
既知の答えを持つ、安定して公開アクセスできる画像をtest_image_urlとして環境変数に登録します。固定画像への決定論的な質問にすると、デモではなく回帰テストとして利用できます。
ローカル画像の場合、image_url.urlにはbase64データURLを指定できます。リクエストボディを読みやすくするため、データURL自体を環境変数に保存してください。
data:image/png;base64,iVBORw0KGgo...
次のアサーションを追加します。
- ステータスコードが
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"]
}
}
}
]
}
次のアサーションを追加します。
-
choices[0].message.tool_callsが存在し、空ではない -
choices[0].message.tool_calls[0].function.nameがget_deployment_statusである -
choices[0].finish_reasonがtool_callsである
ツール呼び出しの有無だけでなく関数名も検証すると、モデルが誤ったツールを選ぶ問題を検出できます。ツール定義を既存APIから生成する場合は、OpenAPI仕様をエージェントツールに変換する方法も利用できます。
GLM-5.3と比較する
モデルIDを環境変数にしておくと、同じコレクションを簡単に比較できます。
環境を複製し、modelをglm-5.3に変更して実行します。次の3点を比較してください。
正確性
アサーションが引き続き成功するかを確認します。GLM-5.3はネイティブで画像を受け付けないため、画像リクエストは失敗します。これはテストの不具合ではなく、モデル差異の発見です。
レイテンシー
Apidogはリクエストごとの応答時間を報告します。GLM-5.3は約86トークン/秒、GLM-5.3-Flashは49トークン/秒で生成するため、長い出力ではGLM-5.3の方が早く完了すると予想されます。
コスト
usageオブジェクトから、リクエストごとのprompt_tokensとcompletion_tokensを取得できます。各モデルの料金を掛け合わせれば、実際の1リクエストあたりのコストを比較できます。
reasoning_effortごとのcompletion_tokensも確認してください。デフォルトのmaxでは推論トークンも出力として課金されるため、短く見える回答でも大量の完了トークンを消費する場合があります。同じプロンプトをlow、high、maxで実行し、トークン数を比較すると、ワークロードに必要な推論レベルを判断できます。
ローカルデプロイメントをテストする
モデルのウェイトをセルフホストしている場合、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
このエンドポイントは標準APIとは異なります。詳しくは、Claude Code and Clineガイドを参照してください。
他のプロバイダーにも使えますか?
ほとんどの場合使えます。OpenRouter、Cloudflare Workers AI、Vercel AI GatewayはいずれもOpenAI互換インターフェースを公開しています。base_urlとモデルIDのネームスペースを変更してください。
非決定的な応答にはどのようにアサートすればよいですか?
正確なテキストではなく、構造と制約を検証します。フィールドの存在、型、トークン数、finish_reason、既知の答えを持つ質問への部分文字列の包含などをアサートしてください。

Top comments (0)