コンテンツにスキップ

メッセージ (Anthropic)

POST /v1/messages

Anthropic Messages API 形式のリクエストを受け付けます。リクエストは内部の OpenAI 互換形式に変換されて処理され、レスポンスは Anthropic 形式に戻してから返却されます。

これにより、コードを変更することなく Anthropic SDK を ai& と組み合わせて使えます。

from anthropic import Anthropic
client = Anthropic(
api_key="sk-your-api-key",
base_url="https://api.aiand.com",
)
message = client.messages.create(
model="deepseek-ai/deepseek-v4-flash",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello!"}],
)
print(message.content[0].text)
  1. リクエストが Anthropic Messages 形式で到着
  2. ai& がそれを OpenAI 形式に変換して推論を実行
  3. レスポンスを Anthropic 形式に戻して返却

ストリーミングにも対応しています。認証は他のエンドポイントと同じく Authorization: Bearer ヘッダを使用します。

Anthropic Messages API の標準パラメータを受け付けます。基となるモデルに対応する機能がないパラメータは、以下の例外を除き無視されます。

  • tools — クライアントツール(type が custom、または type なし)は function tool に変換されます。Anthropic のサーバーサイドツール(web_search_*、web_fetch_*、code_execution_*、tool_search_* など)は Anthropic の API 内部で実行されるため提供できません。Anthropic 定義のクライアントツール(bash_*、text_editor_*、computer_* など)には Anthropic 以外のモデルが従える input_schema がないため、カスタムツールとして送信してください。Anthropic 定義のツール type を含むリクエストは、ツール名を示す 400 invalid_request_error で拒否されます。
  • tool_choice — auto、any、none、tool が対応付けられ、disable_parallel_tool_use: true は parallel_tool_calls: false になります。
  • tool_result 内の画像 — vision 対応モデルでは、ツール結果内の画像はそのターンのツール結果の後に続く user メッセージとしてモデルに渡され、それぞれ tool_use_id でラベル付けされます。テキストのみのモデルでは、ツールのテキストに [Image omitted…] のプレースホルダーが入ります。

このエンドポイントのエラーは Anthropic のエンベロープ {"type":"error","error":{"type":"…","message":"…"},"request_id":"…"} を使用し、型名も Anthropic のもの(invalid_request_error、authentication_error、permission_error、not_found_error、rate_limit_error、api_error など)です。モデルのコンテキストウィンドウを超えるリクエストは、メッセージが prompt is too long で始まり capability_rejected: prompt_too_long トークンを含む 400 となります。これは Claude Code の自動圧縮が検出する文言です。

ストリーミング応答が 15 秒間アイドルになると、キープアライブが送られます。message_start の前は SSE のコメント行、その後は ping イベントです。バイト数でストールを検出するクライアント(Claude Code は 300 秒の無通信で中断します)でも、長い推論の間、接続が維持されます。

thinking ブロックは reasoning のレベルを指定するものではありません (budget_tokens も type も当社の effort スケールには対応しません)。深さはモデル自身のデフォルトに委ねられます。レベルを指定するには、モデルが公開している reasoning_efforts のいずれかを reasoning_effort として送信するか、Claude Code が /effort で送信する Anthropic 本来の output_config: { "effort": "…" } を使用してください。両方がある場合は明示的な reasoning_effort が優先されます。検証はどちらも /v1/chat/completions と同一で、サポートされない値は送信したフィールド名とモデルが受け付ける値を示す 400 となり、適用されたレベルは X-Reasoning-Effort で返されます。

thinking が制御するのは、その reasoning を返すかどうかです。thinking: { "type": "enabled" } ("adaptive" も同様に受け付けます) を送信すると、reasoning は text ブロックの前に thinking コンテンツブロックとして返され、ストリーミングでは thinking_delta イベントとして流れます。指定しない場合は回答のみが返ります。

当社が返す thinking ブロックに signature は含まれません。署名する上流が存在しないため、Anthropic 本家の API にそのまま送り返すと拒否されます。ai& に送り返す場合は問題ありません。リクエストに含まれる thinking ブロックはモデルに到達する前に破棄されます。

reasoning モデルの中には、回答全体を reasoning の中に書き、メッセージ本文を空のまま返すものがあります。そうしたレスポンスは thinking を要求したかどうかに関わらず通常の text ブロックとして返されるため、成功レスポンスには必ず 1 つ以上のコンテンツブロックが含まれます。

画像コンテンツブロックは vision 対応モデルでサポートされます。Anthropic の 3 つのソースタイプすべて (base64、url、および POST /v1/files で取得した file_id を参照する file) が動作します。ワイヤーフォーマットの詳細は Anthropic のコンテンツブロックドキュメント を参照してください。vision capability を持たないモデルへのリクエストは、推論実行前に 400 invalid_request_error で拒否されます。