文章の要約や問い合わせへの回答、学習問題の作成など、AIを自分のアプリや業務に組み込みたい場面は増えています。OpenAI APIを使うと、プログラムからモデルに処理を依頼し、その結果を画面表示やデータ処理につなげられます。

ただし、回答を一度取得できることと、継続して運用できることは別です。この記事では、Pythonで文章を生成する基本手順から、APIキーの管理、料金、エラー処理までを整理します。

目次

1.OpenAI APIでできることを整理する

OpenAI APIは、アプリケーションからOpenAIのモデルや機能を利用するための仕組みです。文章を送って回答を受け取るほか、対応するモデルやAPIを選ぶことで、画像の分析や音声処理などにも利用できます。

例えば、学習支援アプリで解説の下書きを生成したり、問い合わせ文を分類したりする使い方が考えられます。ただし、必要な機能や利用できる入力形式はモデルによって異なるため、実装前に対応状況を確認してください。

活用例AIに依頼する処理アプリ側で行う処理
文章の要約要点を短くまとめる入力の受付、結果の表示
学習支援問題や解説の下書きを作る内容の確認、教材への反映
問い合わせ対応質問の分類、回答案の作成参照情報の提供、担当者への引き継ぎ
業務データの整理文章から必要な項目を抽出する値の検証、データベースへの保存

最初は、入出力が明確な処理を一つ選びましょう。「業務をすべて自動化する」より、「問い合わせ文から用件を一つ抽出する」のように範囲を絞ると、結果を確認しやすくなります。

💡 あわせて読みたい関連記事

AIとAPIを組み合わせることで、日々の開発業務をどれほど効率化できるのか。その具体的な設計図と実践ガイドをこちらで解説しています。

AIとAPIで開発の自由を掴む!生産性を劇的に高める実践ガイド 記事を読む →

2.APIキーを発行し、安全に管理する

APIを利用するには、OpenAIの開発者向けプラットフォームでプロジェクトや利用設定を確認し、APIキーを発行します。実行前に、支払い設定、利用可能なモデル、適用される制限も確認してください。

APIキーは、APIへのアクセスに使う秘密の認証情報です。アプリ利用者本人のログインを代わりに保証するものではないため、公開アプリでは利用者の認証や権限確認を別に実装します。

キーはソースコードに直接書かず、実行環境の環境変数やシークレット管理機能から読み込みます。ブラウザに配信するJavaScript、公開リポジトリ、画面のスクリーンショットなどに含めないようにしてください。

なお、.envファイルと環境変数は同じものではありません。.envに書いた値を使う場合は、ライブラリや実行環境による読み込みが必要です。今回の例では、ターミナルで環境変数を設定する方法を使います。

3.PythonからResponses APIを呼び出す

新しく開発を始める場合、OpenAIはResponses APIを推奨しています。従来のChat Completions APIも引き続きサポートされていますが、入力の指定方法や回答の取り出し方が異なるため、コードを混在させないようにしましょう。

公式ライブラリをインストールする

Pythonを利用できる環境で、次のコマンドを実行します。既存の開発環境への影響を避けたい場合は、プロジェクト用の仮想環境を作成してからインストールしてください。

python -m pip install --upgrade openai

APIキーを環境変数に設定する

macOSやLinuxのターミナルでは、次のように設定します。YOUR_API_KEYは、自分で発行したAPIキーに置き換えてください。

export OPENAI_API_KEY="YOUR_API_KEY"

WindowsのPowerShellでは、次のように設定できます。こちらは現在のPowerShellセッションに対する設定です。

$env:OPENAI_API_KEY="YOUR_API_KEY"

設定後は、同じターミナルからPythonを実行します。公式SDKは、環境変数OPENAI_API_KEYからAPIキーを読み込みます。

文章を生成する

次のコードをexample.pyとして保存します。ここでは元の記事と同じgpt-4oを例に使いますが、最新・最安のモデルという意味ではありません。利用可能かどうかと料金を、実行前に確認してください。

from openai import OpenAI

client = OpenAI()

response = client.responses.create(
    model="gpt-4o",
    instructions=(
        "あなたはプログラミングの学習支援アシスタントです。"
        "初心者向けに、専門用語を短く説明しながら回答してください。"
    ),
    input="APIを使う開発で、最初に確認することを3つ教えてください。",
    max_output_tokens=800,
    store=False,
)

if response.status != "completed":
    raise RuntimeError(
        f"回答が完了していません。状態: {response.status}"
    )

print(response.output_text)

保存したファイルのある場所で、次のコマンドを実行します。正常に完了すると、生成された文章がターミナルに表示されます。

python example.py

instructionsには回答方針、inputには今回の依頼を指定しています。max_output_tokensは生成に使うトークン数の上限であり、日本語の文字数を直接指定するものではありません。上限に達すると、回答が未完了になる場合があります。

store=Falseは、後から取得するためのレスポンス保存を無効にする指定です。ただし、この指定だけで、あらゆるログやデータの保持がなくなるわけではありません。業務データを扱う場合は、公式のデータ管理に関する説明も確認してください。

4.プロンプトは目的・条件・出力形式を具体的にする

プロンプトを改善するときは、役割を与えるだけでなく、何を達成したいかを明確にします。対象読者、参照する情報、出力の形式、情報が足りない場合の扱いを整理しましょう。

例えば、「分かりやすく説明して」だけでは、必要な詳しさが伝わりません。「高校生向けに、結論、理由、具体例の順で説明する」と指定すれば、確認する基準も作れます。

指定する内容例
目的問い合わせ文の用件を分類する
判断に使う情報提供した文章だけを参照する
出力形式分類名と短い理由を返す
不明な場合推測で補わず「判断できない」とする

一方、「思考過程をステップごとに書かせれば、必ず精度が上がる」とは限りません。特に推論モデルについては、OpenAIは簡潔で直接的な指示を推奨し、段階的な思考を求める指示は不要で、性能を損なう場合もあると説明しています。

プログラムで結果を処理する場合は、対応モデルでStructured Outputsを使い、出力の構造を指定する方法もあります。ただし、形式が正しくても内容に誤りはあり得るため、値の範囲や業務上の条件はアプリ側でも検証してください。

5.料金は入力・出力・追加機能を分けて考える

テキスト生成の料金は、単に入力と出力のトークン数を合計し、一つの単価を掛ける仕組みではありません。モデルごとに入力と出力の単価が異なり、キャッシュや処理方式によって適用される料金も変わります。

さらに、検索などのツールやファイル保存を利用すると、別の費用が発生する場合があります。モデル名や料金は更新されるため、実装時には公式料金表を確認してください。

小規模な検証でも、呼び出し回数、入力の長さ、出力の長さを記録しておくと、公開後の利用量を見積もる材料になります。同じ処理を何度も繰り返していないか、不要な会話履歴まで送っていないかも確認しましょう。

また、費用の通知と、リクエストを停止する制限は役割が異なります。管理画面の通知・制限設定を確認したうえで、公開アプリには利用者ごとの回数制限なども設けてください。

6.エラーは原因を確認して対処する

API呼び出しは、認証情報の誤り、入力の不備、通信障害、利用制限などで失敗します。すべてのエラーに同じ再試行処理を適用せず、返されたコードとメッセージを確認しましょう。

主なエラー確認する内容対応の考え方
400パラメーターや入力形式リクエストを修正する
401APIキーやアクセス設定認証情報・設定を確認する
429:レート制限短時間の呼び出し量待機し、回数を制限して再試行する
429:残高・利用上限残高や適用される制限設定や残高を確認する
500・503などサーバー側の一時的な問題状況を確認し、間隔を空けて再試行する

特に、429は必ずしも「少し待てば直る」という意味ではありません。残高不足や利用上限への到達は、繰り返し送信しても解消しないため、エラーの詳細に応じて対応を分けてください。

再試行する場合も、回数に上限を設けます。SDKの再試行設定とアプリ独自の処理が重複し、想定以上の回数を呼び出していないか確認しましょう。

7.公開時は、キーの保護と操作権限を分けて設計する

通常のAPIキーを使うWebアプリでは、ブラウザから自分のバックエンドに依頼を送り、バックエンドがOpenAI APIを呼び出す構成にします。APIキーはサーバー側に置き、ブラウザへ返すデータにも含めません。

ただし、キーを隠すだけで公開アプリの対策が完了するわけではありません。バックエンド側で利用者を確認し、送信できるデータ量や呼び出し回数、利用できる機能を制限します。

また、プロンプトインジェクションは、入力の中にモデルの動作を変えようとする指示が含まれる問題です。特定の記号や単語を削除する「サニタイズ」だけで、確実に防げるものではありません。

外部の文章を開発者側の指示へ直接組み込まず、処理対象のデータとして分けて渡します。加えて、AIが使える機能を限定し、メール送信やデータ削除などの操作には確認手順を設けるなど、複数の対策を組み合わせます。

8.小さな検証から運用へ進める

最初の動作確認が終わったら、正しく処理できる入力だけでなく、情報が足りない文章や長い文章、想定外の依頼でも試してください。回答内容、処理時間、費用を見ながら、用途に合うモデルと指示を選びます。

学習問題なら解答の正しさ、問い合わせ対応なら参照資料との一致、データ抽出なら必要な項目と値の妥当性など、確認する基準を具体的にします。モデルやプロンプトを変更した際にも、同じ例で比較できるようにしておきましょう。

OpenAI APIを活用する際は、文章を生成する処理に加えて、その結果を確認し、失敗したときに対処できる仕組みを作ることが大切です。まず一つの用途で動作を確かめ、確認できた範囲から機能を広げてください。

Learning Tools

記事を検索したい方はここから!

辞書から探す

本文中で気になった概念やキーワードを、辞書ページで一覧から確認できます。

辞書を見る