リモート開発メインのソフトウェア開発企業のエンジニアブログです

PythonでChatGPT APIを使ってみる 第1回 基本的な使い方

概要

最近ChatGPTを使う機会が増えてきました。

何気ない日常のアイデアや技術的にわからないことなど、手軽にブラウザ上で質問できるのはとてもありがたいと感じています。

そんなChatGPTですが、ブラウザ上からだけではなくAPIからも利用することが出来ます。

そこで備忘録も兼ねて、ChatGPT APIの使い方を記事にしたいと思います。

使用するプログラミング言語ですが、公式のドキュメントにサンプルコードが記載されていたため、今回はPythonを選びました。

Chat GPTに関する記事は全部で3つ作成しようと考えています。

第1回で基本的な使い方、第2回でBing Search APIとの連携、第3回でLangChainを使用したChatGPTとAPIの連携方法についてを記事にする予定です。

ChatGPT APIの使い方

まずはOpenAIアカウントを作成し、APIキーを発行する必要があります。

APIキーはこちらのページから発行を行えます。

APIキーは.envファイルを用意し、以下のように記載をしておきます。

OPENAI_API_KEY=発行したAPIキー

次にライブラリを準備します。

Python 3.7.1以上がインストールされている場合、以下のコマンドでライブラリのインストールを行えます。

pip install --upgrade openai

ここまで準備ができたら、実際にAPIリクエストを作成してみましょう。

実際のコードは以下のようになります。

from openai import OpenAI
from dotenv import load_dotenv
load_dotenv()

client = OpenAI()

completion = client.chat.completions.create(
    model="gpt-4-turbo",
    messages=[
        {"role": "system", "content": "あなたは優秀な日本料理人です。"},
        {"role": "user", "content": "暑い日の夏に食べたくなる美味しい昼食名を1つ教えて下さい。"},
    ]
)

print(completion.choices[0].message.content)

プログラムを実行すると、以下の出力が表示されました。

暑い夏の日にぴったりな昼食としておすすめするのは「冷やし中華」です。麺はしっかりと冷水で締めてツルツルとした食感を出し、具材にはキュウリ、ハム、錦糸卵、トマトなどのさっぱりとした野菜や具をたっぷりと使います。ドレッシングは醤油ベースにごま油を少し加えた特製のタレで、さっぱりとしつつも深い味わいが楽しめます。暑い日に冷たくて食欲をそそる冷やし中華は、栄養バランスも良く、夏バテ防止にも一役買います。

コードの解説

コードの内容を細かく見ていきましょう。

from openai import OpenAI
from dotenv import load_dotenv
load_dotenv()

client = OpenAI()

モジュールのインポートとクライアントの準備です。

クライアントをインターフェースとし、APIにアクセスを行います。

OpenAI()メソッドはデフォルトでos.environ.get(“OPENAI_API_KEY”)の値からAPIキーの値を取得しています。

直接APIキーの値を指定したい場合は、以下のように引数を指定してメソッドを実行する必要があります。

client = OpenAI(
  api_key=APIキーを記載,
)

次にクライアントを使用している部分を詳しく見ていきます。

completion = client.chat.completions.create(
    model="gpt-4-turbo",
    messages=[
        {"role": "system", "content": "あなたは優秀な日本料理人です。"},
        {"role": "user", "content": "暑い日の夏に食べたくなる美味しい昼食名を1つ教えて下さい。"},
    ]
)

modelには使用するモデルを指定します。

指定できる値はこちらのページで確認ができます。

messagesにはChatGPTへの入力を指定します。

roleは以下のような役割を持っています。

  • system:ChatGPTに特定の役割を与えるために使用するプロンプト。役割を与えることで、より制度の高い回答を引き出すことが出来る。
  • user:ユーザーからの入力プロンプト
  • assistant:ChatGPTからの出力プロンプト

入力プロンプトにassistantロールを使用することで、過去のやり取りを基にして新たな質問をすることも出来ます。

例えばChatGPTが出力した「冷やし中華」のレシピを知りたい場合、以下のようなコードで会話を続ける事ができます。

completion = client.chat.completions.create(
    model="gpt-4-turbo",
    messages=[
        {"role": "system", "content": "あなたは優秀な日本料理人です。"},
        {"role": "user", "content": "暑い日の夏に食べたくなる美味しい昼食名を1つ教えて下さい。"},
        {"role": "assistant", "content": "暑い夏の日にぴったりな昼食としておすすめするのは「冷やし中華」です。麺はしっかりと冷水で締めてツルツルとした食感を出し、具材にはキュウリ、ハム、錦糸卵、トマトなどのさっぱりとした野菜や具をたっぷりと使います。ドレッシングは醤油ベースにごま油を少し加えた特製のタレで、さっぱりとしつつも深い味わいが楽しめます。暑い日に冷たくて食欲をそそる冷やし中華は、栄養バランスも良く、夏バテ防止にも一役買います。"},
        {"role": "user", "content": "レシピを教えて下さい。"},
    ]
)

出力は以下の通りです。

もちろんです。こちらが冷やし中華の基本レシピです。

### 材料(2人分)
- 中華麺:2玉
- キュウリ:1本
- ハム:4枚
- トマト:1個
- 錦糸卵(市販のものでもOK):適量
- 白ごま:適量
- しょうが(みじん切り):小さじ1

#### ソース(合わせ調味料)
- 醤油:大さじ3
- 酢:大さじ2
- 砂糖:大さじ2
- ごま油:大さじ1
- 中華スープの素:小さじ1
- 水:大さじ2

### 作り方
1. **麺の準備**:
   - 鍋に水をたっぷりと沸騰させて、中華麺を指定の時間通りに茹でます。
   - 茹で上がったらすぐに冷水で洗い、水気をしっかりと切って冷ます。

2. **具材の準備**:
   - キュウリは細長く切り、ハムは細切りにします。
   - トマトは種を取り除いてから、同じく細切りに切ります。
   - 錦糸卵は用意しておきます。

3. **ソースの準備**:
   - 小さなボウルにソースの材料をすべて入れ、よく混ぜ合わせます。

4. **盛り付け**:
   - 冷たい中華麺を皿に盛り、キュウリ、ハム、トマト、錦糸卵をきれいにトッピングします。
   - 上からソースをかけ、最後に白ごまをふり、少量のみじん切りしょうがをトッピングします。

### 提供の際の注意
- ソースは冷やしておくとより美味しく召し上がれます。
- 好みでラー油や辛子、酢を追加しても良いでしょう。

ご自宅で手軽に作れる冷やし中華で、夏のランチタイムを楽しんでみてくださいね。

入力プロンプトは「レシピを教えて下さい。」だけですが、ChatGPTは過去のやり取りから冷やし中華のレシピを教えてくれます。

この機能を利用して、ブラウザ上でChatGPTを利用するのと同じ様に受け答えをしてくれるプログラムを作成してみました。

実際のコードは以下の通りです。

from openai import OpenAI
from dotenv import load_dotenv
load_dotenv()

# APIクライアントの初期化
client = OpenAI()

# 初期システムメッセージの設定
messages = [
    {"role": "system", "content": "あなたは優秀な日本料理人です。"}
]

while True:
    # キーボードからユーザー入力を受け取る
    user_input = input("あなたの質問を入力してください (終了するには 'quit' と入力): ")
    if user_input.lower() == 'quit':
        break

    # ユーザーメッセージを追加
    messages.append({"role": "user", "content": user_input})

    # ChatGPTモデルに問い合わせ
    completion = client.chat.completions.create(
        model="gpt-4-turbo",
        messages=messages
    )

    # 結果を取得して出力
    assistant_response = completion.choices[0].message.content
    print("Assistant:", assistant_response)

    # アシスタントの返答をメッセージ配列に追加
    messages.append({"role": "assistant", "content": assistant_response})

実行結果は以下の通りです。

あなたの質問を入力してください (終了するには 'quit' と入力): 夏にオススメの料理を教えて下さい。
Assistant: 夏にピッタリな日本料理をいくつかご紹介しますね。夏は暑いため、さっぱりとした料理や冷たい料理が好 まれる傾向にあります。

1. 冷やし中華
   - 冷たくして食べる中華麺に、キュウリやハム、トマト、卵などのトッピングを彩りよくのせる料理です。酸味のあ る特製ソースで食欲を増進させます。

2. 鰻の蒲焼
   - 夏の疲れを癒やす滋養強壮食として知られています。甘辛いタレで味付けした鰻を、ふっくらと焼き上げます。

3. 冷やし茶漬け
   - ご飯の上に具材をのせ、冷たい茶かだし汁をかけて食べる簡単でさっぱりした料理です。梅干し、わかめ、鮭など をトッピングします。

4. そうめん
   - 細くて冷たい麺をつゆにつけて食べる、夏の定番料理です。ネギや生姜、ミョウガ等で風味を加えるとさらに美味 しくなります。

5. サラダうどん
   - 冷たく茹でたうどんに、生野菜やハム、トマト、きゅうりなどを混ぜ合わせ、ポン酢やドレッシングで味付けした 料理です。

6. 冷製トマトそば
   - 冷たいそばに、スライスしたトマトとハーブ、あるいはお好みの野菜を加え、冷たいトマトスープでいただく一品 。

これらの料理は暑い夏に食欲が落ちがちなときにも、さっぱりとしていて食べやすく、栄養バランスも良いのでおすすめです。
あなたの質問を入力してください (終了するには 'quit' と入力): 5番のレシピを教えて下さい。
Assistant: もちろんです。夏にぴったりな「サラダうどん」のレシピをご紹介します。爽やかでヘルシーなこの料理は 、暑い日には特におすすめです。

### 材料 (2人分)
- うどん(乾麺または生麺):2玉
- キュウリ:1本
- プチトマト:8個
- ハム:4枚
- レタス:4枚
- 大葉:数枚
- ごま油:適量
- ポン酢しょうゆ:適量
- かいわれ大根:適量
- レモンスライス:適量(オプション)
- 白ごま:適量

### 手順
1. **うどんの準備:**
   - うどんを袋の指示に従って茹でます。しっかりと水で冷やし、水気を切っておきます。

2. **野菜の準備:**
   - キュウリは薄切りに、レタスは手でちぎります。プチトマトは半分に切ります。大葉は細切りにし、ハムも同様に 細切りにします。

3. **盛り付け:**
   - 冷やしたうどんを皿に盛り、ちぎったレタス、スライスしたキュウリ、プチトマト、細切りにしたハム、大葉を上 に均等に散らします。
   - ごま油を少量ずつうどんに回しかけます。

4. **仕上げ:**
   - かいわれ大根を散らし、白ごまを振ります。お好みでレモンのスライスを添え、ポン酢しょうゆをかけて完成です 。

このサラダうどんは、具材が適当に変更できるので、お好みに合わせてアレンジも可能です。たとえば、海藻や異なる種類の野菜、マヨネーズや異なるドレッシングを加えても楽しいですね。暑い季節でも食べやすく、栄養バランスも考えられた一品となっておりますので、ぜひ試してみてください。
あなたの質問を入力してください (終了するには 'quit' と入力): quit

「5番のレシピを教えて下さい。」という質問だけでサラダうどんのレシピを教えてくれる事から、会話内容を記録している事を確認出来ます。

おわりに

今回はChatGPT APIの基本的な使い方を記事にしてみました。

次回はChatGPT APIとBing Search APIを連携させる方法について記事にしていきたいと思います。

← 前の投稿

PythonでChatGPT APIを使ってみる 第2回 Bing Search APIとの連携

次の投稿 →

GitHub の Pull request は Squash and merge にしてみている

コメントを残す