OpenAI APIとは何か・チャット画面の裏側を組み立てる視点

ChatGPTを普段使っている人は多いと思いますが、OpenAI APIはそれとは別物です。ChatGPTが「完成した1つのチャット画面」だとすると、OpenAI APIは自分のアプリやサービスに生成AIの受け答えを組み込むための部品(材料)です。同じOpenAI社のモデルを使っていても、完成品を使う側と部品から組み立てる側とでは、見えてくる前提がまったく違います。ここではAPIを直接叩く側から見えてくる、ChatGPTを使っているだけでは気づきにくい仕組みを見ていきます。

APIは基本的に何も覚えていない

ChatGPTのように、一度話した内容は当然覚えていてくれるだろうと思うかもしれませんが、OpenAI APIは基本的に1回のリクエストごとに独立していて、何も覚えていません。標準的な呼び出し方(Chat Completions API)では、会話を続けたければ、これまでのやり取り全部を自分のプログラム側で保存しておき、次のリクエストのたびに丸ごと送り直す必要があります。2025年に登場したResponses APIではstore: trueという設定でやり取りの続きをサーバー側に覚えさせておくこともできますが、これも明示的に頼んで初めて有効になる機能であり、「頼まなければ何も覚えていない」という前提自体は変わりません。

# 1回目のリクエスト
messages: [
  {role: "user", content: "犬について一言で教えて"}
]
# → 応答: "犬は人懐っこい哺乳類です"

# 2回目のリクエスト(「それ」が何を指すか、自分で履歴を送らないと通じない)
messages: [
  {role: "user", content: "犬について一言で教えて"},
  {role: "assistant", content: "犬は人懐っこい哺乳類です"},
  {role: "user", content: "それの平均寿命は?"}     # ← 1回目のやり取りを含めて送る
]
🎯 読み解きポイント:毎回記憶を失うNPCに、自分でクエストログを渡す

ハクスラゲームで、話しかけるたびに前回の会話をすべて忘れているNPCを想像してください。まともに話を続けるには、プレイヤー自身がこれまでのやり取りをクエストログとして持ち歩き、話しかけるたびにログ全部をNPCに読み上げて聞かせる必要があります。ChatGPTの画面では、この「ログを読み上げる」作業を画面側が裏で自動的にやってくれているだけで、APIを直接使うときはこの作業を自分のプログラムで実装しなければなりません。

ロール(役割)を指定して初めて振る舞いが決まる

質問を送りさえすれば、ChatGPTと同じような口調・態度で答えてくれるだろうと思うかもしれませんが、その振る舞いはChatGPTというアプリ側があらかじめ用意している設定によるもので、API単体にはその前提がありません。OpenAI APIでは、やり取りの各発言にsystem(全体の振る舞いを決める指示)・user(利用者の発言)・assistant(モデルの過去の返答)といったロールを付けて送ります。systemで何も指示しなければ、モデルは特に人格や制約のない素の状態で応答するため、丁寧語で話してほしい、特定の話題には答えないでほしい、といった振る舞いは自分で明示しない限り反映されません。

# systemロールで振る舞いを指定する例
messages: [
  {role: "system", content: "あなたは初心者向けに丁寧語で説明するプログラミング講師です"},
  {role: "user", content: "for文とwhile文の違いは?"}
]
# systemが無ければ、この人格設定は反映されない
🎯 読み解きポイント:NPCの性格は、ゲームマスターが渡す台本で決まる

NPCが特定の性格やしゃべり方をするのは、テーブルトークRPGのゲームマスターが「この村人は臆病な性格で話す」という台本を渡しているからです。台本(systemロール)を渡さなければ、NPCは特に個性のない受け答えしかしません。ChatGPTというアプリでは、この台本にあたる部分をアプリ側が裏で用意してくれていますが、APIを直接使うときは自分でその台本を書く必要があります。

よくあるはまりポイント:モデル選びだけでコストが数十倍変わる

同じ会社が提供するモデルなら、料金もそう大きくは変わらないだろうと思うかもしれませんが、実際にはモデルのランク次第で料金は大きく異なります。2026年8月時点の主力モデル群では、最上位モデルが100万トークンあたり入力5ドル・出力30ドルであるのに対し、廉価版のモデルは入力0.2ドル・出力1.2ドルほどで、実に25倍前後の価格差があります。さらに会話を続けるほど、直前までのやり取り全部を毎回送り直す都合上、同じ内容のトークンに何度も課金されているような感覚になりがちです。単純な要約や分類のような軽いタスクにまで最上位モデルを使うと、想定より早く費用がかさむ原因になります。

※100万トークンあたりの料金(ドル)。棒の高さは比率のイメージ $0.2 廉価モデル・入力 $1.2 廉価モデル・出力 $30 最上位モデル・出力 $5 最上位モデル・入力
💡 ワンポイントアドバイス:タスクの重さに応じてモデルを使い分ける

複雑な推論や長文の生成が必要な場面は上位モデル、単純な分類や短い要約のような軽い処理には廉価モデル、というように用途ごとにモデルを使い分けると、体感の品質を落とさずにコストを大きく抑えられます。まずは一番安いモデルで試してみて、精度が足りないと感じたときだけ上位モデルに切り替える、という順番で検証すると無駄がありません。

あわせて知っておきたい用語
ステートレス
直前のやり取りの状態を覚えていない性質。OpenAI APIは既定でこの性質を持ち、会話を続けるには履歴を毎回送る必要がある
ロール(system/user/assistant)
やり取りの各発言に付ける役割の印。systemは全体の振る舞いの指示、userは利用者の発言、assistantはモデルの過去の返答を表す
トークン
APIの課金・処理の最小単位。英語で概ね4文字程度が1トークンに相当し、入力・出力それぞれの量に応じて課金される

API目線での前提が掴めたら、他のAIコーディングツールとも見比べてみると理解が深まります。(シリーズ一覧・GitHub Copilot・Cursor・Ollama・Hugging Face・LangChain・Anthropic API・Zed・Devin・Gemini CLI)