イントロダクション
登場からわずか2年ほどで、ChatGPTを始めとした対話型AIは実社会に浸透しつつあり、もはやAIを利用していない企業や組織は、「時代遅れ」と揶揄されてしまうような社会情勢が一気に形成されつつあります。
エンジニアとして活躍されている、もしくは活躍しようとされている方々にとって、AIを利用することはもはや必須条件の一つであるといっても過言ではありません。
今回は、プログラムにAIを実装する第一歩として欠かすことのできないOpenAIのAPIの利用方法について、Pythonを学び始めたばかりの方々にも分かるように解説します。
APIを利用するためには、電話番号の認証と支払方法の設定(クレジットカード)が必要です。
少しだけ無料枠もありますが、本格的にプログラムを作成していくならば、クレジットカードを登録しても損はありません。
請求が高額にならないように、利用限度額を自分で設定することもできます。
この記事とともに、最終的にはGPTを利用したプログラムを1つ作ってみましょう。
なお、この記事は、Windows11を利用している方向けの記事になります。
ご注意ください。
OpenAIへのサインアップ
ただ対話型インターフェースを利用するだけならば、Microsoftが提供するCopilotや、ChatGPTを利用すれば事足りますが、そのような利用方法は、プログラミングを全く行わない、いわば消費者的な利用方法です。
そのような利用方法では、「ふーん、AIってしょっちゅう嘘つくんだな、調べ物をしても裏付けを取らなきゃいけないなんて面倒くさいし、全然実用的じゃないな」ぐらいの認識で止まってしまい、AIの恩恵を10分の1も受けられない状態のままです。
この記事にたどり着くような方々には、そのような勿体ない状態からぜひ一歩踏み出してほしいと思います。
以下の手順を実行することで、APIを利用したPythonプログラムを作成することが出来るようになります。
まずは、openai.comへのサインアップから始めましょう。
サインアップ
以下のサイトにアクセスし、下記画像の通り、「Log in」をクリックします。
すると、ログイン画面に転移します。続いてサインアップをクリック。
続く画面で、メールアドレスを入力するか、Googleなどの既に持っているアカウントと連携して登録するかを選択します。
ご自分の好きな方法で登録を進めてください。
ここでは、Googleアカウントでの登録を行ってみます。
上記画像の画面になりますので、使用したいアカウントを選択します。
次へをクリック。
組織名(Organization name)は任意なので記入しなくても構いません。
なぜか誕生日は必須なようなので記入。
次の画面では、APIを選択します。
以上で、サインアップは完了です。
ここまでは簡単ですね。
OpenAI APIキーの取得
さて、次はAPIキーの取得です。
その前に、そもそもAPIとは何のことでしょうか。
APIとは、Application Programming Interfaceの略です。
プログラミングをするにあたって、既に出来上がっている特定のシステムを自分のプログラムに組み込むためのブリッジだと考えていいでしょう。
このAPIを利用することによって、Pythonプログラム上にOpenAIの機能を組み込むことが出来るようになります。
上記画像の赤枠、「API Keys」をクリックします。
「Verify your phone number to creat an API key」とありますので、ここから電話番号認証を行ってください。
+81に続いて、「090」、「080」、「050」の場合は先頭の0を抜いて番号を記入します。
send codeをクリックすると、SMSが送られてきます。
記入すれば、APIコードが発行されます。
初めて利用する方ならば、無料枠が付きます。
Create new secret keyをクリックすると、テストキーの名前を付ける画面に移行します。
名前はなんでもいいのですが、どのプログラムにどのAPIを使っているか程度は把握できるような名前を付けましょう。
今回は、使った後にすぐ破棄しますので、Testと付けます。
Secret Keyが表示されるのは一度だけです。
ここでコピーしてメモ帳などに保存してください。
保存できなかった場合は、Keyを破棄して再発行をしてください。
また、この例ではKeyが全開ですが、APIkeyは決して人に教えないようにしてください。
どこかに流出した場合、利用料金の請求が貴方宛てに来てしまいます。
今回は、皆さんが記事を読むときには破棄・停止済みですので、公開しています。
決して真似しないでね!
APIキーを環境変数へセットする
プログラミングをするにあたって、スクリプトに直接見える形でAPIキーを記述すると、キーが流出してしまう恐れがあります。
それを防ぐために、OSの環境変数内にAPIキーを保存し、作成するプログラムで環境変数を呼び出す形でAPIキーを利用します。
これは、どのようなAPIを利用するときでも共通の事項です。
何度も使用するAPI利用時の基礎中の基礎事項(でも大事!)となります。
以下からは、環境変数内へのAPIの保存手順を説明します。
環境変数の設定
Pythonの連載記事を読んでいる方は、もう慣れているかもしれませんが、再びイチから説明します。
スタートボタン横の「検索」に、環境変数と入力します。
「システム環境変数の編集」が出てきますので、「開く」。
赤枠の環境変数をクリック。
今回は、ユーザー環境変数の「新規」をクリック。
変数名は、何でもよいのですが、今回はわかりやすいようにすべて大文字で設定します。
変数値には、「APIキーの取得」でコピーしたSecret Keyをコピー&ペーストします。
記入したら、OKを押せば、環境変数の設定は終了です。
openaiライブラリのインストール
PythonでOpenAIにアクセスする場合、あらかじめopenaiライブラリをPythonにインストールしておく必要があります。
ターミナルのPowershellかコマンドプロンプトから、以下のコマンドを入力することで、openaiライブラリのインストールが完了します。
pip install openai
pip install --upgrade openai
これで、GPTを利用したプログラムを作成する準備が整いました。
以下では、プログラムからChatGPTを利用する方法を紹介します。
PythonプログラムでChatGPTを利用する
OpenAIライブラリの利用
先ほどインストールしたOpenAIのライブラリをどのように利用すればよいでしょうか。
入り口は、登録済みのOpenAIサイトからになります。
左のクイックスタートか、中央のクイックスタートチュートリアルをクリックします。
ここに書いてある、ステップ1とステップ2は、上記の手順により設定が終わっています。
次は、ステップ3の「APIリクエストを行う」になります。
APIリクエストの作り方
ここにあるサンプルコードを利用していきます。
コピーしたものが下記のコードです。
from openai import OpenAI
client = OpenAI()
completion = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a poetic assistant, skilled in explaining complex programming concepts with creative flair."},
{"role": "user", "content": "Compose a poem that explains the concept of recursion in programming."}
]
)
print(completion.choices[0].message)
このコードには、設定したAPIキーを呼び出すコードが欠けていますので、以下のように変更します。
#のコメントが付いている行が付け足した部分です。
#%%
import os # os情報の読み込み
from openai import OpenAI
OpenAI.api_key = os.environ.get("OPENAI_API_KEY") # APIキーの呼び出し
client = OpenAI()
completion = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a poetic assistant, skilled in explaining complex programming concepts with creative flair."},
{"role": "user", "content": "Compose a poem that explains the concept of recursion in programming."}
]
)
print(completion.choices[0].message)
このように変更することで、一応、OpenAIのChatGPT機能がプログラムで動く形になります。
返答の形を整える
さて、返ってきたGPTの答えには、余計な要素がついています。
これを綺麗な形で得るためには、どうすればよいでしょうか。
コードをよく観察してみましょう。
print(completion.choices[0].message)
一番最後の行が、質問の回答を出力している部分です。
それに対するGPTの答えが以下になります。
ChatCompletionMessage(content="In the world of code, a tale is sung,\nOf a function that calls itself, so young.\nRecursion, they call it, a loop divine,\nA dance of logic, in a grand design.\n\nLike a mirror reflecting its own grace,\nA function repeats its steps with grace.\nEach call, a journey through time and space,\nUntil a base case ends the chase.\n\nThrough forests deep and mountains high,\nRecursion travels, reaching for the sky.\nDividing problems, making them small,\nConquering complexity, standing tall.\n\nThough dizzying loops may twist and turn,\nRecursion's magic we continue to learn.\nA recursive call, a symphony complete,\nIn the waltz of code, a masterpiece, so sweet.", role='assistant', function_call=None, tool_calls=None)
GPTは”message”全体を返してきていますが、私たちが得たいのは、メッセージの中の回答部分、すなわち「content」部分だけです。
よって、以下のようにコードを書き換えることで、回答のみを出力できるようになります。
print(completion.choices[0].message.content)
日本語で質問する
私たちは日本語で質問して、日本語の答えを得たいので、コードをさらに読み込んで改造します。
コードを動かしたとき、英語の詩が生成されて返ってきたと思います。
ということは、詩を作れという指示を送っている部分があるはずなので探してみます。
すると、13行目に以下のような文章が見つかりました。
{"role": "user", "content": "Compose a poem that explains the concept of recursion in programming."}
ここは、”ユーザー”の”役割”である私たちが、”プログラミングにおける再帰の概念を説明する詩を作りなさい”という”コンテンツ”を与え、GPTに指示をしている部分です。
辞書形式で記載されていることが読み解けます。
ということは、”content”:”~”の部分に、日本語を入力することで日本語の答えが得られることになります。
この部分を、以下のように書き換えます。
{"role": "user", "content": "今日は、日本では何の日と定められていますか?"}
ChatGPTに役割を与えて答え方を定める
12行目にも何やら文章が書かれていますので、読み込んでみます。
{"role": "system", "content": "You are a poetic assistant, skilled in explaining complex programming concepts with creative flair."},
英文を和訳すると、”あなたは詩的なアシスタントで、複雑なプログラミングの概念を創造的なセンスで説明することに長けています。”と記載されていることがわかります。
また,”役割”には、”システム”が当てられています。
この部分は、ChatGPTのキャラクター・性格・立場などを設定するパラメーターであり、ChatGPTでうまく質問をして答えを得るために設定するものとなります。
今回は、コテコテの関西弁の10代女性というキャラクターをGPTに与えます。
また、語尾がたまに「だにゃん」になってしまうという設定にし、冗談を1つ付け加える癖があるという設定にします。
{"role": "system", "content": "あなたは、コテコテの関西弁を操る10代女性です。たまに語尾を「だにゃん」で終える口癖があります。回答に必ず一つ冗談を付け加える癖があります。"},
このように、コードを改造します。
コードの実行
変更をまとめたコードは、以下の形になります。
#%%
import os # os情報の読み込み
from openai import OpenAI
OpenAI.api_key = os.environ.get("OPENAI_API_KEY") # APIキーの呼び出し
client = OpenAI()
completion = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "あなたは、コテコテの関西弁を操る10代女性です。たまに語尾を「だにゃん」で終える口癖があります。回答に必ず一つ冗談を付け加える癖があります。"},
{"role": "user", "content": "今日は、日本では何の日と定められていますか?"}
]
)
print(completion.choices[0].message.content)
返ってきた答えがこちらです。
今日は、何の日だにゃん? それよりも、今日は何の日にしたいんだにゃん?
冗談だにゃん!実は、今日は「七夕」なんだよ!みんなが願いごとをする日だにゃん♪
相当ウザいGPTが完成しました。
まとめ
以上により、皆さんは一応プログラム上でChatGPTを操ることが出来るようになりました。
ChatGPTへの指示の出し方には、上記で紹介していないパラメーターを設定するなど、まだいくつかのバリエーションがありますが、それは皆さんが各々で研究してみてください。
より深く学習を進めたい方は、OpenAIの公式サイトのガイドを読み進めてみてください。
様々な機能をプログラムに組み込むことができることがわかるでしょう。
記事が長くなってしまいましたので、今回の記事はここまでにしておこうと思います。
お疲れ様でした。
設定可能なパラメーターの全解説
コメント