
ネットリテラシーポメラニアン郁田はるきと学ぶGPT-4oをAPIで使う方法(画像データの扱い方まで)
2024/05/16時点での記事です。

GPT-4oが発表されてLLM界隈が盛り上がってますねぇ~
ふふ~。なんだか楽しそうです!
わたしもGPT-4oさんとお話したいです!
まずは基本の使い方を順番に見ていきましょう!

というわけでAPIでGPT-4oさんとお話しするためにコードを書いていきましょ~
ちなみにわたしはPython 3.10.14で動かしています!
# まずはパッケージをインストールしましょう!
pip install openai

次はAPIkeyの設定を行うので、自分のAPIkeyを取得してくださいね~
APIkeyを間違えて公開しないように気を付けてください!
https://openai.com/index/openai-api/
#みなさんが使うときは自分のAPIkeyを使ってください!
import os
os.environ["OPENAI_API_KEY"] = "わたしのAPIkeyは秘密です!"

次はモデルの設定をしましょ~
ちなみに関数化する必要はないのですが、わたし的にはこっちの方が便利だと思ったのでこう書いています!
import openai
def gpt_output(sys_prompt, user_prompt):
output = openai.chat.completions.create(
model="gpt-4o", #ここを書き換えると別のモデルも使えますよ!
messages=[
{"role": "system", "content": sys_prompt},
{"role": "user", "content": user_prompt},
],
)
return output

モデルはGPT-4o以外にも使えますよ~
詳しくはこちらを参照してくださいね~
https://platform.openai.com/docs/models
#ここを書き換えると入力を変えることができます!
sys_prompt = "あなたはわたしのことをサポートしてくれるアシスタントです。質問に答えてください"
user_prompt = "日本で1番標高が高い山は何ですか?また、2番目は何ですか?"

sys_promptにはGPTさんの役割を、user_promptにはわたしたちの質問などを書いてくださいね~
GPTさんの出力は次のコードで表示できます!
response = gpt_output(sys_prompt, user_prompt)
print(response.choices[0].message.content)

日本で一番標高が高い山は富士山(ふじさん)で、標高は約3,776メートルです。二番目に高い山は北岳(きただけ)で、標高は約3,193メートルです。富士山は静岡県と山梨県にまたがり、北岳は山梨県に位置しています。

これでちゃんとGPTさんとお話できますね~
コードまとめです!(入力はテキストのみ)
# まずはパッケージをインストールしましょう!
pip install openai
#みなさんが使うときは自分のAPIkeyを使ってください!
import os
import openai
os.environ["OPENAI_API_KEY"] = "わたしのAPIkeyは秘密です!"
def gpt_output(sys_prompt, user_prompt):
output = openai.chat.completions.create(
model="gpt-4o", #ここを書き換えると別のモデルも使えますよ!
messages=[
{"role": "system", "content": sys_prompt},
{"role": "user", "content": user_prompt},
],
)
return output
#ここを書き換えると入力を変えることができます!
sys_prompt = "あなたはわたしのことをサポートしてくれるアシスタントです。質問に答えてください"
user_prompt = "日本で1番標高が高い山は何ですか?また、2番目は何ですか?"
response = gpt_output(sys_prompt, user_prompt)
print(response.choices[0].message.content)
画像の入力も試してみましょう!

さてさて!次は画像も入力してみます
画像をURLで入力する方法と、Base64という形式で入力する方法があるのですが……URLで入力するのは少し使い勝手が悪そうですねぇ~
今回はBase64形式で入力していきましょう!
……といっても、pythonにはbase64というモジュールがすでにあるので、とっても簡単ですね!
先に画像をBase64形式にする方法だけ紹介します!
import base64
img_path = "data/test.jpg" #使いたい画像を指定してくださいね~
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode("utf-8")
base64_image = encode_image(img_path)

このコードを簡単に説明すると、指定した画像ファイルをBase64という形式の文字列にしています!
こうするとGPTさんに画像を渡せるんですねぇ~
では早速、GPTさんに画像を渡せるようにコードを書いてみましょう!
#みなさんが使うときは自分のAPIkeyを使ってください!
import os
import openai
import base64 #base64のインポートを忘れずに!
os.environ["OPENAI_API_KEY"] = "わたしのAPIkeyは秘密です!"
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode("utf-8")
def gpt_output(sys_prompt, user_prompt, base64_image): #引数が増えました!
output = openai.chat.completions.create(
model="gpt-4o", #ここを書き換えると別のモデルも使えますよ!
messages=[
{"role": "system", "content": sys_prompt},
{"role": "user", "content": [
{"type": "text", "text": user_prompt},
#次の行を追加しました!
{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{base64_image}"}}
]}
],
)
return output
sys_prompt = "あなたはゲームやアニメに詳しいファンです"
user_prompt = "この画像のキャラクターは誰ですか?"
img_path = "data/icon_cometik_haruki.jpg" #ここで画像のファイルパスを指定!
base64_image = encode_image(img_path)
response = gpt_output(sys_prompt, user_prompt, base64_image) #引数が増えました!
print(response.choices[0].message.content)

ちなみに入力した画像はこちらです!

わたしの画像を入力してみました~
GPTさんはわたしのことを知っているんですかねぇ~
早速GPTさんの返答を見てみましょう!

このキャラクターは、「アイドルマスターシャイニーカラーズ」に登場する樋口円香(ひぐち まどか)です。彼女は放課後クライマックスガールズのメンバーの一人です。

むむむ……違いますねぇ~
この画像はわたしですし、円香ちゃんのユニットは「noctchill」です!
でも画像はきちんと入力できているみたいです!
とりあえずの目的は達成ですね~
PythonのバージョンはPython 3.10.14
記事中のコードはJupyter Lab上で記述し、実行できることを確認したものです