ざっくりとしたChatGPT APIの開発方法 – とりあえず動かしてみよう

先日の記事では、ChatGPTのAPIキー取得方法についてご紹介しました。
今回は早速そのAPIキーを使って、プログラムを作ってみましょう!
記事内では実際の作り方だけでなく、気をつけるべき点等も掲載します。

(なおpythonの使い方まで説明するとそれだけですごい分量になるので、今回は『とにかく動かす』を目的にざっくりと書きます)

目次

サービスとAPIのシーケンス図

基本的な流れはこんな感じなります。

今回はpythonのコードをご紹介しますが、HTTPリクエストさえ使えればphpでもNode.jsでもGoでも大丈夫です。
おおよそ他のAPIと利用方法は変わりません。

なお『回答からjsonを抽出』といった工程も図には書かれていますが、今回はとにかくAPIへリクエストを送ってみる、といった形にしているためこの箇所は割愛します。

pythonで実行する前の準備

早速動かしてみたいと思いますが、先にライブラリをインストールする必要があります。
(windowsなら)コマンドプロンプトを立ち上げて、以下のように入力しましょう。

pip install openai

更に、ChatGPT APIのAPI keyと、
Organization IDというのを手元に用意しておいてください。

Organization IDは、ChatGPT内のORGANIZATION > Settingsページ内に記載されています。

これで準備は完了です。

基本の型

早速作ってみましょう。
基本の型は以下のようになります。

import openai

openai.organization = "Organization IDをここに入れる"
openai.api_key = "API keyをここに入れる"

response = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[
        {"role": "system", "content": "ChatGPTの役割を指定する"},
        {"role": "user", "content": "リクエスト本文"},
        {"role": "assistant", "content": "補足説明を記載(使わなくてもOK)"},
    ],
)

print(response['choices'][0]['message']['content'])

コードの解説

以降、解説していきます。

序盤

openai.organization = "Organization IDをここに入れる"
openai.api_key = "API keyをここに入れる"

ここは先程用意してもらったOrganization IDとAPI keyを入れてください。

個人で使う分にはそのまま入れて大丈夫ですが、セキュリティのことを考えれば環境変数にしたほうがいいので、このままネット上にアップしないようにしてください。

    model="gpt-3.5-turbo",

これはChatGPTで使用するmodelになります。
基本的に『gpt-3.5-turbo』で構いません。

なお余談ですが、GPT-4にコードを書いてもらった際『model=”gpt-4.0-turbo”』と書かれている場合がありますが、GPT-4はAPI waitlistから申し込んだ上で、招待されなければ使うことが出来ません。注意しましょう。

roleについて – system

 {"role": "system", "content": "ChatGPTの役割を指定する"},

ここから【role】と【content】を指定していくコードが続きます。

【role】には3タイプあります。system、user、assistantの3つです。

最初のsystemですが、これはAIに対して『何の役割を持つAIなのか』というのを指定する部分です。

例えば

  • あなたは営業メールと日程の候補一覧を作成するAIです。
  • あなたは30分以内に作れる夕飯メニューを生成するAIです。
  • あなたは有名な文学作品を1分でわかるように説明するAIです。

といった感じです。

ちなみにですが、『あなたは質問を英語に翻訳するAIです。回答はしません』と入れると、質問をそのまま英語にして返すだけのAIとなります。

roleについて – user

{"role": "user", "content": "リクエスト本文"},

次にuserです。ここにはユーザーが質問したい部分を入力します。
一番質問の核になる部分ですね。

サンプルとして、以下のように入れてみます。

{"role": "user", "content": "豚肉とネギを使ったメニューを箇条書き形式でほしい。"},

roleについて – assistant

このassistantというroleについてですが、
役割としては『前回のやり取りを参照させる』『望ましい動作の例を提示する』といった部分になります。
例えば、企業が『よくある質問』のチャットボットを作る場合等は、ここに解答例を入れておくといった使い方をします。

ただ、この記事を読んでいる方はまだChatGPT APIに触り始めたばかりかと思うので、ひとまず簡単なやり取りをさせるだけならばassistantの項目は必要ありません。

末尾の出力部分

print(response['choices'][0]['message']['content'])

APIから返ってくるデータには色々なメタデータも含まれており、もちろん全部表示させても良いのですが、その場合は時々文字化けのようになることもあります。

このコードは、APIより返ってきたデータから、回答部分だけを抽出して表示するよう指示しています。
実際にアプリを作る際には、ここで加工してjsonにしたり、他のAPIに投げたりします。

サンプルプログラム

上記のような点を踏まえて、プログラムを書くと以下のようなサンプルが出来上がります。

import openai

openai.organization = "Organization IDをここに入れる"
openai.api_key = "API keyをここに入れる"

response = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[
        {"role": "system", "content": "あなたは30分以内に作れる夕飯メニューを生成するAIです。"},
        {"role": "user", "content": "豚肉とネギを使ったメニューを箇条書き形式でほしい。"},
    ],
)

print(response['choices'][0]['message']['content'])

これを実行してみると、以下のような返答が返ってきます。

豚肉とネギを使ったメニューの例をいくつか挙げます。

- ネギ塩豚丼:豚肉・ネギ・塩・砂糖・酒・醤油・ご飯を使用。豚肉を炒め、調味料で味付け、ネギを加えてご飯の上に盛り付けます。
- 豚肉とネギの炒め物:豚肉・ネギ・にんにく・酒・醤油・砂糖・塩胡椒を使用。豚肉を炒め、ネギを加えて調味料で味付けます。
- ネギ焼き豚丼:豚肉・ネギ・ごま油・酒・醤油・砂糖・ご飯を使用。豚肉を炒め、ネギを加え、調味料で味付けしてご飯の上に盛り付けます。
- 豚肉とネギの味噌汁:豚肉・ネギ・味噌・だし汁・水・もやしを使用。豚肉とネギを煮込み、味噌を加え、もやしを加えて煮込みます。

以上が、豚肉とネギを使ったメニューの一例です。材料や調味料を見ながら、30分以内に作れるレシピを選んでみてください。

もし上記のような表示がされた方は、おめでとうございます!ChatGPT APIを動かすことが出来ました。

なお、下記のようなエラーが表示されることもあります。

You exceeded your current quota, please check your plan and billing details.

もしまだChatGPT APIを使ったことがないのであれば、支払い情報の登録が済んでない or うまく行っていないようです。
支払い情報ページを確認してみて下さい。

openai.error.RateLimitError: That model is currently overloaded with other requests. You can retry your request, or contact us through our help center at help.openai.com if the error persists. 

APIの負荷が高くなっているときに表示されます。
上記のようなプログラム程度なら、それだけで負荷が高くなることは考えにくいため、落ち着いてもう1回実行しましょう。

更にAPIを使っていく上でのアドバイス

さてAPIの使い方を身に着けたあなたは、これから実際にプログラムを作っていくかと思いますが、その上でのアドバイスをいくつか記載します。

可能なら英語で指示する

今回はわかりやすくするため日本語で指示を書いていますが、
ChatGPTは英語で指示したほうが、高い精度の回答を引き出すことが出来ます。

ただし、英語の質問には英語で回答を出してくるため、role:”user”の中に『Please answer in Japanese.』と書いておきましょう。返答が日本語になります。
もちろん英語で回答されても構わない場合は、入れなくとも構いません。

欲しい情報を丁寧に指示する

今回のようにテキストをただ読む場合なら問題ありませんが、
実際にアプリを作る場合は、返ってきたデータを更に加工することとなります。ChatGPTは優秀ですが、優秀であるが故に望みのものを返してくれるとは限りません。

例えばとあるエリアの、賃貸マンションに関するデータを出してもらったとしましょう。
ここで『賃料』を抽出した場合、きちんと数字を取ることは出来るのですが、
実際に取り出したデータを見てみると『共益費や管理費が含まれたデータ』と『含まれないデータ』が混在してしまっています。

なお、解決方法は単純です。
『合計値を出して』と丁寧に指示すれば、しっかり合計した数値を出してくれます。

しかしChatGPTは『勝手に気を使う』といったことがまだ出来ません。
コードを書く際、そういった丁寧さを忘れないようにしてください。

レスポンスフォーマットを指定する

また、ChatGPTはChatをするAIであるため、基本的に会話形式で返答を出してきます。
なので『こういうデータをください』とリクエストしても、データ本体だけでなく、『わかりました、お望みのデータをご用意しました』といった言葉を返してきます。
これでは処理をするのに色々と邪魔ですね。

一応『json形式で出力してください』等、フォーマットを指定すればある程度は整形してくれるので、そういった指示は必ず行いましょう。

ただし、それだけでは言うことを聞いてくれないケースもあります。
いずれこのあたりを整備したAIもでてくるでしょうが、今のところは皆工夫で乗り切っているようです。

例えば、『role』の『assistant』内に、完璧なjson形式で書かれた回答を用意し、その続きを回答させる、といった手法があります。
また、回答の中からjson部分のみを抽出したり、予めjson部分だけを出力するようChatGPTに指示するといった手法も使えます。

このような工夫はいずれ必要なくなるかもしれませんが、現時点では非常に有用なテクニックです。

レスポンスされるデータ型を指定する。(int, float, strなど)

これも上記と同じようなものです。
int(整数)、float(浮動小数点数)、str(文字列)等の指定をしっかり行いましょう。

ちなみに漢数字をアラビア数字に直したり(5.5万→55,000)、和暦を西暦に直したり(令和5年→2023)といったことも頼めばやってくれますが、
色々試していたところ『704万3百』を『7,043,000』、『令和7年』を『2026年』と変換していました。(正確には2025年)

このあたりはAPIやコンバータ等も公開されているので、そちらを使ったほうが正確かもしれません。

ワード揺れも伝える

スクレイピング等の経験がある方には分かるかもしれませんが、データ…特に日本語のデータは同義語・類義語で溢れています。

例えば求人情報の整理をChatGPTに手伝ってもらったとします。
『給与を抜き出して』と指示を出せば、異なるフォーマットで書かれた求人情報でも、ある程度は抜き出してくれるでしょう。

しかし『給与』と書かれておらず『時給』とか『報酬』『賃金』『俸給』といった表記で書かれているかもしれません。
もちろん、そこも見越して取得してくれる能力がChatGPTにはありますが、少しでも精度を高めたいと思うのであれば、そういった表記ゆれも含めて指示を出したほうが良いと思います。

開発におすすめなクラウドサービス

更にChatGPT APIを使って開発をゴリゴリ行う場合、クラウドサーバの利用も検討してみてください。
もしあなたの作ったシステムを世に出す場合はクラウドサーバの利用が必要になるでしょうし、クラウドならではの使い方というのもあります。

ChatGPTのAPIを使う上で、お勧めなのは以下の3社です。

  • Amazon Web Services(AWS)
  • Google Cloud Platform(GCP)
  • Microsoft Azure

『AWS』は、世界で最も使われているクラウドサービスです。そのため多くのドキュメントや開発例がWEB上に公開されています。

『GCP』は、Googleが提供しているクラウドサービスですが、
GCPを利用する利点は、Googleのサービスと連携ができる点です。
例えばスプレッドシートにそのままデータを書き込ませたり、GoogleMapから情報を取得したり、といったことも比較的簡単に行うことが出来ます。

『Microsoft Azure』についてですが、なんといってもMicrosoftはOpenAIに多額の出資を行っている企業です。
すでに『Azure OpenAI Service』というサービスを展開しており、GPT-4も提供されています。(ただし、こちらも順番待ちのようです)
今後もAzureは、OpenAIのサービスに一番早く対応するクラウドサーバとなるでしょう。

AI開発の輪に加わろう

ChatGPTはたしかにすごい発明ですが、まだまだ『全てを自動で行ってくれる』状況には程遠いAIです。
しかし裏を返せば、そのような不完全なAIだからこそ、人間が工夫を凝らして活用する余地が残されているとも言えます。

プログラミング技術を学ぶことは今からでも有益です。
特に今はChatGPTの使い道について、世界中の人が試行錯誤している状況です。ある意味『一番楽しい時期』とも言えるでしょう。

ぜひこのAI開発の輪に加わっていただき、あなたのアイデアを形にしてみてください。世界中の人があなたの発想を心待ちにしています。

お問い合わせ&各種リンク

presented by 

  • システム開発、アプリ開発
  • マッチングアプリ開発
  • インフラ構築支援等、なんでもご相談ください。
よかったらシェアしてね!
  • URLをコピーしました!
目次