ChatGPTの調査:何が便利なのか?GPT3のAPIを叩いてみた

2023-01-21
2023-01-21

今話題の ChatGPT について色々調査してみたので、それをまとめてみます。

技術的なことは以下サイトが詳しかったです。

ChatGPT とは

OpenAI が開発した会話形式で対話が可能な AI モデルです。

GPT3.5 と強化学習を活用して作られているようです。

(参考:ChatGPT: Optimizing Language Models for Dialogue)

ChatGPT はこれまで生成系の AI が出力していたような不自然な文章を生成することが少なく、そればかりか人間が考えて書くよりも自然で賢い回答を行うことがあります。

ちなみに ChatGPT 自身に ChatGPT について聞いた結果が以下です。

chatgptとは

上記のように ChatGPT ではログインし、対話形式で質問投げるとそれに答えてくれます。

ChatGPT の便利なところ

みてもらうのが早いでしょう。以下は今回の記事を書くにあたって下書きで書いた文章です。

精度が高いことは前述した通りです。特に便利なところはその汎用性の高さです。
単純に疑問を投げかけて答えてくれるだけではなく、要約、コードレビュー、コード生成など幅広いタスクに対応することができます。
ChatGPT の場合、前の会話内容も覚えているのでまさに対話するように使用することができます。
またもちろんだ無料で使えるのも大きいです。

上記文章を ChatGPT に修正してもらいました。

・文章の構造を整える: "特に便利なところはその汎用性の高さです"を文頭に置く。 "ChatGPT の場合、前の会話内容も覚えているのでまさに対話するように使用することができます"を文末に置く。
・文章の整合性を確保する: "精度が高いことは前述した通りです"を削除する。
・文章の表現を改善する: "単純に疑問を投げかけて答えてくれるだけではなく"を "複雑なタスクにも対応できる"に変更する。
・文章の表現を改善する: "無料で使えるのも大きいです"を "無料で利用できることも大きなメリットです"に変更する。
例:
ChatGPT は高い汎用性を持ち、要約、コードレビュー、コード生成など幅広いタスクに対応することができます。また、前の会話内容も覚えているため、対話するように使用することができます。利用も無料であることが大きなメリットです。

例文が完璧すぎますね。

ChatGPT の具体的な使い道

自分の場合、ChatGPT はアイデアの壁打ちに使用することが多いです。

例えば、ブログ記事を書くまえに以下のような質問をします。

chatgpt例

内容の良し悪しは抜きにすると、最初のアイデア出しには非常に有効なことがわかります。

さらにこんな使い方もできます。

chatgpt例

便利すぎてやばいですね。

ただ、注意しなきゃいけないのは必ずしも正確な内容を教えてくれるわけではないことです。自身で情報の真偽がある程度判定できる範囲で活用するのが良さそうです。

GPT3 の API を使ってみる

OpenAI のサイトに行くと API も利用できることがわかります。

自然言語処理系以外もありますが、今回は GPT3 のモデルを使っていきたいと思います。

料金はPricingに記載されています。

一番強力な Davinci で$0.0200 / 1K tokensと書いてあります。思ったより安いです。 結構あっという間に 1k token いっちゃいます。4,5 クエリでいってしまうかもです。

ちなみに登録して 3 ヶ月は Free で使える枠が$18 分だけあります。

API を叩いてみる

ドキュメントを参考に API を叩いてみました。

今回は GPT3 のモデルの一つであるtext-davinci-003を使い、テキスト生成を行います(ChatGPT と同じタスクのはず)

コードは以下の通りです。API キーは.envに記載してます。

from pydantic import BaseSettings, BaseModel
class Settings(BaseSettings):
    api_key: str
settings = Settings()
settings.api_key
#%%
import requests
url = 'https://api.openai.com/v1/completions'
headers = {'Authorization': f'Bearer {settings.api_key}'}
body = {
    "model": "text-davinci-003",
    "prompt": "ChatGPTとは?",
    "temperature": 0,
    "max_tokens": 500,
}
response = requests.post(url, headers=headers, json=body)
print(response.status_code)
print(response.json())

レスポンスは以下のように返ってきました。id とかは念のためぼかしてます。

{
  "id": "---",
  "object": "text_completion",
  "created": 00000000,
  "model": "text-davinci-003",
  "choices": [
    {
      "text": "\n\nChatGPTは、自然言語処理(NLP)を使用したチャットボット技術です。ChatGPTは、自然な会話を行うために、複雑な言語モデルを使用して、ユーザーからの入力を分析し、自然な会話を行うことができます。ChatGPTは、自然な会話を行うために、複雑な言語モデルを使用して、ユーザーからの入力を分析し、自然な会話を行うことができます。",
      "index": 0,
      "logprobs": "None",
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 8,
    "completion_tokens": 227,
    "total_tokens": 235
  }
}

入力クエリChatGPTとは?に対して以下のような回答が返ってきました。

ChatGPT は、自然言語処理(NLP)を使用したチャットボット技術です。ChatGPT は、自然な会話を行うために、複雑な言語モデルを使用して、ユーザーからの入力を分析し、自然な会話を行うことができます。ChatGPT は、自然な会話を行うために、複雑な言語モデルを使用して、ユーザーからの入力を分析し、自然な会話を行うことができます

ChatGPT が生成する回答と重複を除けばほぼ同じですが、なぜか回答が重複して返ってきてます、、、

回答が長くなるとその分お金がかかるはずなので、これはいただけませんね。おそらくここらへんが ChatGPT では改善されているのでしょう。

他にもいくつか試しましたが、ChatGPT とは微妙に異なる結果が返ってきます(リクエスト時のパラメータ指定なども影響していると思います) そもそものモデルが GPT3 と GPT3.5 で異なるため当然かもです。

まとめ

ChatGPT やばいくらいに便利です。 API に関しては ChatGPT の API が近々公開されるらしいです。

API が公開されると色々なサービスに影響が出そうですね。新しいサービスも生まれる予感

おまけ

pydantic でレスポンスの辞書をパースしてクラスにする処理を書いたので載せておきます。

from typing import Optional, List
from pydantic import BaseModel
class Usage(BaseModel):
    prompt_tokens: str
    completion_tokens: str
    total_tokens: str
class Choice(BaseModel):
    text: str
    index: int
    logprobs: Optional[str]
    finish_reason: str
class OpenAIResponse(BaseModel):
    id:str
    object: str
    created: str
    model: str
    choices: List[Choice]
    usage: Usage
res =OpenAIResponse.parse_obj(response.json())