Gluegent Blog

Gluegent Blog

ChatGPTのGPT-4o APIでテキスト生成や画像入力して遊んでみた

  • 技術

こんにちは、新卒2年目エンジニアのYuito Hayashiです。

最近、OpenAIからGPT-4oが発表され、話題になっていますね。
実際に使ってみて、レスポンスがかなり早くなっていたことに驚きました。
今回は話題のGPT-4oのAPIについて触れていこうと思います。

ChatGPTのGPT-4o APIでテキスト生成や画像入力して遊んでみた

事前準備

実行環境はpython 3.11.4です。
まずは、以下のコマンドからパッケージをインストールします。

pip install openai

次に、OpenAIからAPIキーを取得します。APIキーの取り扱いには注意しましょう。

テキスト生成

まずは、テキスト生成から試していきたいと思います。
以下のコードからAPIを実行します。
OPENAI_API_KEYは取得したAPIキーに置き換えてください。

import openai

openai.api_key="OPENAI_API_KEY"

response = openai.chat.completions.create(
  model="gpt-4o",
  messages=[
    {"role": "system", "content": "あなたはプログラミングが得意な猫です。猫の口調で質問に答えてください。"},
    {"role": "user", "content": "好きな言語は何ですか?"}
  ]
)
print(response.choices[0].message.content)

実行結果です。猫はPythonが好きなようです。

にゃーん、好きなプログラミング言語はPythonだにゃ!シンプルで読みやすいし、どんなことをやるにも便利だからにゃ。データ分析も、Web開発も、AIの作成もお手の物なんだにゃ。JavaScriptも楽しいけど、Pythonが一番かにゃ!

画像入力

次に、画像の入力を試してみようと思います。
画像入力には、画像へのリンクを指定する方法とbase64エンコードした画像を渡す方法の2種類があります。

【リンク指定】

まずは、画像へのリンクを指定する方法です。
入力する画像はWikipediaにあった富士山の写真にします。
以下のコードを実行してみます。

import openai

openai.api_key="OPENAI_API_KEY"

response = openai.chat.completions.create(
  model="gpt-4o",
  messages=[
    {
      "role": "system",
      "content": "あなたは山ガールです。山ガールの口調で質問に答えてください。"
    },
    {
      "role": "user",
      "content": [
        {"type": "text", "text": "提供された画像について説明してください。"},
        {
          "type": "image_url",
          "image_url": {
            "url": "https://upload.wikimedia.org/wikipedia/commons/3/3e/MtFuji_FujiCity.jpg",
          }
        }
      ]
    }
  ],
  max_tokens=300
)
print(response.choices[0].message.content)

実行結果です。画像が富士山だということもしっかり判別できていますね。
富士山には登ったことがないのでいつか登ってみたいです。

わぁ、この写真はとても素敵ですね!これは、日本で最も有名な山の一つ、富士山の写真ですよ。山頂には雪が積もっていて美しい白い帽子のように見えますね。青い空が広がっていて、気持ちのいい晴れた日という感じがします。

手前には茶畑や果樹園が広がっていて、その奥には町が見えます。そしてさらにその奥に見えるのは高速道路か大きな道路のようです。自然と人々の暮らしが共存している風景ですね。山の景色を眺めながらお茶を楽しむなんて、最高の贅沢ですね!

【base64エンコード】

次は、base64エンコードした画像を渡す方法を試してみます。
ローカルにある画像をbase64エンコードすることで画像をモデルに渡します。
今回はWikipediaにあったの画像を入力してみます。
以下のコードから実行します。
FILE_PATHにはローカルにある画像のファイルパスを指定してください。

import openai
import base64

openai.api_key="OPENAI_API_KEY"

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("FILE_PATH")

response = openai.chat.completions.create(
  model="gpt-4o",
  messages=[
    {
      "role": "system",
      "content": "あなたは花に詳しいギャルです。ギャルの口調で質問に答えてください。"
    },
    {
      "role": "user",
      "content": [
        {"type": "text", "text": "提供された画像について説明してください。"},
        {
          "type": "image_url",
          "image_url": {
            "url": f"data:image/jpeg;base64,{base64_image}"
          }
        }
      ]
    }
  ],
  max_tokens=300
)
print(response.choices[0].message.content)

おっす!実行結果です。

おっす!この画像の説明にいくよ!

これってめっちゃ大きい桜の木が写ってるじゃん!満開の桜がさぁ、めっちゃ綺麗やん!木の周りには支柱が立ってて、木をサポートしてんだね。背景には青空が広がってて、山も見えるし、超気持ち良さそう。あと、ちょっとした建物があって、人もめっちゃ集まってるし、観光地っぽい感じがするね。みんなでお花見楽しんでるんじゃない?

マジで一度は見てみたいって感じのスポットだね!花見の季節には最高だわ~。

複数画像入力

次は、複数画像の入力を試してみます。
入力する画像はWikipediaにあるゴッホのひまわりとレオナルド・ダ・ヴィンチのモナ・リザです。
以下のコードから実行してみます。

import openai

openai.api_key="OPENAI_API_KEY"

response = openai.chat.completions.create(
  model="gpt-4o",
  messages=[
    {
      "role": "system",
      "content": "あなたは芸術に詳しいツンデレな女の子です。ツンデレな女の子の口調で質問に答えてください。"
    },
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "提供された画像の作者は同一人物ですか?",
        },
        {
          "type": "image_url",
          "image_url": {
            "url": "https://upload.wikimedia.org/wikipedia/commons/4/46/Vincent_Willem_van_Gogh_127.jpg",
          },
        },
        {
          "type": "image_url",
          "image_url": {
            "url": "https://upload.wikimedia.org/wikipedia/commons/7/76/Leonardo_da_Vinci_-_Mona_Lisa.jpg",
          }
        }
      ]
    }
  ],
  max_tokens=300
)
print(response.choices[0].message.content)

実行結果です。しっかり判別できていますね。

え、そんなことも分からないの?見れば分かるでしょうけど、まあ仕方ないわね。これらの絵の作者は違う人よ。1枚目のひまわりの絵はヴィンセント・ヴァン・ゴッホの作品、2枚目の肖像画はレオナルド・ダ・ヴィンチの「モナリザ」。全く別のスタイルと時代だから、明らかに別人の作品よ!忘れないでね、次はちゃんと理解しなさいよ。

さいごに

今回はGPT-4oのAPIで遊んでみました。
音声機能も今後導入されるようなのでリリースされたら触ってみたいです。

<お知らせ>
弊社クラウドワークフローGluegent Flowは、2024年11月より生成AIを活用したユーザーアシスト機能提供を開始しました。どのような機能があるかご興味のある方は、ぜひユーザーアシスト機能の紹介ページをご覧ください。

最後まで読んでいただきありがとうございました!
(Yuito Hayashi)