PythonからOpenAI APIを1回だけ呼び出す

PythonからOpenAI APIを1回だけ呼び出す

前回の記事では、チャット画面と生成AI APIの違いは「誰が生成AIへ依頼するか」だと整理しました。チャット画面は人が、APIはPythonなどのプログラムが依頼します。

では実際に、Pythonから生成AIへ質問するには、どのくらいのコードが必要なのでしょうか。

今回やることは、たった1つです。

Pythonから生成AI APIへ1回だけ質問を送り、返ってきたテキストを表示する。

Tool Callingも、JSONも、RAGも使いません。まずは最小の1往復を動かします。

具体例には OpenAI API を使いますが、この記事で優先するのは生成AI APIを呼ぶときの共通構造を理解することです。

記事の後半で、GeminiとClaudeの最小コードも並べて確認します。OpenAI固有の細かい機能は、別の記事で紹介します。

この記事を読み終えると、次のことができるようになります。

  • PythonからOpenAI APIを1回呼び出して、回答を表示できる
  • 最小コードのどこが何をしているかを説明できる
  • 1回の呼び出しにいくらかかるかを自分で確認できる
  • 動かないときに、どこから確認すればよいか分かる
  • GeminiやClaudeでも同じ構造で書けることが分かる

今回は、APIが1回正常に動くことをゴールにします。

Screenshot

【月1 特定テーマ講座(11月)】
POS売上分析Copilotを作る
(POSデータ×PYTHON×生成AI)

【開催日時】 全2回(土)2026/11/7,11/21(13:30〜18:00)
【受講形式】 当日Zoom( or 復習用に後日動画視聴)
【参加費用】 2万2千円(税込み)/人

はじめに

 今回やること

最初に、何が起こるのかを確認します。

Pythonから生成AI APIを1回だけ呼び出す流れ Pythonで質問を用意し、APIへ送り、モデルが回答を作り、Pythonが回答を受け取る4段階。始点と終点がどちらもPythonで、1往復で完結する。Pythonから1回だけ質問して、答えを受け取るPythonで質問を用意する1 APIへ送る2 モデルが回答を作る3 Pythonが回答を受け取る4チャット画面と違うのは、人がブラウザへ入力する代わりに Python が送信すること1と4がPython=1往復で完結

チャット画面と違うのは、人がブラウザへ入力する代わりにPythonが送信することです。始点と終点がどちらもPythonなので、回答をそのまま次の処理へ渡せます。
 

 今回使うもの

項目 内容
API OpenAI API(Responses API)
Python SDK openai
モデル例 gpt-5.6-luna
実行環境 Google Colab / Jupyter Notebook / ローカルPython
APIキー 必要

gpt-5.6-luna は、2026年9月2日時点で「コストを抑えた大量処理向け」として案内されているモデルです。モデルは追加・変更・廃止されるため、実行時には公式のモデル一覧を確認してください。

手順は4つです。

  1. APIキーを作る
  2. SDKをインストールする
  3. APIキーを読み込む
  4. APIを1回呼んで、回答を表示する

 

 ChatGPTの契約とAPI利用は別

コードを動かす前に、ひとつ確認しておきます。

ChatGPT Plusを契約していても、その契約にOpenAI APIの利用料は含まれません。 OpenAI APIは、API Platform側で別に利用設定・課金管理されます。

今回例に使う gpt-5.6-luna も、2026年9月2日時点では無料のAPI Tierではサポートされていません。実際にこのコードを動かすには、API側での課金設定が必要です。

「では、いくらかかるのか」は、Step 4 のあとで実際の数字を出して確認します。先に結論を言うと、練習で叩く分には気にする必要のない金額です。
 

Pythonから1回だけ質問して、答えを受け取る

 Step 1:APIキーを作る

OpenAI Platform にアクセスし、ログインしてAPIキーを新規作成します。

https://platform.openai.com/api-keys

APIキーは、「このAPIリクエストは誰のものか」を確認するための秘密の鍵です。パスワードと同じ扱いをします。

作成したキーは、この後すぐ使うのでコピーしておいてください。画面を離れると再表示できないことがあります。

キーの管理で注意すべき点は、記事の後半「APIキーと送信データの扱い」でまとめて説明します。
 

 Step 2:Python SDKをインストールする

Google Colab や Jupyter Notebook なら、最初のセルで次を実行します。

!pip install openai

 
ローカルのターミナルから実行する場合は、先頭の ! を付けません。

pip install openai

この ! は、Notebookのセルからパソコンのコマンドを実行するための記号です。ここを取り違えるとエラーになります。
 

 Step 3:APIキーを読み込む

今回は最小の例なので、Notebookの実行中だけAPIキーを環境変数へ設定します。

import os
from getpass import getpass

os.environ["OPENAI_API_KEY"] = getpass("OPENAI_API_KEY: ")

 
実行すると入力欄が表示されます。

OPENAI_API_KEY: ·························

 
getpass() を使うと、入力したAPIキーが画面にそのまま表示されません。これは、まず1回試すための簡易的な方法です。 Notebookを終了すれば設定は消えます。毎回入力せずに安全に管理する方法は、後続の記事で扱います。
 

 Step 4:APIを1回だけ呼び出す

まずは、接続を確認するための単純な質問を送ります。

from openai import OpenAI

client = OpenAI()

response = client.responses.create(
    model="gpt-5.6-luna",
    input="API接続テスト成功、とだけ回答してください。",
)

print(response.output_text)

 
これだけです。正常に実行できれば、次のように表示されます。

API接続テスト成功

 
モデルによって句読点などが付く場合があります。今回の目的は文章の内容ではなく、Pythonから送信し、Pythonで回答を受け取れたことです。

ここまで動いたら、この記事のゴールは達成です。この先は、動いたコードの意味を確認していきます。

 

 3つのセルをまとめて実行する

Google Colab や Jupyter Notebook で最初から試す場合は、次の3セルを順に実行してください。

# セル1:SDKをインストール
!pip install openai
# セル2:APIキーを入力
import os
from getpass import getpass

os.environ["OPENAI_API_KEY"] = getpass("OPENAI_API_KEY: ")
# セル3:APIを1回呼ぶ
from openai import OpenAI

client = OpenAI()

response = client.responses.create(
    model="gpt-5.6-luna",
    input="API接続テスト成功、とだけ回答してください。",
)

print(response.output_text)

この3セルが動けば、今回のゴールは達成です。
 

 いくらかかったのか

先ほど後回しにした費用の話です。実際に1回呼んだので、いくらかかったのかを確認できます。

接続テスト1回あたりの費用と、usageの見方 response.usage で入力・出力のトークン数が分かる。gpt-5.6-lunaの標準料金では接続テスト1回が約0.0014円、1000回でも約1.4円。接続テスト1回で、いくらかかるのか使ったトークン数を見るprint(response.usage)↓ 実行すると、こんな内容が返るinput_tokens=30output_tokens=10費用の早見表 1回約 0.0014 円 100回約 0.14 円 1000回約 1.4 円 練習で叩く分には、費用を気にする必要はない試算前提:gpt-5.6-luna の標準料金(短いコンテキスト)入力 $0.10 / 出力 $0.60(100万トークンあたり)、入力30トークン・出力10トークン、1ドル150円で概算(2026年9月2日時点)。

APIから返ってくる response には、回答本文以外の情報も入っています。そのひとつが usage です。

print(response.usage)

 
これで、いま送った1回で入力・出力それぞれ何トークン使ったかが分かります。費用はこの式で決まります。

1回あたりの費用
  = 入力トークン数 × 入力単価 + 出力トークン数 × 出力単価

gpt-5.6-luna の標準料金(短いコンテキスト、2026年9月2日時点)は、入力が100万トークンあたり $0.10、出力が $0.60 です。先ほどの接続テストを入力30トークン・出力10トークンと見積もり、1ドル150円で換算すると次のようになります。

実行回数 費用の目安
1回 約 0.0014円
100回 約 0.14円
1000回 約 1.4円

つまり、練習で試す分には費用を気にする必要はありません。 課金設定という言葉で身構えてしまいがちですが、この規模なら誤差の範囲です。

気をつけるのは、長い文章を大量に送るようになってからです。長いコンテキストを使うと単価が上がりますし、繰り返し処理を回せば回数が増えます。この記事の範囲では、短い入力を1回送るだけなので問題になりません。
 

最小コードは4つの部分でできている

コード全体を見ると難しそうに感じるかもしれません。しかし、見る場所は4つだけです。

最小コードの4つの部分 SDKを読み込む、クライアントを作る、APIへ送る、テキストを取り出す、の4つ。まず覚えるのは後半3つ。最小コードは4つの部分でできているfrom openai import OpenAIclient = OpenAI()response = client.responses.create( model=”gpt-5.6-luna”, input=”API接続テスト成功、とだけ回答してください。”,)print(response.output_text) 1SDKを読み込むopenai を使えるようにする 2クライアントを作る環境変数のAPIキーを自動で読む 3APIへ送るmodel と input を指定する 4テキストを取り出す回答本文だけを取り出すまず覚えるのは 2・3・4 の3つ。OpenAI() / responses.create() / output_text

 

 ① SDKを読み込む

from openai import OpenAI

 
OpenAIのPython SDKを使えるようにしています。
 

 ② APIクライアントを作る

client = OpenAI()

このとき、SDKは環境変数 OPENAI_API_KEY を自動的に読み込みます。Step 3 で getpass() を使って設定したキーが、ここで使われます。
 

 ③ APIへリクエストを送る

response = client.responses.create(
    model="gpt-5.6-luna",
    input="API接続テスト成功、とだけ回答してください。",
)

ここで重要なのは2つです。model は利用するモデル、input は生成AIへ送る質問や指示です。
 

 ④ 回答テキストを取り出す

print(response.output_text)

response には回答本文以外の情報も含まれます。その中からテキスト部分だけを取り出しているのが output_text です。
 

 まず覚えるのは3つ

4つの部分のうち、②③④にあたる次の3つを覚えておけば、当面は困りません。

書き方 役割
OpenAI() APIを使うためのクライアントを作る
client.responses.create(...) APIへ質問を送る
response.output_text 返ってきたテキストを取り出す

つまり 準備 → 送信 → 回答取得 です。JSONやTool Callingが出てくるとコードは長くなりますが、基本はこの往復の延長です。
 

OpenAIでもGeminiでもClaudeでも構造は同じ

冒頭で「共通構造の理解を優先する」と書きました。ここで実際に確かめます。同じ「1回だけ質問する」コードを、3社それぞれで書いてみます。
 

 OpenAI

# pip install openai
from openai import OpenAI

client = OpenAI()

response = client.responses.create(
    model="gpt-5.6-luna",
    input="API接続テスト成功、とだけ回答してください。",
)

print(response.output_text)

 

 Google Gemini

# pip install -U google-genai
from google import genai

client = genai.Client()

interaction = client.interactions.create(
    model="gemini-3.7-flash",
    input="API接続テスト成功、とだけ回答してください。",
)

print(interaction.output_text)

 

 Anthropic Claude

# pip install anthropic
import anthropic

client = anthropic.Anthropic()

message = client.messages.create(
    model="claude-opus-5",
    max_tokens=1000,
    messages=[
        {"role": "user", "content": "API接続テスト成功、とだけ回答してください。"}
    ],
)

print(message.content[0].text)

 

 並べて見ると、違うのは名前だけ

OpenAI Google Gemini Anthropic Claude
① SDK openai google-genai anthropic
 環境変数 OPENAI_API_KEY GEMINI_API_KEY ANTHROPIC_API_KEY
② クライアント OpenAI() genai.Client() anthropic.Anthropic()
③ 送信 responses.create() interactions.create() messages.create()
④ 取り出し .output_text .output_text .content[0].text

3社とも ①SDKを読み込む → ②クライアントを作る → ③送る → ④取り出す の順序は同じです。環境変数からAPIキーを自動で読む挙動も共通しています。

違いは細部だけです。

  • Claudeは max_tokens の指定が必須
  • Claudeは入力を messages というリストで渡し、取り出しも content のリストから行う(回答が複数の部品に分かれて返る設計のため)
  • OpenAIとGeminiは、どちらも input= で渡して .output_text で取り出せる

1つのサービスで書けるようになれば、他社へ移るときに覚え直すのは名前だけです。これが、この記事で共通構造を優先した理由です。

各サービスの詳細な使い方は、後続の記事でそれぞれ扱います。
 

動かないときの切り分け

最初の1回が通らないことは珍しくありません。原因を当てずっぽうで探すより、エラーメッセージの最初の行を見るのが近道です。
 

 エラーメッセージ別の対処

症状 よくある原因 確認すること
401 / Authentication キーの入力ミス、無効化済みのキー 余計な空白が入っていないか。キーを再発行して試す
429 / Rate limit 利用枠の上限、課金設定が未完了 API Platform の Billing / Usage / Rate limits
モデル名エラー モデルの改名・廃止 公式のモデル一覧で、いま使える名前を確認する
ModuleNotFoundError SDK未インストール、別環境で実行 次の「実行環境による違い」を確認
エラーが出ない・固まる セルの実行順 SDKの導入とキーの読み込みを先に実行したか

APIキーそのものを print() して確認するのは避けてください。 設定されているかどうかを確かめたいだけなら、長さと先頭数文字で十分です。

import os

key = os.environ.get("OPENAI_API_KEY", "")
print(f"設定済み: {bool(key)} / 長さ: {len(key)} / 先頭: {key[:7]}")

 
なお、再試行や利用制限への本格的な対処は、後続の記事で扱います。今回はエラー処理コードまでは書きません。
 

 実行環境による違い

つまずきの多くは、コードではなく実行環境が原因です。

Google Colab Jupyter Notebook ローカル(ターミナル)
SDKの導入 !pip install openai !pip install openai pip install openai
キーの入力 getpass() getpass() 環境変数に設定
セッションが切れると SDKもキーも消える キーが消える 残る
よくあるつまずき ランタイム再接続で最初からやり直し 別のPython環境に入れてしまう シェルを開き直すと環境変数が消える

 

inputを変えるだけで、データ分析の入口になる

接続が確認できたら、input だけを変えてみましょう。売上データの一部を、直接文字列として渡してみます。

response = client.responses.create(
    model="gpt-5.6-luna",
    input="""
次の売上情報を、追加計算をせず、
与えられた数値をそのまま使って1文で要約してください。

土曜日:51,590円
日曜日:47,010円
""",
)

print(response.output_text)

 

週末の売上は、土曜日が51,590円、日曜日が47,010円でした。

 
回答文は毎回まったく同じになるとは限りません。ここで確認したいのは次の点です。

Pythonの変数やデータを input に組み込めば、生成AIへ自動で渡せる

今回のコードでやったのは、次の文字列を input に入れただけです。

土曜日:51,590円
日曜日:47,010円

CSVそのものをアップロードしたわけではありません。実務では、次のような形になります。

CSV
  ↓
pandasで集計
  ↓
必要な結果だけを文字列にする
  ↓
APIへ送信

つまり Pythonが計算し、その結果を生成AIへ説明させる という設計です。長いCSVをそのまま生成AIへ渡して計算させるより、処理内容を確認しやすくなります。前回の記事で見た「計算はPython、説明は生成AI」が、コードのレベルではこう表れます。
 

APIキーと送信データの扱い

最後に、実際に使い始める前の注意点をまとめておきます。
 

 APIキーは書き残さない

APIキーは、次のような場所には書かないでください。

  • ブログ記事
  • GitHubの公開リポジトリ
  • 共有するNotebook
  • メールやチャット
  • スクリーンショット

特に、次のようにコードへ直接書く方法は避けます。

# これは避ける
client = OpenAI(
    api_key="sk-xxxxxxxxxxxxxxxx"
)

 
Notebookへ直接書くのも同様です。共有したりGitHubへアップロードしたときに、キーが漏れる可能性があるからです。今回 getpass() でその場入力にしたのは、この理由によります。
 

 APIへ送るデータについて

OpenAIのAPI Platformでは、2026年9月2日時点で、APIへ送った入力と出力は、明示的にオプトインしない限りモデル学習にはデフォルトで使用されません。

ただし「APIなら何でも送ってよい」という意味ではありません。業務利用では、次のようなものが含まれていないかを確認します。

  • 個人情報・顧客情報
  • 社外秘データ
  • APIキーやパスワード
  • 契約上、外部送信できない情報

データ保持や企業向けのプライバシー条件は、実際の業務導入時に公式情報で確認してください。最初の練習には、今回のような架空の数値を使うのが安全です。

APIキーを安全に管理する具体的な方法は、次の2記事で扱います。
 

まとめ

今回はPythonから生成AI APIを1回だけ呼び出しました。手順は4つです。

  1. APIキーを作る
  2. Python SDKをインストールする
  3. APIキーを読み込む
  4. APIへ質問を送り、回答テキストを取り出す

重要なのは、コードを暗記することではありません。

認証して、入力を送り、回答を受け取る

という構造を理解することです。OpenAIでもGeminiでもClaudeでも、具体的な書き方は違いますが、この考え方は共通しています。

次に進む前に、以下を確認しておいてください。

  • APIキーを作った
  • SDKをインストールした
  • 接続テストが1回通った
  • response.usage で使用トークン数を確認した
  • キーをコードに直接書いていない

これが動けば、生成AIをPythonプログラムの中へ組み込む第一歩は完了です。次に必要になるのは、APIキーを安全に扱う方法です。