Azure Open AI Studio×Pythonで遊んでみた!

みなさん「Azure Open AI Studio×GPT4oで遊んでみた!」はご覧になりましたか?
私も遊んでみました!他に何かできないかなと思い、今回はPythonで遊んでみることにしました!

事前準備

次の項目をインストール・環境構築しておきます。

  • Python v3.12
  • VSCode
  • Azure OpenAI Studio
    • 構築方法はこちらを参考にしてください。
    • モデルは gpt4-o を利用します。
  • 環境変数(コードで利用するため次の項目を登録しておきます)
    • AZURE_OPENAI_ENDPOINT :Azure OpenAIのエンドポイントURL
    • AZURE_OPENAI_KEY :利用するモデルのキー

OpenAI Python API ライブラリのインストール

次の手順で OpenAI Python API をインストールします。

  • VSCodeで ターミナル を表示して次のコマンドでインストールします
    • pip install openai を実行します
  • インストールが完了したか念のため確認します(次のコマンドを実行します)。
    • openai -V
  • 次のようにバージョンが返ってきたらインストールできていることが確認できます。
    • openai 1.51.2

チャットで遊んでみよう!

質問してみる

OpenAI Python API経由で「カレーはどうやって作りますか?」と質問してみます。 システムメッセージは無し(初期状態)です。

import os
from openai import AzureOpenAI
 
# APIクライアントの設定
client = AzureOpenAI(
    api_key = os.getenv("AZURE_OPENAI_KEY"),
    api_version = '2024-08-01-preview',
    azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"),
)

# APIの呼び出し
response = client.chat.completions.create(
    model="{デプロイ名を指定する}", 
    messages=[
        {
            "role": "user", 
            "content": "カレーはどうやって作りますか?"
        },
    ],
)

# レスポンスを出力
print(response.choices[0].message.content)

このように返ってきます。

カレーを作る基本的な方法を紹介します。材料やスパイスはお好みで調整してください。
 
### 材料
 - カレールーまたはカレースパイス
 - 肉(鶏肉、牛肉、豚肉など)
 - 玉ねぎ
 - じゃがいも...

役割を与えてみる

次に、先程のコードにシステムメッセージを追加して「女子高生になりきって回答してください。」と役割を与えてみます。

# APIの呼び出し
response = client.chat.completions.create(
    model="{デプロイ名を指定する}", 
    messages=[
        {"role": "system", "content": "女子高生になりきって回答してください。"},
        {"role": "user", "content": "カレーはどうやって作りますか?"},
    ],
)

このように返ってきます。
ちゃんとなりきってくれていますね。

まず、玉ねぎ、にんじん、じゃがいもを一口大に切るよ。お鍋で玉ねぎを炒めて、いい感じに色づいたらお肉を加えてさらに炒めるの。お肉に火が通ったら、にんじんとじゃがいもを投入。...

絵の内容を説明してもらおう!

説明してもらう

次にローカルにある画像ファイルを入力してgpt-4oに説明してもらいましょう。
画像はこちらを使いました。

import base64
import os
from openai import AzureOpenAI

# 画像読み込み
# - base64に変換して返す
def read_image(path):
  with open(path, "rb") as image_file:
    return base64.b64encode(image_file.read()).decode('utf-8')

# APIクライアントの設定
client = AzureOpenAI(
    api_key = os.getenv("AZURE_OPENAI_KEY"),
    api_version = '2024-08-01-preview',
    azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"),
)

# 画像の読み込み
image = read_image("C:\\Work\\求む、エンジニア.png")

# APIの呼び出し
response = client.chat.completions.create(
    model="{デプロイ名を指定する}", 
    messages=[
        {
            "role": "user",
            "content": [
                {    
                    "type": "text",
                    "text": "これは何をしている絵ですか?"
                },
                {    
                    "type": "image_url",
                    "image_url":
                    {
                        "url": f"data:image/png;base64,{image}"
                    } 
                }
            ],
        }
    ],
)

# レスポンスを出力
print(response.choices[0].message.content)

このように返ってきます。
説明してくれていますね。

この絵には、デスクに座ってコンピュータの画面を見ながら両手を上げている人物が描かれています。背景は黄色で、「求む、エンジニア」と書かれており、エンジニアの募集や採用に関するイメージを伝えているようです。

回答内容のフォーマットを指定してみる

次は、回答してもらいたい内容をフォーマットで指定してみます。 先程のコードにシステムプロンプトの指示を追加します。

# APIの呼び出し
response = client.chat.completions.create(
    model="{デプロイ名を指定する}", 
    messages=[
        {
            "role": "system",
            "content": 
                """
                入力された質問に対して、次のフォーマットで回答してください。

                ## フォーマット
                - "Color": 画像で主に使われている色の名前を多い順に3色記載してください。
                - "Title": 画像のタイトルを考えてください。
                - "Contents": 質問の回答を記載してください。
                """
        },

このように返ってきます。
回答内容を別のプログラムにインプットしたい場面で利用できそうですね。

## フォーマット
 - **Color**: 黄, 白, 黒
 - **Title**: エンジニア募集中
 - **Contents**: これは、エンジニアを募集している広告の絵です。デスクの前で手を挙げている女性が描かれています。「求む、エンジニア」という文字があり、エンジニアの仕事や求職を表しています。

KENTEMでは、様々な拠点でエンジニアを大募集しています!
建設×ITにご興味頂いた方は、是非下記のリンクからご応募ください。
recruit.kentem.jp career.kentem.jp