今までは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"
}
],
...
コメント