メッセージ (Anthropic)
POST /v1/messagesAnthropic 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="google/gemma-4-31b-it", max_tokens=1024, messages=[{"role": "user", "content": "Hello!"}],)
print(message.content[0].text)import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({ apiKey: "sk-your-api-key", baseURL: "https://api.aiand.com",});
const message = await client.messages.create({ model: "google/gemma-4-31b-it", max_tokens: 1024, messages: [{ role: "user", content: "Hello!" }],});
console.log(message.content[0].text);- リクエストが Anthropic Messages 形式で到着
- ai& がそれを OpenAI 形式に変換して推論を実行
- レスポンスを Anthropic 形式に戻して返却
ストリーミングにも対応しています。認証は他のエンドポイントと同じく Authorization: Bearer ヘッダを使用します。
サポートされるパラメータ
Section titled “サポートされるパラメータ”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になります。output_config.effortとthinking—output_config.effortは reasoning のレベルを指定し、thinking: { "type": "disabled" }はnoneを公開している名前付きの推論モデルで reasoning を無効にします。例外は reasoning を参照してください。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 の自動圧縮が検出する文言です。
キープアライブ
Section titled “キープアライブ”ストリーミング応答が 15 秒間アイドルになると、キープアライブが送られます。message_start の前は SSE のコメント行、その後は ping イベントです。バイト数でストールを検出するクライアント(Claude Code は 300 秒の無通信で中断します)でも、長い推論の間、接続が維持されます。
reasoning
Section titled “reasoning”thinking ブロックは reasoning のレベルを指定するものではありません (budget_tokens も enabled も当社の effort スケールには対応しません)。そのため、深さは原則モデル自身のデフォルトに委ねられます。レベルを指定するには、モデルが公開している reasoning_efforts のいずれかを reasoning_effort として送信するか、Claude Code が /effort で送信する Anthropic 本来の output_config: { "effort": "…" } を使用してください。両方がある場合は明示的な reasoning_effort が優先されます。扱いはどちらも /v1/chat/completions と同一で、モデルの一覧にないレベルは一つ上のレベル(なければ最も高いレベル)で実行され(送信したレベルより高コストになる場合があります)、effort の語彙にない値は送信したフィールド名を示す 400 となり、適用されたレベルは X-Reasoning-Effort で返されます。
例外は thinking: { "type": "disabled" } です。これは「reasoning を一切行わない」という、当社のスケールで表現できる唯一の指定であるため、reasoning_effort: "none" として適用し、その確認として X-Reasoning-Effort: none を返します。output_config.effort より優先されるので、thinking を無効にしたリクエストが、そのフィールドの effort で課金されることはありません。none を公開していない推論モデルでは、明示的な reasoning_effort none と同じ文で、thinking を指す 400 になります。エラー文は エラー にあります。reasoning_effort を併せて送信した場合はそちらが適用され、ブロックはレスポンス形式の制御のみに使われます。reasoning 機能を持たないモデルでは、抑制する対象がないため無視されます。
予約名 auto では、このブロックはいずれの場合もレベルを指定しません。auto は effort を一切受け付けないため、reasoning を無効化したい場合はモデルを直接指定してください。auto では Claude Code の output_config.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 で拒否されます。url ソースは URL の要件 を満たす必要があります。
ドキュメント入力
Section titled “ドキュメント入力”PDF の document ブロックは vision 対応モデルでサポートされます。ソースは base64 (media_type: "application/pdf") と、purpose: "document" でアップロードしたファイルを参照する file です。各ページは画像としてモデルに渡され、tool_result 内の PDF はツール結果内の画像と同じように扱われます。base64 の PDF は document ファイルとして保存されて再利用され、制限は Chat Completions のインライン PDF と同じです。ただしゼロデータリテンションの組織では、保存されずメモリ上で描画され、専用の制限が適用されます。text と content ソースはテキストとしてモデルに渡されます。url ソースは取得されませんが、URL の要件 を満たさない場合はリクエストが拒否されます。