AI

実践入門「ChatGPT API」とは?

投稿日:2023年5月23日 更新日:

生成系AIの騎手として、ChatGPTの本格運用が始まりました。その画期的な動作に感動を覚えた人も多いと思います。

ChatGPTには、REST APIが公開されています。そのREST APIのPythonラッパーモジュール(openai)を使って、主な機能を簡単に解説します。

■ APIの課金設定

まず、ChatGPTのREST APIを使うには、支払いのための課金設定が必要です。これは、WebでChatGPTのGPT4モデルを使うため、「ChatGPT Plus」を有料で契約していたとしても関係なく、課金されます。

「ChatGPT Plus」の課金体系は、定額で20ドル/月ですが、APIの方は、設定するプロンプト文字数と返答されるレスポンスの文字数に比例した従量課金です。低額であり、上限を設定することができますので、金額としては、それほど神経質になる必要はないと思います。

1)OpenAIにSign Upします。Googleアカウントでログインできます。

2)APIを選択します。

3)右上のUpgadeをクリックします。

4)Set up paid accountをクリックします。

5)I’m am individualを選択します。

6)クレジットカード情報を入力します。

7)上限金額を設定します。

  

■ APIキーの作成

  APIを使うには、APIキーが必要となるため、作成します。

1)ログイン後、右上のアカウント名をクリックすると表示されるメニューからView API keysを選択します。

2)Create new secret keyをクリックし、APIキーを作成します。

■ 主な機能とサンプルコード

主な機能として、次の3つのサンプルコードを解説します。

1)Completion

一つの問から返答を生成する機能です。
temperatureパラメータで返答のばらつき(0に近いほど堅めの返答)を指定、max_tokenで返答文字数の上限を指定できます。

# -*- coding: utf-8 -*-
import sys
import os

# api key
KEY = 'sk-Efy6vVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV'

# REST API wrapper for OpenAI GPT-3 API
import openai

# set API key
openai.api_key = KEY

# call completion api
response = openai.Completion.create(
  model='text-davinci-003',  
  prompt='pythonでWebサーバにアクセスするコードを教えてほしい',
  temperature=0.2,
  max_tokens=2048
  )

# print response
print(response['choices'][0]['text'])

結果は、次のような文書です。

以下のコードを使用して、Webサーバにアクセスすることができます。

python
import requests

url = ‘http://example.com’

response = requests.get(url)

if response.status_code == 200:
print(‘Success!’)
else:
print(‘An error has occurred.’)


2)ChatCompletion

複数の問と返答が連続した文章から新たな返答を生成してくれる機能です。
APIに指定するプロンプト(messages)に、前の返答を追加しながら指定して、一連の会話から新しい返答を得ることができます。

messagesの役割(role)には、system、user、assitantの3つのどれかを指定し、あわせて、文章(content)を指定します。

  system   → ChatGPTに「誰なのか、何をする役割なのか」を教える
  user  → 質問をする
  assitant → 質問に対する返答を示す

# -*- coding: utf-8 -*-
import sys
import os

# api key
KEY = 'sk-Efy6vVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV'

# REST API wrapper for OpenAI GPT-3 API
import openai

# set API key
openai.api_key = KEY

# call chat completion api
response = openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
        {"role": "system", "content": "あなたはシステムエンジニアであり、要求定義を実施します"},
        {"role": "user", "content": "何をする必要がありますか?"},
        {"role": "assistant", "content": "要求定義を実施するためには、以下のような作業が必要です。\n\n1. ステークホルダーとのコミュニケーション: システムに期待される機能や要件を理解するために、関係者とのコミュニケーションを行います。ステークホルダーは、システム利用者、ビジネスオーナーやマネージャなどさまざまな分野から来る人々です。\n\n2. 需要分析: ステークホルダーから収集した情報を分析し、フィードバックを取り入れて、要件を詳細化します。課題や必要な修正を把握し、問題を解決できるようにします。\n\n3. 要件文書の作成: 需要分析から得られた結果を基に、実現可能な要件と、優先順位の高い要件を文書化します。要件文書は、ステークホルダーに共有されて、システムの開発の基礎となります。\n\n4. 参照可能なドキュメント作成: 作成した要求仕様書を参照可能な形でドキュメント化し、開発者がそれを作業のもととして使用できるようにします。\n\n5. 要件の検証と承認: ステークホルダーとのコミュニケーションを通じて、システムの開発が進んだ際に発生する不正確な要求や欠陥を防ぐために、検証と承認を実施します。\n\n6. 修正の管理: 要件定義が進んでいく中で、新たな要求や修正が発生する可能性があるため、その都度文書を更新し、修正を管理します。\n\nこれらの作業を適切に実施することで、スムーズな開発過程と、システム利用者のニーズを満たすシステムの開発に貢献することができます。"},
        {"role": "user", "content": "どうやって聞くの?"},
        {"role": "assistant", "content": "要求定義のためにステークホルダーから情報を収集するためには、以下のような方法があります。\n\n1. 面接: ステークホルダーとの直接の面接を通じて、必要な情報を収集します。それぞれの関係者は、現状の課題やシステムに必要な機能や要件について解説します。\n\n2. ワークショップ: 関係者を集め、ビジネスシナリオを作成するなど、グループディスカッションを行います。このような方法では、関係者が自分の意見を述べ、それが集約されて要件を定義することができます。\n\n3. アンケート調査: 不特定多数のステークホルダーにアンケートを配布することで、情報を収集することができます。アンケートは、全員が直接参加できない時に役立ちます。\n\n4. ヒアリング: 開発チームやシステムユーザーに代表して、1人のステークホルダーから提供された情報をまとめて聞く方法です。このような方法は、意見や論理的な判断を単一のステークホルダーから得られます。\n\nこれらの方法の中から、クライアントと打ち合わせをし、最適な方法を選択する必要があります。また、要件定義の過程で適宜文書化して、システム開発の過程の可視性の向上につなげることが重要です。"},        
        {"role": "user", "content": "一番簡単な方法はどれ?"}, 
    temperature=0.2
)

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

結果は、次のような文書です。

assistant
最も簡単な方法は、アンケート調査です。アンケート調査は、ステークホルダー全員が直接参加できない場合に役立ちます。また、アンケートは、ステークホルダーの意見を匿名で収集できるため、より率直な回答を得ることができます。
ただし、アンケート調査は、質問の設計や回答の選択肢の設定に注意が必要です。また、アンケートの回答者が限られているため、全体的な情報収集には限界があります。そのため、アンケート調査を行う場合は、他の方法と併用することで、より正確な情報を収集することが望ましいです。

3)Image

文言から画像を生成してくれる機能です。(現時点では、文言の指定は英語のみのようです)

# -*- coding: utf-8 -*-
import sys
import os

# api key
KEY = 'sk-Efy6vVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV'

# REST API wrapper for OpenAI GPT-3 API
import openai

# set API key
openai.api_key = KEY

# call image api
response = openai.Image.create(
  prompt="a big tuna",
  n=1,
  size="256x256"
)

# print response(url for image)
image_url = response['data'][0]['url']
print(image_url)

結果は、次のようなURLです。

https://oaidalleapiprodscus.blob.core.windows.net/private/org-aes1lO9eMJ9bp2RE31M9hTit/user-IECqwCHku8AWyMYmx29Lrn0Z/img-eNYe9Bu9xFz4aIgZ14QGAshE.png?st=2023-05-21T07%3A36%3A34Z&se=2023-05-21T09%3A36%3A34Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-05-20T23%3A02%3A59Z&ske=2023-05-21T23%3A02%3A59Z&sks=b&skv=2021-08-06&sig=0zLkKNDRm22WmBDf23s4rnqPU3Y5N8RTmFjndNXW/yI%3D

クリックすると画像を取得できます。

■ まとめ

ChatGPTのREST API環境にはSandBoxがないため、デバックやテストでも課金されてしまうのが気になります。(貧乏性なので・・・)

プロンプトと呼ばれるAPIに指定する指示や質問を的確に考えるのは、人間なので、スキル、知見、経験により、得られ返答の質や手間が変わってきます。

特に、プログラミングでは、どんなプログラミング言語であっても、決まった手順を示しやすく、参考となるキーワードを得るための手段としては使えます。ただ、現時点では、一見それらしいコードであっても実際には、一部に存在しないメソッドやパラメータなど嘘も含まれることも頻繁にあります。

したがって、必ず動作を確認するなどの手間を省くことはできないでしょう。ただ、今後、精度が上がり、間違いが含まれる頻度も減るでしょうから、ソフトウェア開発に関わる人にとっては、強力な武器となるツールでしょう。

調査分析が必要な設計工程などで、ChatGPTを手がかりに作業をするなど、ITエンジニアの仕事のやり方も変わってくると思います。


ソフトウェア開発・システム開発業務/セキュリティ関連業務/ネットワーク関連業務/最新技術に関する業務など、「学習力×発想力×達成力×熱意」で技術開発の実現をサポート。お気軽にお問合せ下さい


-AI

執筆者:


comment

メールアドレスが公開されることはありません。

関連記事

はじめての「AI(人工知能)」入門

これから花形になるであろう最先端のデータサイエンティストやAIエンジニアにとって、これから話すようなことは寝ててもわかるようなことばかりかもしれません。ここでは、それ以外の普通のITエンジニアが、実践 …

やってみた!「TensorFlowコンパイル」入門

tensorflowを使った学習には時間がかかるため、CPUの拡張命令やGPUなどをフルに使って効率化できる工夫がされています。当然、最新のCPU・GPUアーキテクチャに追随していくことになります。し …

Chinese (Simplified)Chinese (Traditional)EnglishFilipinoFrenchGermanHindiJapaneseKoreanMalayThaiVietnamese