見出し画像

LLMポメラニアン郁田はるきと学ぶ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上で記述し、実行できることを確認したものです

この記事が気に入ったらサポートをしてみませんか?