【Python】文系日曜プログラマーがChatGPT APIを使ってみた。

テーマはchatGPTのAPI pythonの話

ChatGPTのAPIが公開されました。pythonだと簡単に使えるので試しに使ってみました。
従前のtext-davinci-003よりコストが1/10に下がっているので、text-davinci-003を使っている人は乗り換えしたほうがよさそうですね。

準備はAPI‐Keyの取得とopenaiのインストール

朝、布団でツイッターを見ていると、「chatGPT」のAPIが公開されたという情報が目に留まりました。これは、試してみねばと、すぐに起きてpythonをパパっと叩くとあっという間にchatGPTからご回答が、、、。ぜひお試しを。

準備として、openAIのAPI‐Keyを取得しておく必要があります。

API-Keyについては、こちらのサイトを参考にしました。googleアカウントがあれば簡単にユーザー登録、API-Keyの発行が可能です。
クレジットカードの登録なども不要で、無料体験の18ドル分が使えます。

openAIの公式サイトはこちら。https://openai.com/product

chatGPTのAPIの説明は、こちらが公式サイトです。https://platform.openai.com/docs/guides/chat

openaiのをpipでインストールする

コマンドプロンプトなどで、「pip install openai 」でopenaiのパッケージをインスト―ルしておきます。

早速使ってみました。

質問を投げて、質問、回答、消費tokenをCSVに書きだすというのをやってみました。

従前のGPT3の「text-davinci-003」などのText completionでは「openai.Completion.create()」でしたが、これが「openai.ChatCompletion.create()」に変わり、リクエストのパラメータも変わっています。

import openai
import csv
API_KEY = "sk-XXXXXXXXXXXXX"  #取得したAPIKeyにしてください。
AI_MODEL = "gpt-3.5-turbo"
penai.api_key = API_KEY

OP_PATH = "gpt_ans.csv"

question ="健康的な昼食について200字程度で書いてください。"

def ask_ai(question):
    res = openai.ChatCompletion.create(
        model=AI_MODEL,
        messages=[ 
            {"role":"user","content":question}]
        )
    res_text =  res.choices[0].message.content.strip()
    total_tokens = res.usage.total_tokens
    return res, res_text, total_tokens

def main():
   res, res_text, total_tokens = ask_ai(question)
   print(res)
   print(res_text)
   print(total_tokens)
   temp_list=[[question, res_text, total_tokens]]
   
   with open(OP_PATH, 'w', encoding="utf_8") as file:
       writer = csv.writer(file, lineterminator='\n')
       writer.writerows(temp_list)
    

if __name__=="__main__":
    main()

chatGPTのAPIへのリクエストは、def ask_ai(question):の部分で、そのうち戻り値のres_textが目的の回答の部分です。

残りの「res」と「total_tokens」はどんなデータがopenaiのモジュールで返ってきているかとどのくらいトークンが消費されてるかを見たかったので追加しているだけです。

質問を投げるところ(14行目あたり)については、公式サイトの説明では、以下のように、まずは”system”でchatGPTがどんな役回りかやどんな解答を期待しているかを書いて、そのあとに”user”と”assistant”の会話を投げて聞きたいことを書くようになっていますが、いきなり、{“role”:”user”,”content”:”質問”}でも解答してくれました。

openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Who won the world series in 2020?"},
        {"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
        {"role": "user", "content": "Where was it played?"}
    ]
)

“user”と”assistant”のキャッチボールになっているのは、時系列の会話内容を投げることで会話の続きでの返答をしてくれるようになっています。

公式サイトの例では7行目の「Where was it played?」とあるのは、それまでの会話から2020年ワールドシリーズについて回答してくれます。

今回は、「”健康的な昼食について200字程度で書いてください。”」という質問を投げてみました。

その解答は、res として全体では以下のようなレスポンスが返ってきています。

{
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "message": {
        "content": "\n\n\u5065\u5eb7\u7684\u306a\u663c\u98df\u306b\u306f\u3001\u91ce\u83dc\u3084\u679c\u7269\u3001\u30bf\u30f3\u30d1\u30af\u8cea\u3001\u70ad\u6c34\u5316\u7269\u3001\u8102\u8cea\u306e\u30d0\u30e9\u30f3\u30b9\u304c\u5927\u5207\u3067\u3059\u3002\u91ce\u83dc\u3084\u679c\u7269\u306f\u30d3\u30bf\u30df\u30f3\u3084\u30df\u30cd\u30e9\u30eb\u304c\u8c4a\u5bcc\u3067\u3001\u98df\u7269\u7e4a\u7dad\u3082\u591a\u304f\u542b\u307e\u308c\u3066\u3044\u308b\u306e\u3067\u3001\u6804\u990a\u30d0\u30e9\u30f3\u30b9\u3092\u4fdd\u3061\u306a\u304c\u3089\u6e80\u8179\u611f\u3082\u5f97\u3089\u308c\u307e\u3059\u3002\u30bf\u30f3\u30d1\u30af\u8cea\u306f\u7b4b\u8089\u3092\u4f5c\u308a\u3001\u70ad\u6c34\u5316\u7269\u306f\u30a8\u30cd\u30eb\u30ae\u30fc\u6e90\u3068\u3057\u3066\u5fc5\u8981\u3067\u3059\u304c\u3001\u98df\u3079\u904e\u304e\u306f\u907f\u3051\u3001\u9069\u5ea6\u306a\u91cf\u3092\u6442\u308b\u3088\u3046\u306b\u3057\u307e\u3057\u3087\u3046\u3002\u8102\u8cea\u306f\u4f53\u5185\u3067\u4f7f\u308f\u308c\u308b\u524d\u306b\u5206\u89e3\u3055\u308c\u308b\u305f\u3081\u3001\u904e\u5270\u306a\u6442\u53d6\u306f\u592a\u308a\u3084\u3059\u304f\u3001\u751f\u6d3b\u7fd2\u6163\u75c5\u306e\u30ea\u30b9\u30af\u3082\u9ad8\u304f\u306a\u308a\u307e\u3059\u3002\u81ea\u5206\u306e\u98df\u751f\u6d3b\u306b\u5408\u3063\u305f\u30e1\u30cb\u30e5\u30fc\u3092\u9078\u3073\u3001\u6804\u990a\u30d0\u30e9\u30f3\u30b9\u3092\u8003\u3048\u305f\u663c\u98df\u3092\u3068\u308b\u3088\u3046\u306b\u5fc3\u639b\u3051\u307e\u3057\u3087\u3046\u3002",
        "role": "assistant"
      }
    }
  ],
  "created": 1677720589,
  "id": "chatcmpl-6pS3R8WZfKfek2p2r1kfW80St9Hwr",
  "model": "gpt-3.5-turbo-0301",
  "object": "chat.completion",
  "usage": {
    "completion_tokens": 306,
    "prompt_tokens": 32,
    "total_tokens": 338
  }
}

ここから欲しい情報として、7行目の”content”の部分が欲しいところなので、
res_text = res.choices[0].message.content.strip()
として、その部分を抽出しました。

あとは、tokenがどれくらい消費されているのか知りたいので、19行目の”total_tokens”の値を
total_tokens = res.usage.total_tokens
として抽出しています。

質問には、
「健康的な昼食には、野菜や果物、タンパク質、炭水化物、脂質のバランスが大切です。野菜や果物はビタミンやミネラルが豊富で、食物繊維も多く含まれているので、栄養バランスを保ちながら満腹感も得られます。タンパク質は筋肉を作り、炭水化物はエネルギー源として必要ですが、食べ過ぎは避け、適度な量を摂るようにしましょう。脂質は体内で使われる前に分解されるため、過剰な摂取は太りやすく、生活習慣病のリスクも高くなります。自分の食生活に合ったメニューを選び、栄養バランスを考えた昼食をとるように心掛けましょう。」
と、きちんと回答してくれました。

18ドルの無料枠でしばらくは楽しめそうです。

文系の日曜プログラマーでも簡単に楽しめます。

マクロが初めてでも使えるExcelでChatGPT-3.5に質問するVBAマクロ(64bit環境対応)|ふーた
ExcelでChatGPT3.5へ質問するマクロを作成しました 話題のChatGPTを使うVBAのコードについて書いています。 この記事は64bitのWindows11、32bitのExcel2019での動作の確認によっています。 (追記 2023/11/02)64bitExcelではエラーとなっていましたが、対応...

コメント

タイトルとURLをコピーしました