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?

Claude Code の ANTHROPIC_BASE_URL の仕組みと、リレーが本物の Claude か確認する方法

1
Posted at

安価な Claude Code 向けリレー(API 中継)を使う前に、「本当に Claude が答えているのか」を自分で確かめる手順をまとめます。前半は Claude Code が読む環境変数の話、後半はどのリレーにも使える検証方法です。筆者は CoreCode というリレーを運営しています(末尾に開示)。

1. Claude Code が読む環境変数

公式ドキュメント(環境変数、LLM ゲートウェイへの接続)によると次のとおりです。

  • ANTHROPIC_BASE_URL:API のエンドポイントをプロキシやゲートウェイに向けます。
  • ANTHROPIC_AUTH_TOKEN:Authorization: Bearer ヘッダーで送られます。
  • ANTHROPIC_API_KEY:x-api-key ヘッダーで送られます。設定するとログイン済みのサブスクリプションより優先されます(対話モードでは初回に承認を求められます)。
  • ANTHROPIC_DEFAULT_OPUS_MODEL / SONNET / HAIKU:opus sonnet haiku の各エイリアスが指すモデル ID を変えます。

リレーがどちらのヘッダーを読むかで変数を選びます。迷ったら ANTHROPIC_AUTH_TOKEN から試し、401 なら切り替える、というのが公式の案内です。~/.claude/settings.json の env に書くと、シェルの起動方法に関係なく反映されます。

{
  "env": {
    "ANTHROPIC_BASE_URL": "https://relay.example",
    "ANTHROPIC_AUTH_TOKEN": "sk-your-key"
  }
}

2. /status で確認する

claude を起動して /status を実行し、Anthropic base URL の行がリレーのアドレスになっているか、Auth token または API key の行があるかを見ます。Login method に claude.ai アカウントが出ている場合、認証情報が効いていません。

3. 安いプランでモデルが差し替わる例

「Claude Code で使える」ことと「Claude が答える」ことは別です。たとえば Z.ai の GLM Coding Plan は、同じ ANTHROPIC_BASE_URL / ANTHROPIC_AUTH_TOKEN の仕組みで Claude Code を接続し、Opus / Sonnet / Haiku の変数を GLM のモデルに対応づけます(Z.ai ドキュメント)。これは公式に明記された使い方なので不正ではありませんが、答えているのは Claude ではありません。なお Anthropic 側は、ゲートウェイ経由で Claude 以外のモデルに Claude Code をつなぐ使い方をサポートしないと書いています(LLM gateway)。問題は、非 Claude モデルを黙って返すリレーがありうる点です。

モデルに「あなたは誰ですか」と聞いても無意味です。システムプロンプトに 1 行書けば、どのモデルも Claude を名乗ります。見るべきは挙動です。

4. 検証 A:オープンソースの check-relay.py

claude-relay-check は標準ライブラリだけの Python 1 ファイルで、1 回数セントです。README によれば次の 3 つを調べます。

  • shape:レスポンスが Anthropic Messages 形式か(type、msg_ で始まる id、usage)。
  • cache:約 18,000 トークンの cache_control 付きプロンプトを 2 回送り、書き込みと読み出しが同量か。
  • signature:thinking ブロックの署名を 1 文字変えて送り返し、400 で拒否されるか。Anthropic は改ざんされた署名を必ず 400 にすると説明しています(Preserved thinking)。
curl -fsSLO https://raw.githubusercontent.com/CoreCodeAI/claude-relay-check/main/check-relay.py
python3 check-relay.py --base-url https://relay.example --key sk-your-key --model claude-sonnet-5-5

--base-url と --key を省略すると、Claude Code が使っている環境変数を読みます。README が明記している限界は 2 つです。上流が Anthropic だと示すだけで、選んだ等級(Opus か Sonnet か)までは示せません。また 1 回の抽出なので、時間を置いて再実行してください。Claude Code 以外のクライアントを 403 で拒否するリレーでは ERROR になり、真偽の判定にはなりません。

5. 検証 B:ModelTrace で等級を見る

ModelTrace は、モデルに長い整数列を 3 回生成させ、その数字の分布を既知モデルの指紋と比べて家族とバージョンを推定するツールです。README によると、結果は指紋庫に収録されたモデルの範囲での確率で、未収録のモデルは最も近い候補に振り分けられます。参考値として使ってください。

6. 検証 C:キャッシュを自分の目で見る

Claude Code は毎ターン同じ前置き(システムプロンプトやツール定義)を送るため、キャッシュの当たり方が料金を左右します。Anthropic は、キャッシュ読み出しを基本入力単価の 0.1 倍(モデルにより 0.05 倍など例外あり)、5 分キャッシュの書き込みを 1.25 倍と定めています(Prompt caching)。同じリクエストを 2 回送り、usage を比べます。

python3 - > /tmp/body.json <<'PY'
import json
t = "Reference note: " + "the quick brown fox jumps over the lazy dog. " * 1500
print(json.dumps({"model": "claude-sonnet-5-5", "max_tokens": 16,
  "system": [{"type": "text", "text": t, "cache_control": {"type": "ephemeral"}}],
  "messages": [{"role": "user", "content": "ok?"}]}))
PY
for i in 1 2; do
  curl -sS "$ANTHROPIC_BASE_URL/v1/messages" \
    -H "Authorization: Bearer $ANTHROPIC_AUTH_TOKEN" \
    -H "anthropic-version: 2023-06-01" -H "content-type: application/json" \
    -d @/tmp/body.json |
  python3 -c 'import json,sys; d=json.load(sys.stdin); print(d.get("model"), d.get("usage"))'
done

1 回目に cache_creation_input_tokens、2 回目に同程度の cache_read_input_tokens が出れば期待どおりです。両方 0 なら、キャッシュが効いていないか、使用量をリレーが自前で計算しています。書き込むだけで読まれない場合は、リクエストが毎回別のアカウントに届いている可能性があります。

7. 料金表で見るところ

  • 入力・出力・キャッシュ書き込み・キャッシュ読み出しが別々に、Anthropic と同じ比率で課金されるか。
  • リクエスト単位の使用量と金額がログで確認できるか。
  • 1 つのセッションが同じアカウントに固定されるか(キャッシュが保たれる条件です)。
  • 「割引率」が何を基準にしているか。

免責・開示

筆者は CoreCode(corecode.live)を運営しており、これは検証手順の一例として挙げています。CoreCode は、すべてのリクエストを Anthropic 公式の Claude アカウントが処理するリレーです。決済は Alipay と WeChat Pay の人民元(CNY)のみで、日本円やクレジットカードには対応していません。自社の検証ページは こちら にあり、上記のスクリプトは CoreCode を含めどのリレーにも使えます。Anthropic の公式サービスではありません。

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?