シロッコの青空ぶろぐ

高卒シニアが低学歴コンプレックス脱出のため、放送大学の人間と文化コースで学んでいます。通信制大学で学ぼうとする人を応援したい。学んで成功する人が増えれば、私のやる気も燃えるはず。

Pythonが生成したデータでChatGPTと対話をする方法(2):とりあえず動いた編

(写真提供:フリーイラスト素材集 ジャパクリップ

目次

api_key を取得しないとダメじゃん

前回の記事で、ChatGPT が提示したコードで大量のエラーが出たため、諦めてBing Chatに教えを請うていました。

記事を書き終えて、先頭から読み返してみると、api_key を取得しないとダメなのがわかりました。

openai.api_key = "INSERT_API_KEY_HERE"

"INSERT_API_KEY_HERE" ここに APIキーを入れて実行すると、とりあえず、動作しました。

今回は何をしたかを記述していきます。

OpenAIのAPIキーを取得する方法

以下のサイトにお世話になりました

以下のリンク先にアクセスしろといいます。

私のユーザ登録は済んでいるようでした。

グリーンの「◆Upgrade」をクリックし、さらに左側一番下の「API Keys」をクリックすると以下の画面になります。

「+Create new securet key」をクリックすと《50文字くらいの長い》「API Keys」が表示されます。

そのとき文末にある「■緑のボタン■」を押してコピー、メモ帳などにペーストしてください。

エラー多発のコードを動かす

前回、エラー多発のコードを修正します。

openai.api_key = "INSERT_API_KEY_HERE"

ここに長い「API Keys」をペーストします。

openai.api_key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

# coding: utf-8
# 必要なライブラリをインポート
import openai
import json

# APIキーをセットアップ
openai.api_key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

 

# ChatGPTに送信するテキストをセットアップ
text = "平均的日本人が持つ俳優「高倉健」のイメージはどのようなものですか?"

# ChatGPTにテキストを送信し、レスポンスを取得
response = openai.Completion.create(
    engine="davinci", prompt=text, max_tokens=400 #長めにした

)

# レスポンスからテキストを取得して表示
print(response.choices[0].text.strip())

 

とりあえず動いたけど

「python testopenai.py」でしばらくして以下が表示されました。

平均的日本人が持つ俳優「高倉健」のイメージの返事が、普段見慣れている ChatGPTの回答とはずいぶん違います。

平均的日本人が持つ俳優「高倉健」のイメージはどのようなものですか?

高倉健は、日本の俳優の中でも非常に有名な人物であり、多くの人々に愛された俳優の一人です。彼は、映画やテレビドラマで多くの主役を演じ、その演技力やカリスマ性で多くの人々の心を掴んできました。

一般的に、高倉健は男らしく、力強く、魅力的で、情熱的なイメージがあります。彼が演じた役柄の多くは、正義感が強く、人間味あふれるものであり、多くの人々に共感を呼び起こしました。また、彼が演じた役柄の中には、切なく、哀愁を感じさせるものもあり、その演技力は高く評価されています。

高倉健は、日本の映画やテレビドラマの黄金時代に活躍した俳優の一人であり、多くの人々に愛された人物です。今でも、彼が出演した作品は多くの人々に親しまれ、彼の存在は多くの人々にとって特別なものとなっています。

333文字ですから、max_tokens=400 で十分足りているはずです。

パラメータを追加

前回 Bing Chat との対話で、temperature などのパラメータについて質問しました。

そのときのコードに修正。

response = openai.Completion.create(
    # engine="davinci", prompt=text, max_tokens=400
    engine="davinci",
    prompt=text,
    temperature=0.7,
    max_tokens=400,
    top_p=1,
    frequency_penalty=0,
    presence_penalty=0
)
 

真田広之さん関係ないけど・・・。

print文を Bing Chat が聞いたものに修正

# レスポンスからテキストを取得して表示
# print(response.choices[0].text.strip())
print(response['choices'][0]['text'])

健さんの文になりましたけれど、望んでいたものとはずいぶん違います。

先にBing Chatが教えてくれたコードはウソだった

Bing Chat から聞いたコードを実行するとエラーになります。

Bing Chat に質問します。

以下のエラーがでます。 ERROR: Could not find a version that satisfies the requirement openai_secret_manager (from versions: none) ERROR: No matching distribution found for openai_secret_manager

独自に定義したモジュール?

「openai_secret_manager」は、OpenAIが提供する公式のパッケージではありません。おそらく、あなたが参照しているコードやチュートリアルが独自に定義したモジュールかもしれません。詳細は、そのコードやチュートリアルの文書を確認してください。

Bing Chatを追求する。

Bing Chatに教えて貰ったコードです。 そのときのプロンプトは「Pythonコードを使用して、ChatGPTにデータを生成し、そのデータに対する応答を得る方法を教えてください」です。

Bing Chat「記憶にございません」

申し訳ありませんが、私は過去の会話やプロンプトについての情報を持っていません。ただし、OpenAIのGPT-3 APIを使用して、Pythonでデータを生成し、応答を得ることができます。そのためには、まずOpenAIのウェブサイトでAPIキーを取得する必要があります。次に、「openai」モジュールをインストールし、APIキーとともに使用します。

具体的なコード例はありますか?

はい、あります。以下が、OpenAIのGPT-3 APIを使用して、Pythonでデータを生成し、応答を得るための簡単なコード例です。

import openai_secret_manager

assert "openai" in openai_secret_manager.get_services()
secrets = openai_secret_manager.get_secret("openai")

import openai
openai.api_key = secrets["api_key"]

prompt = 'ここにあなたのプロンプトを入力してください'

response = openai.Completion.create(
    engine="davinci",
    prompt=prompt,
    max_tokens=150
)

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

このコードは、openaiモジュールとopenai_secret_managerモジュールがインストールされていること、およびOpenAIのAPIキーが取得されていることが前提です。

「import openai_secret_manager」という行があります。

ご指摘ありがとうございます。私の誤りでした。「openai_secret_manager」は、OpenAIが提供する公式のパッケージではありません。そのため、その行を削除し、APIキーを直接指定するように変更します。以下が修正後のコード例です。

import openai

openai.api_key = "YOUR_API_KEY_HERE"

prompt = 'ここにあなたのプロンプトを入力してください'

response = openai.Completion.create(
    engine="davinci",
    prompt=prompt,
    max_tokens=150
)

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

このコードは、openaiモジュールがインストールされていること、およびOpenAIのAPIキーが取得されていることが前提です。

論破して、少し気持ちがいい(笑)

Web経由の対話と同質の返答が欲しい

Bing Chat に質問

openai.Completion.create の関数をコールするとき、返答を普段Web経由で対話しているものと同じようなものにするのは、パラネータ設定をどのようにすればいいでしょうか。解説をお願いします。

openai.Completion.create関数は、様々なパラメータを設定することができます。返答をWeb経由で対話しているものと同じようなものにするためには、以下のようなパラメータを設定することができます。

  • engine: 使用するGPTモデルを指定します。例えば、"davinci"や"curie"など。
  • prompt: プロンプトとして使用するテキストを指定します。
  • temperature: 生成されるテキストのランダム性を制御します。値が高いほど、よりランダムなテキストが生成されます。
  • max_tokens: 生成されるテキストの最大トークン数を指定します。
  • top_p: 生成されるテキストの多様性を制御します。値が高いほど、より多様なテキストが生成されます。

詳細は、OpenAIのAPIドキュメント を参照してください。

: https://beta.openai.com/docs/api-reference/completions/create/

openai.Completion.create の関数をコールするとき、返答を普段Web経由で対話しているものと同じようなものにするのは、パラネータ設定をどのようにすればいいでしょうか。具体的な数字を教えてください。

openai.Completion.create関数のパラメータ設定は、使用する目的や状況に応じて異なります。そのため、返答をWeb経由で対話しているものと同じようなものにするための具体的な数字を一概には言えません。

ただし、一般的には、以下のような値がよく使用されます。

  • engine: "davinci"
  • temperature: 0.5から1の範囲
  • max_tokens: 150から300の範囲
  • top_p: 1

これらの値はあくまで参考値であり、実際には試行錯誤を繰り返しながら適切な値を見つけることが重要です。

それらしい返答が返ってきた

設定したパラメータは以下のとおりです。

# ChatGPTにテキストを送信し、レスポンスを取得
response = openai.Completion.create(
    engine="davinci",
    prompt=text,
    temperature=0.5, 
    max_tokens=400,
    top_p=1,
    frequency_penalty=0,
    presence_penalty=0
)

# レスポンスからテキストを取得して表示
# print(response.choices[0].text.strip())

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

実行結果

まとめ

前回の記事で、ChatGPT が提示したコードで大量のエラーが出たため、諦めて別にBing Chatに教えてもらっていました。記事を書き終えて、先頭から読み返してみると、api_key を取得しないとダメなのがわかりました。

api_keyを設定すると、動くのは動きました。

その後、パラメータを修正し、少しずつ望む返答になってきました。

残る課題は以下の2点です。

今回はここまでとします。

最後まで読んでいただきありがとうございます。