Pythonのコーディングを知らなくても楽しめる!OpenAI APIを使ったサンプルコード実行のステップバイステップガイド

IT

今まではGoogleで使い方を検索して、記事を読んで試行錯誤していたかもしれません。

ここでは、サンプルコードの実行方法をChatGPTに次のように丸投げしてみました。

davinci-codexが何かわからないので聞いてみました。また、APIのサンプルに記載されていたtext-davinci-003との違いも追加で聞いてみました。

非常にわかりやすく、親切な回答が返ってきました。

では、早速実行してみましょう。

Sentiment check

import os
import openai

openai.api_key = os.getenv("OPENAI_API_KEY")

response = openai.Completion.create(
  model="text-davinci-003",
  prompt="Decide whether a Tweet's sentiment is positive, neutral, or negative.\n\nTweet: \"I loved the new Batman movie!\"\nSentiment:",
  temperature=0,
  max_tokens=60,
  top_p=1.0,
  frequency_penalty=0.5,
  presence_penalty=0.0
)

print(response.choices[0].text)

上記コードを実行すると次のような返事がありました。

% python app2.py 
 Positive

では、lovedをdon’t likeに変えて、実行してみました。結果は、こちら。

% diff app2.py app2.py.ori 
8c8
<   prompt="Decide whether a Tweet's sentiment is positive, neutral, or negative.\n\nTweet: \"I don't like the new Batman movie!\"\nSentiment:",
---
>   prompt="Decide whether a Tweet's sentiment is positive, neutral, or negative.\n\nTweet: \"I loved the new Batman movie!\"\nSentiment:",


% python app2.py
 Negative

文脈に応じて、positiveやnegativeを判断しているようです。

今度は、textだけでなくresponseオブジェクトを表示してみました。

% python app2.py
{
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "logprobs": null,
      "text": " Negative"
    }
  ],
  "created": 1680061390,
  "id": "cmpl-6zH0I2y0mjni9SGoPro17TY6eUVgB",
  "model": "text-davinci-003",
  "object": "text_completion",
  "usage": {
    "completion_tokens": 1,
    "prompt_tokens": 33,
    "total_tokens": 34
  }
}

なるほど、tokensの利用状況もわかるので、使用料金の予測にも役立ちそうです。

$18ドルのフリートライアルでも、現時点では十分ということがわかります。

Summarize for a 2nd grade

こちらの少し難しい文章を小学2年生レベルに書き換えてもらいましょう。

We, the Japanese people, acting through our duly elected representatives in the National Diet, determined that we shall secure for ourselves and our posterity the fruits of peaceful cooperation with all nations and the blessings of liberty throughout this land, and resolved that never again shall we be visited with the horrors of war through the action of government, do proclaim that sovereign power resides with the people and do firmly establish this Constitution.

こちらが、サンプルコードと実行結果です。

% cat app3.py 
import os
import openai

openai.api_key = os.getenv("OPENAI_API_KEY")

response = openai.Completion.create(
  model="text-davinci-003",
  prompt="Summarize this for a second-grade student:\n\nWe, the Japanese people, acting through our duly elected representatives in the National Diet, determined that we shall secure for ourselves and our posterity the fruits of peaceful cooperation with all nations and the blessings of liberty throughout this land, and resolved that never again shall we be visited with the horrors of war through the action of government, do proclaim that sovereign power resides with the people and do firmly establish this Constitution.",
  temperature=0.7,
  max_tokens=4000,
  top_p=1,
  frequency_penalty=0,
  presence_penalty=0
)

print(response)
% python app3.py
{
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "logprobs": null,
      "text": "\n\nThe people of Japan have decided that they want peace and freedom. They have put a Constitution in place so that everyone can be safe and have their rights respected."
    }
  ],
  "created": 1680069133,
  "id": "cmpl-6zJ1BG4gNB7mmSGLS3cOM5Wv64fGh",
  "model": "text-davinci-003",
  "object": "text_completion",
  "usage": {
    "completion_tokens": 34,
    "prompt_tokens": 94,
    "total_tokens": 128
  }

本文だけを抜き出すと、こちらになります。

The people of Japan have decided that they want peace and freedom. They have put a Constitution in place so that everyone can be safe and have their rights respected.

こちらも簡潔にまとめられており、わかりやすくまとめられています。素晴らしい出来です。

エラー

短時間に何度も実行すると上限を超え、次のようなエラーが発生することがあります。

その場合は、しばらく時間を空けて実行してみてください。

% python app3.py
Traceback (most recent call last):
  File "/Users/you/work/git-tree/openai/openai-quickstart-python/app3.py", line 6, in <module>
    response = openai.Completion.create(
  File "/Users/you/.pyenv/versions/3.10.6/lib/python3.10/site-packages/openai/api_resources/completion.py", line 25, in create
    return super().create(*args, **kwargs)
  File "/Users/you/.pyenv/versions/3.10.6/lib/python3.10/site-packages/openai/api_resources/abstract/engine_api_resource.py", line 153, in create
    response, _, api_key = requestor.request(
  File "/Users/you/.pyenv/versions/3.10.6/lib/python3.10/site-packages/openai/api_requestor.py", line 226, in request
    resp, got_stream = self._interpret_response(result, stream)
  File "/Users/you/.pyenv/versions/3.10.6/lib/python3.10/site-packages/openai/api_requestor.py", line 619, in _interpret_response
    self._interpret_response_line(
  File "/Users/you/.pyenv/versions/3.10.6/lib/python3.10/site-packages/openai/api_requestor.py", line 682, in _interpret_response_line
    raise self.handle_error_response(
openai.error.RateLimitError: Rate limit reached for default-text-davinci-003 in organization org-MC8UJP6jNSZV2uKCG2cNl1mc on tokens per min. Limit: 150000 / min. Current: 0 / min. Contact support@openai.com if you continue to have issues. Please add a payment method to your account to increase your rate limit. Visit https://platform.openai.com/account/billing to add a payment method.

デバッグ

あれ?プログラムが予想と違った動きをするときになど、ソースコードにprintを追加してもいいですが、面倒なのでpdbを利用してみましょう。

-m pdbを追加して、次のようにコードを実行してみます。helpと入力すると利用できるコマンドを表示することができます。

nでコードを順次実行して、プログラムの動きを把握することができます。

% python -m pdb app2.py
...
> /Users/you/work/git-tree/openai/openai-quickstart-python/app2.py(1)<module>()
-> import os
(Pdb) n
> /Users/you/work/git-tree/openai/openai-quickstart-python/app2.py(2)<module>()
-> import openai
(Pdb) l
  1  	import os
  2  ->	import openai
  3  	
  4  	openai.api_key = os.getenv("OPENAI_API_KEY")
  5  	
  6  	response = openai.Completion.create(
  7  	  model="text-davinci-003",
  8  	  prompt="Decide whether a Tweet's sentiment is positive, neutral, or negative.\n\nTweet: \"I don't like the new Batman movie!\"\nSentiment:",
  9  	  temperature=0,
 10  	  max_tokens=60,
 11  	  top_p=1.0,

(Pdb) help

Documented commands (type help <topic>):
========================================
EOF    c          d        h         list      q        rv       undisplay
a      cl         debug    help      ll        quit     s        unt      
alias  clear      disable  ignore    longlist  r        source   until    
args   commands   display  interact  n         restart  step     up       
b      condition  down     j         next      return   tbreak   w        
break  cont       enable   jump      p         retval   u        whatis   
bt     continue   exit     l         pp        run      unalias  where    

Miscellaneous help topics:
==========================
exec  pdb

(Pdb) n
> /Users/you/work/git-tree/openai/openai-quickstart-python/app2.py(13)<module>()
-> presence_penalty=0.0
(Pdb) n
> /Users/you/work/git-tree/openai/openai-quickstart-python/app2.py(6)<module>()
-> response = openai.Completion.create(
(Pdb) n
> /Users/you/work/git-tree/openai/openai-quickstart-python/app2.py(16)<module>()
-> print(response)
(Pdb) p response
<OpenAIObject text_completion id=cmpl-6zbjbukQWq4kmn9RwyJOZf3XyT5ak at 0x126d02f70> JSON: {
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "logprobs": null,
      "text": " Negative"
    }
  ],
...

コメント

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