例ではエンドポイント
https://api.apiyi.com と、あなたの APIYI token を使用します。参照しているモデル: gpt-5.4-mini, deepseek-v4-pro, gemini-3.5-flash, claude-sonnet-4-6。コア原則: 履歴は自分で保持する
一言で言うと、モデルはステートレスであり、あなた(クライアント)が履歴を保持して、毎ターンその全体を再送する ということです。OpenAI互換モード(複数モデルで動作)
最も汎用的な方法で、エンドポイント/v1/chat/completions。履歴は messages 配列にあり、各エントリには role(system / user / assistant)が含まれます。model 文字列を切り替えるだけで、同じコードで別のモデルを動かせます(gpt、deepseek、claude、gemini…)。
推論モデルの履歴の扱い
deepseek-v4-pro のような推論モデルは、追加の reasoning_content(思考の連鎖)フィールドを返します。
推論モデルのレスポンスの解析については、推論モデルの出力 を参照してください。
OpenAI ネイティブ形式(Responses API)
エンドポイント/v1/responses。マルチターンでは、input 配列として完全な履歴を渡します(各エントリには role / content を含めます)— compatible mode と同じ自己管理型のアプローチです:
Gemini ネイティブ形式
エンドポイント/v1beta/models/{model}:generateContent。履歴は contents 配列に保持されます。役割は user / model(assistant ではありません)に注意してください。また、各エントリの content は parts に入ります。
Gemini 3-series のレスポンスは parts に
thoughtSignature を付与します。プレーンテキストのマルチターンでは、text だけを返せばコンテキストを維持できます(tokens も少なくて済みます)。function calling のように厳密な reasoning の継続が必要な場合のみ、thoughtSignature をそのまま返す必要があります。これは公式 SDK が自動で処理します。Gemini Native Calls と Function Calling を参照してください。Anthropic ネイティブフォーマット
エンドポイント/v1/messages。履歴は messages 配列にあり、ロールは user / assistant です。content は通常の文字列にできます。max_tokens は必須です。
4つの形式の比較
よくある質問
会話が長くなるほど料金は高くなりますか?
会話が長くなるほど料金は高くなりますか?
はい。各ターンで履歴全体が再送されるため、input tokens はターン数に応じて増え、それに伴ってコストも上がります。節約の主な方法は コンテキストキャッシュ です。同一の履歴プレフィックスは自動的にキャッシュヒット率が適用され、定価よりはるかに低くなります。OpenAI caching、Claude caching、Gemini caching をご覧ください。
何ターンまで保持すべきですか? コンテキストウィンドウを超えたらどうなりますか?
何ターンまで保持すべきですか? コンテキストウィンドウを超えたらどうなりますか?
厳密なルールはありませんが、履歴が長いほどコストは高くなり、モデルのコンテキストウィンドウを超える場合があります。一般的な対処法は次のとおりです。(1) スライディングウィンドウ — 直近の N ターンだけを保持する;(2) 要約圧縮 — 以前のターンを system prompt の段落に要約する;(3) システム指示と直近のターンを常に保持する。ユースケースに必要な「記憶量」とのバランスを取ってください。
system / system instruction はどこに入れればよいですか?
system / system instruction はどこに入れればよいですか?
OpenAI 互換と Anthropic: 会話の先頭に置きます(互換版では
role:"system" を使用し、Anthropic ではトップレベルの system フィールドまたは最初のメッセージを使います)。Gemini: config.system_instruction を使用します。システム指示は 一度だけ 設定すればよく、毎ターン再追加する必要はありません。推論モデルの thinking(reasoning_content)を戻すべきですか?
推論モデルの thinking(reasoning_content)を戻すべきですか?
いいえ。 thinking はそのターンの中間生成物です。履歴には最終的な
content だけを残してください(Gemini では text のみ)。thinking を返すと token を無駄に消費し、一部の upstream では受け付けられません。例外は、関数呼び出しにおける Gemini の thoughtSignature です。公式 SDK が自動的に処理します。サーバーに会話を覚えさせて、履歴を再送しなくてもよいですか?
サーバーに会話を覚えさせて、履歴を再送しなくてもよいですか?
APIYI ではこれは 推奨されません。OpenAI Responses の
previous_response_id は、ゲートウェイ経由で確実に動作するとは限りません(検証済み: メモリなし)。どこでもクライアント側で履歴を自前管理する方法を使ってください。これはモデル間で最も安定しており、一貫性があります。関連リンク
- 呼び出しの基本: OpenAI 互換モード · OpenAI ネイティブ呼び出し · Gemini ネイティブ呼び出し · Claude API 基本
- レスポンスのパース: OpenAI のレスポンス処理 · 推論モデルの出力 · Claude のストリーミングとレスポンス · Gemini のストリーミングとレスポンス
- モデルと料金: モデルと料金の概要
- token の取得 / 管理:
https://api.apiyi.com/token