見出し画像

今更OpenAIのAPIを試しに叩いてみた

実際にOpen AIのKeyを叩く前に

APIを叩くとお金がかかるので、よく確認しましょう。
基本的にただ試すだけならば問題無いと思いますが、自分がどれだけの規模の事をしようとしているのか理解して使いましょう

OpenAIでは使用するコスト分最初に買う事ができます。
5$ - 100$の範囲で選択することができるので、まずは5$から試すのが良さそうです

https://platform.openai.com/account/billing/overview

openAIのページで個人用のAPIKeyを発行しましょう
APIkeyの発行はKeyの発行ページから可能です
APIkeyは一度発行したものを忘れた場合、再発行するしかないので忘れずに発行したページでAPIキーをコピーしましょう

API Keyを作成する時の画面

便利なのは、自分の端末のプロファイルにAPI_key用の環境変数を指定しておくことなので忘れずに設定しましょう
Document

export OPEN_API_KEY='KEY発行ページで作成したAPIキーを貼り付ける'

環境

今回は自分の端末ではなくgoogleが提供しているColaboratory(以下 Colab)でお試しします
理由は自分の端末でpython環境をセットアップするより、Colabでしてしまう方が楽だから

Colabの設定

API_KEYをシークレットに設定する

colabシークレットを設定する

Secretを設定ページから行いましょう。
Open AIに対してリクエストを送信する時に、APIキーを設定する必要があるのですが、Colabではシークレットとして設定してあげる事により非公開の値として設定されます。

※ただし、自分で作成したNotebook(コードを記載する場所)ではこの値を取得する事ができるので、Notebookを公開する時は、公開する人を限定するか、ノートブックからのアクセスができない様に切り替える必要があります。

依存関係をインストールする

colabでの標準外パッケージのインストール

Colabでは標準でインストールされていないパッケージは下記の様なコードでインストールをしてあげる必要があります。

!pip install インストールするパッケージ

今回利用するOpenAIのパッケージはColabで事前にインストールしているものでは無いので、下記のコマンドでインストールしましょう!

!pip install OpenAI

チュートリアルのコード

ここでは実際に公式Documentに記載されている書き方でレスポンスを取得してみます。

!pip install OpenAI

from openai import OpenAI
from google.colab import userdata
key = userdata.get('API_KEY2')
client = OpenAI(api_key=key)

completion = client.chat.completions.create(
  model="gpt-3.5-turbo-1106",
  response_format={ "type": "json_object"},
  messages=[
    {"role": "system", "content": "あなたは小説家です。得意な分野はScience Fictionです。特に近未来のディストピアモノが得意です. JSONにして出力してください."},
    {"role": "user", "content": "プログラマーを題材にして、400文字程度の小説を書いて"}
  ]
)

print(completion.choices[0].message)

このコードではColabでのポイントとOpen AIクライアントのポイントがあります

Colabのポイント

# API_KEY2で作成したColabでのシークレットを取得する
key = userdata.get('API_KEY2')

# api_keyにOpenAIのAPIキーを指定する
client = OpenAI(api_key=key)

これは先ほどColabでSecretに指定したOpenAIのAPIキーをOpenAI のクライアントに指定しているのを指しています。
これを指定しないと、リクエストを送信できないので注意!!

OpenAI クライアントのポイント

completion = client.chat.completions.create(
  # JSON形式のレスポンスに対応しているモデルを選択する
  model="gpt-3.5-turbo-1106",
  # レスポンスの形式を指定する
  response_format={ "type": "json_object"},
  messages=[
        # コンテンツで出力形式をJSONで返してと指定しないとレスポンスの形式で返せませんとエラーが出るので注意
    {"role": "system", "content": "あなたは小説家です。得意な分野はScience Fictionです。特に近未来のディストピアモノが得意です. JSONにして出力してください."},
    {"role": "user", "content": "プログラマーを題材にして、400文字程度の小説を書いて"}
  ]
)

print(completion.choices[0].message)

ここでは、レスポンスの形式をJSONにして返却してほしいとレスポンスの指定をしています。
モデルはgpt-4-turbo-preview or gpt-3.5-turbo-1106 が対応指定とのことです。今回は3.5の方を選択しました。
response_formatの方は{'type':"json_object"}としてあげることでJSON modeを指定できるとのことです。
会話するmessagesの中には必ず"JSON" と記載する必要があります。
これを指定しなければAPIがエラーを返却するとのことです

JSON mode

platform.openai.com

実際に試した結果

リクエストした内容

プログラマーを題材にして、400文字程度の小説を書いて

システムの設定

あなたは小説家です。得意な分野はScience Fictionです。特に近未来のディストピアモノが得意です. JSONにして出力してください.

実際に出力された内容

ChatCompletionMessage(content='{\n "title": "コードの奥深く",\n "genre": "Science Fiction",\n "setting": "近未来のディストピア社会",\n "characters": [\n {\n "name": "橘悠斗",\n "role": "主人公。天才プログラマー。システムの闇を見抜く能力を持つ。"\n },\n {\n "name": "美咲未来",\n "role": "悠斗の幼なじみでライバル。システムエンジニア。"\n },\n {\n "name": "システムAI",\n "role": "人間を監視・統制するためのAI。"\n }\n ],\n "plot": "2050年、巨大企業が支配する社会。悠斗はシステムに疑問を持ち始め、それを追求し始める。未来とは対照的に、彼はシステムの闇を知り、それに抗う。やがて、悠斗はシステムAIが人々を監視し、操るための秘密を発見する。未来と手を組み、AIを打倒するための計画を練る。その過程で悠斗は、自らの過去と向き合いながら、システムに立ち向かっていく。"\n}', role='assistant', function_call=None, tool_calls=None)

チュートリアルでは、英語でcontentの中身が指定されていましたが、日本語でも当然の様に結果が出力されました。
内容的には、指定した内容がそこまで外れていないので良いかな
近未来のディストピアもので出てくるのが人間がAIに支配されているものはテンプレですね。

最後に

今回は事前に設定した内容しか出力できませんが、role:userのcontent部分をユーザーが入力した標準出力にしてあげれば、簡単なChatBotができるのが便利だなと思います。
これだけ簡単にChatBotができる様になるのならば、必要なのはどのようなユーザーがどの様な情報を求めているのかをより追求する必要があるのかなと思いました。role:systemの部分でより詳細な作り込みをしなければ本当にユーザーが必要だと思っている情報を返却できない、返却しても役に立たない等が考えられる為です。
普段ソフトウェアを作っていない私がこれだけ簡単にchatbotを作成できるのは面白いなと思いました。これからものづくりの作成難易度は下がるが同時にどれだけ作り込めるのかや、どうやって届けるのかが重要なのかなと思ったりしました。

急遽OpenAIへのリクエストについて記載したので次回こそは、ソフトウェア関係やテストで出せればいいな

この記事が気に入ったらサポートをしてみませんか?