メッセージ (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="deepseek-ai/deepseek-v4-flash", 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: "deepseek-ai/deepseek-v4-flash", 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になります。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 も 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 で拒否されます。