Skip to content

z.ai 統合の能力境界(実装済み vs 明確に未実装)

このドキュメントは Antigravity Tools の z.ai の「境界」のみを説明し、「接続方法」は説明しません。特定の機能が有効になっていないと気づいた場合、ここで照合してください:それはまだ有効になっていないのか、設定されていないのか、それとも最初から実装されていないのか。

学べること

  • z.ai に期待できることかどうかを判断できる:「実装済み」と「明確に未実装」の区別
  • z.ai がどのエンドポイントにのみ影響するか(およびどのエンドポイントには完全に影響しないか)を明確にする
  • 各結論のソースコード/ドキュメントの証拠(GitHub 行番号リンク付き)を確認し、自分で再検証できるようにする

現在の課題

あなたはすでに Antigravity Tools で z.ai を有効にしているかもしれませんが、使用すると以下のような疑問に直面しているかもしれません:

  • なぜ一部のリクエストは z.ai を経由し、一部は全く経由しないのか?
  • MCP エンドポイントは「完全な MCP Server」として使用できるか?
  • UI で見えるスイッチは、実際の実装に対応しているのか?

z.ai 統合とは(このプロジェクトで)?

z.ai 統合は Antigravity Tools ではオプションの「アップストリームプロバイダー + MCP 拡張」です。特定の条件下でのみ Claude プロトコルリクエストを引き継ぎ、MCP Search/Reader リバースプロキシと最小限の Vision MCP 内蔵サーバーを提供します。全プロトコル、全機能の置換ソリューションではありません。

一言で記憶

z.ai は「Claude リクエストのオプションのアップストリーム + 一連のオン/オフ可能な MCP エンドポイント」として使用でき、「z.ai のすべての機能を完全に取り込む」ものと期待しないでください。

実装済み:安定して利用可能(ソースコードを基準)

1) Claude プロトコルのみが z.ai を経由する(/v1/messages + /v1/messages/count_tokens)

z.ai の Anthropic アップストリーム転送は、Claude ハンドラーの z.ai ブランチでのみ発生します:

  • POST /v1/messagesuse_zai=true の場合、forward_anthropic_json(...) を呼び出して JSON リクエストを z.ai Anthropic 互換エンドポイントに転送します
  • POST /v1/messages/count_tokens:z.ai が有効な場合も同様に転送します。それ以外の場合はプレースホルダー {input_tokens:0, output_tokens:0} を返します

証拠:

「レスポンスストリーミング」の理解方法

forward_anthropic_json はアップストリームレスポンスボディを bytes_stream() でストリーミングしてクライアントに返し、SSE を解析しません(providers/zai_anthropic.rs の Response body 構築を参照)。

2) スケジューリングモード(dispatch_mode)の「実際の意味」

dispatch_mode/v1/messages が z.ai を経由するかどうかを決定します:

dispatch_mode何が起こるか証拠
offz.ai を使用しないsrc-tauri/src/proxy/config.rs#L20-L37 + src-tauri/src/proxy/handlers/claude.rs#L282-L314
exclusiveすべての Claude リクエストが z.ai を経由するsrc-tauri/src/proxy/handlers/claude.rs#L285-L314
fallbackGoogle プールが使用不可(0 アカウントまたは「使用可能なアカウントなし」)の場合のみ z.ai を経由するsrc-tauri/src/proxy/handlers/claude.rs#L288-L305
pooledz.ai を「追加の 1 つのスロット」としてラウンドロビンに参加させる(必ずヒットする保証はない)src-tauri/src/proxy/handlers/claude.rs#L306-L312

pooled のよくある誤解

pooled は「z.ai と Google アカウントプールの両方を使用し、重みに基づいて安定して分散する」わけではありません。コードには明確に「no strict guarantees」と書かれており、本質的にはラウンドロビンスロット(slot == 0 の場合のみ z.ai を経由)です。

3) モデルマッピング:Claude モデル名が z.ai の glm-* にどう変換されるか

z.ai に転送する前に、リクエストボディに model フィールドがある場合、次のように書き換えられます:

  1. proxy.zai.model_mapping の完全一致(元の文字列と小文字のキーを同時にサポート)
  2. zai:<model> プレフィックス:zai: を削除して直接使用
  3. glm-*:変更なし
  4. claude-* 以外:変更なし
  5. claude-*opus/haiku を含む:proxy.zai.models.opus/haiku にマッピング;それ以外はデフォルトで sonnet

証拠:src-tauri/src/proxy/providers/zai_anthropic.rssrc-tauri/src/proxy/providers/zai_anthropic.rs

4) 転送時の Header セキュリティポリシー(ローカルプロキシキーの漏洩を回避)

z.ai アップストリーム転送は「すべての Header をそのまま渡す」のではなく、2 層の防御を行います:

  • 一部の Header のみを許可(例:content-typeacceptanthropic-versionuser-agent
  • z.ai の API Key をアップストリームに注入(クライアントが使用する認証方式を優先:x-api-key または Authorization: Bearer ...

証拠:

実装済み:MCP(Search/Reader リバースプロキシ + Vision 内蔵)

1) MCP Search/Reader:z.ai の MCP エンドポイントへのリバースプロキシ

ローカルエンドポイントとアップストリームアドレスは固定されています:

ローカルエンドポイントアップストリームアドレススイッチ証拠
/mcp/web_search_prime/mcphttps://api.z.ai/api/mcp/web_search_prime/mcpproxy.zai.mcp.web_search_enabledsrc-tauri/src/proxy/handlers/mcp.rs#L115-L135
/mcp/web_reader/mcphttps://api.z.ai/api/mcp/web_reader/mcpproxy.zai.mcp.web_reader_enabledsrc-tauri/src/proxy/handlers/mcp.rs#L137-L157

404 は「ネットワークの問題」ではありません

proxy.zai.mcp.enabled=false、または対応する web_search_enabled/web_reader_enabled=false の場合、これらのエンドポイントは直接 404 を返します。

証拠:

2) Vision MCP:「最小限の Streamable HTTP MCP」内蔵サーバー

Vision MCP はリバースプロキシではなく、ローカル内蔵実装です:

  • エンドポイント:/mcp/zai-mcp-server/mcp
  • POST でサポート:initializetools/listtools/call
  • GET で SSE keepalive を返却(初期化されたセッションが必要)
  • DELETE でセッションを終了

証拠:

3) Vision MCP ツールセット(8 つ)とファイルサイズ制限

ツールリストは tool_specs() から取得されます:

  • ui_to_artifact
  • extract_text_from_screenshot
  • diagnose_error_screenshot
  • understand_technical_diagram
  • analyze_data_visualization
  • ui_diff_check
  • analyze_image
  • analyze_video

証拠:src-tauri/src/proxy/zai_vision_tools.rsdocs/zai/vision-mcp.md

ローカルファイルは読み取られて data:<mime>;base64,... にエンコードされ、同時にハード制限があります:

  • 画像の上限は 5 MB(image_source_to_content(..., 5)
  • 動画の上限は 8 MB(video_source_to_content(..., 8)

証拠:src-tauri/src/proxy/zai_vision_tools.rs

明確に未実装 / 期待しないでください(ドキュメント宣言と実装の詳細を基準)

1) z.ai 使用量/予算監視(usage/budget)は未実装

docs/zai/implementation.md に明確に「not implemented yet」と記載されています。これは以下を意味します:

  • Antigravity Tools が z.ai の usage/budget クエリやアラートを提供することは期待できません
  • クォータガバナンス(Quota Protection)も自動的に z.ai の予算/使用量データを読み取りません

証拠:docs/zai/implementation.md

2) Vision MCP は完全な MCP Server ではありません

Vision MCP は現在、ツール呼び出しに「十分な」最小実装として位置づけられており、prompts/resources、resumability、streamed tool output などはまだ実装されていません。

証拠:docs/zai/vision-mcp.mddocs/zai/implementation.md

3) /v1/models/claude は z.ai の実際のモデルリストを反映しません

このエンドポイントが返すモデルリストはローカルの内蔵マッピングとカスタムマッピング(get_all_dynamic_models)から取得され、z.ai アップストリームの /v1/models をリクエストしません。

証拠:

設定フィールド一覧(z.ai 関連)

z.ai 設定は ProxyConfig.zai の下にあり、以下のフィールドが含まれます:

  • enabled / base_url / api_key
  • dispatch_modeoff/exclusive/pooled/fallback
  • model_mapping(完全一致で上書き)
  • models.{opus,sonnet,haiku}(Claude ファミリーのデフォルトマッピング)
  • mcp.{enabled,web_search_enabled,web_reader_enabled,vision_enabled}

デフォルト値(base_url / デフォルトモデル)も同じファイルにあります:

  • base_url = "https://api.z.ai/api/anthropic"
  • opus/sonnet = "glm-4.7"
  • haiku = "glm-4.5-air"

証拠:src-tauri/src/proxy/config.rssrc-tauri/src/proxy/config.rs


本レッスンのまとめ

  • z.ai は現在 Claude プロトコル(/v1/messages + count_tokens)のみを引き継ぎ、他のプロトコルエンドポイントは「自動的に z.ai を経由する」わけではありません
  • MCP Search/Reader はリバースプロキシです。Vision MCP はローカルの最小実装であり、完全な MCP Server ではありません
  • /v1/models/claude のモデルリストはローカルマッピングから取得され、z.ai アップストリームの実際のモデルを表すものではありません

次のレッスンの予告

次のレッスンでは バージョン進化 を学習します。


付録:ソースコード参照

クリックしてソースコードの場所を表示

更新時間:2026-01-23

機能ファイルパス行番号
z.ai 統合範囲(Claude プロトコル + MCP + Vision MCP)docs/zai/implementation.md12-17
z.ai スケジューリングモードとモデルのデフォルト値src-tauri/src/proxy/config.rs20-116
z.ai デフォルト base_url / デフォルトモデルsrc-tauri/src/proxy/config.rs265-279
/v1/messages が z.ai を経由するかどうかの選択ロジックsrc-tauri/src/proxy/handlers/claude.rs256-374
/v1/messages/count_tokens の z.ai 転送とプレースホルダー返却src-tauri/src/proxy/handlers/claude.rs1186-1209
z.ai Anthropic アップストリーム転送(JSON 転送 + レスポンスストリーミング返却)src-tauri/src/proxy/providers/zai_anthropic.rs133-219
z.ai モデルマッピングルール(map_model_for_zai)src-tauri/src/proxy/providers/zai_anthropic.rs13-37
Header ホワイトリスト + z.ai auth の注入src-tauri/src/proxy/providers/zai_anthropic.rs70-110
MCP Search/Reader リバースプロキシとスイッチsrc-tauri/src/proxy/handlers/mcp.rs45-157
---------
Vision MCP 最小実装の位置付け(完全な MCP Server ではない)docs/zai/vision-mcp.md17-37
Vision ツールリストと制限(tool_specs + ファイルサイズ + stream=false)src-tauri/src/proxy/zai_vision_tools.rs57-270
/v1/models/claude モデルリストのソース(ローカルマッピング、アップストリームを照会しない)src-tauri/src/proxy/common/model_mapping.rs84-132
使用量/予算監視未実装(ドキュメント宣言)docs/zai/implementation.md194-198