見出し画像

OpenAIのgpt-4-vision、DALL·E3、Text to speech、Speech to text、code interpreter、retrievalを触ってみた

11月7日早朝のOpenAI DevDayでアップデートがありましたので、さっそくAPIを触ってみました。

Google Colabを使ってコードを書きました。
文末にColabの共有リンクを貼ってるので、ご自身で動かしたい人は直接アクセスしてみてください。

環境設定

最初に環境設定です。

import os
os.environ["OPENAI_API_KEY"] = "OPENAI_API_KEY"
!pip install --upgrade pip
!pip install openai==1.1.1
import pprint
pp = pprint.PrettyPrinter(indent=2)

画像理解 (gpt-4-vision-preview)

GPTを使って画像を理解します。

from openai import OpenAI

client = OpenAI()

response = client.chat.completions.create(
    model="gpt-4-vision-preview",
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "この画像を説明してください。"},
                {
                    "type": "image_url",
                    "image_url": "https://upload.wikimedia.org/wikipedia/commons/e/e5/Paul_Gauguin_-_D%27ou_venons-nous.jpg",
                },
            ],
        }
    ],
    max_tokens=300,
)

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

実行結果

この画像はポール・ゴーギャンによる有名な絵画「我々はどこから来たのか 我々は何者か 我々はどこへ行くのか」です。1897-1898年に描かれたこの作品は、ゴーギャンの代表作の一つで、彼がフランス領ポリネシアのタヒチで過ごした時期の作品です。

画面全体を左から右へ見ていくと、人生の進行として解釈されることが多い光景が広がっています。右端では小さな子供から始まり、中央では成熟した人々が生活している様子が描かれ、左端には老人の姿が終生を象徴するかのように表現されています。様々なポーズや活動に従事する人々の周りには、豊かな自然や動物が描かれており、神秘的で哲学的な雰囲気を醸

画像生成 (DALL·E 3)

プロンプトから画像を生成します。

from openai import OpenAI
client = OpenAI()

response = client.images.generate(
  model="dall-e-3",
  prompt="ヘラクレスオオカブト",
  size="1024x1024",
  quality="standard",
  n=1,
)

image_url = response.data[0].url
pp.pprint(image_url)

実行結果

DALL·E 3で生成したヘラクレスオオカブト

テキストを音声にする (Text to speech)

テキストを音声に変換します。

from pathlib import Path
from openai import OpenAI
client = OpenAI()

response = client.audio.speech.create(
  model="tts-1",
  voice="alloy",
  input="川から上がった河童さんは、皿が乾いたから、頭がなかなか働かなかった。何だか頭がガンガンなった。"
)

response.stream_to_file("speech.mp3")

実行結果

音声をテキストにする (Speech to text)

音声をテキストに変換します。

from openai import OpenAI
client = OpenAI()

audio_file= open("speech.mp3", "rb")
transcript = client.audio.transcriptions.create(
  model="whisper-1", 
  file=audio_file
)
pp.pprint(transcript.text)

実行結果

'川から上がった加藤さんは皿が乾いたから頭がなかなか働かなかったなんだか頭がガンガンなった'

AI アシスタント (code interpreter)

サンドボックス実行環境でPython コードを作成して実行できる。
方程式を解いたサンプルです。

from openai import OpenAI

client = OpenAI()

# ステップ 1: アシスタントを作成する
assistant = client.beta.assistants.create(
    name="数学の家庭教師",
    instructions="あなたは数学の家庭教師です。コードを書いて実行し、数学の質問に答えてください。",
    tools=[{"type": "code_interpreter"}],
    model="gpt-4-1106-preview"
)

# ステップ 2: スレッドを作成する
thread = client.beta.threads.create()

# ステップ 3: スレッドにメッセージを追加する
message = client.beta.threads.messages.create(
    thread_id=thread.id,
    role="user",
    content="方程式 `3x + 11 = 14` を解きたい。手伝ってもらえますか?"
)

# ステップ 4: アシスタントを実行する
run = client.beta.threads.runs.create(
  thread_id=thread.id,
  assistant_id=assistant.id,
  instructions="ユーザー名を Jane Doe としてください。このユーザーはプレミアムアカウントを持っています。"
)

run = client.beta.threads.runs.retrieve(
  thread_id=thread.id,
  run_id=run.id
)

messages = client.beta.threads.messages.list(
  thread_id=thread.id
)
pp.pprint(messages.data[0].content[0].text.value)

実行結果

'方程式 `3x + 11 = 14` の解は `x = 1` です。'

AI アシスタント (retrieval)

ドキュメントを参照して知識を検索します。
サンプルでは某スマートフォンの取扱説明書(150ページ)を使いました。
スマートフォンの起動方法を質問したサンプルです。

# ファイルをアップロード
file = client.files.create(
  file=open("knowledge.pdf", "rb"),
  purpose='assistants'
)

# ファイルをアシスタントに追加する
assistant = client.beta.assistants.create(
  instructions="あなたはカスタマーサポートのチャットボットです。ナレッジベースを活用して、顧客からの問い合わせに最適な対応をしましょう。",
  model="gpt-4-1106-preview",
  tools=[{"type": "retrieval"}],
  file_ids=[file.id]
)

# スレッドを作成する
thread = client.beta.threads.create()

# スレッドにメッセージを追加する
message = client.beta.threads.messages.create(
    thread_id=thread.id,
    role="user",
    content="起動の方法を教えてください"
)

# アシスタントを実行する
run = client.beta.threads.runs.create(
  thread_id=thread.id,
  assistant_id=assistant.id,
  instructions="ユーザー名を Jane Doe としてください。このユーザーはプレミアムアカウントを持っています。"
)

run = client.beta.threads.runs.retrieve(
  thread_id=thread.id,
  run_id=run.id
)

messages = client.beta.threads.messages.list(
  thread_id=thread.id
)
pp.pprint(messages.data[0].content[0].text.value)

実行結果

'起動するには、サイドキーを2秒以上押してください。起動画面が表示された後、ロック画面が表示されます。もし初めて電源を入れる場合は、画面の指示に従って初期設定を行ってください【9†source】。'

必要に応じてファイルを削除してください。

# ファイル削除
file_deletion_status = client.beta.assistants.files.delete(
  assistant_id=assistant.id,
  file_id=file.id
)
pp.pprint(file_deletion_status)

Google Colabのリンク


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