概要
自分が一時間ぐらいぐだぐだ悩んでいたコードをChatGPTがほぼ一瞬で書いてくれて、思わずうわっって気分になった話
UnityでWhisper APIを使用するコードとその使い方は経緯の後に書いてあるので、経緯に興味のない人はそちらをご覧ください。
経緯
今日ChatGPTとWhisperのAPIが公開されました。
自分もWhisperのAPIを試してみて性能が非常に素晴らしかったから、それをUnityでも使用できるようにしようと思ってScriptを書いていたんです。
ただWhisper APIの仕様って以下のような形で、Content-Type: multipart/form-dataなんですね。
複数のファイル形式のデータを送る形式。
curl https://api.openai.com/v1/audio/transcriptions \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: multipart/form-data" \
-F model="whisper-1" \
-F file="@/path/to/file/openai.mp3"
初めて使う形式なのと久しぶりにC#を書いたことが合わさってちょっと苦戦していて、一時間ぐらい悪戦苦闘していたんです。
で、動かねえなぁ、って思いながらコードを書いていたら、そうだ、ちょっとChatGPTにお願いしたらどう書いてくれるか見てみよう、と思ったんです。
それで、以下のようなプロンプトでお願いをしました。
その結果が、以下です。
プロンプト
Unity Webrequestを使用して、以下のcurlを送信するためのスクリプトを作成して
curl https://api.openai.com/v1/audio/transcriptions \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: multipart/form-data" \
-F model="whisper-1" \
-F file="@/path/to/file/openai.mp3"
出力結果
試したら、一つだけエラーがありました。
using UnityEngine.Networking;
がなく、ライブラリを読み込んでいないから、UnityWebRequestが使えない、というエラーが。
ただ、それだけでした。
それだけ直すと、そのまま普通に動きました。
もちろん、このコードは非常に単純で機械にも作りやすいということはあります。
ですが、それでも一時間苦戦したものを一瞬で書いてくれた、ということも事実です。
これから、このようなことがどんどん起きてくるでしょう。
まずは小さな能力から始まり、だんだん複雑な能力まで拡張していって、どんどんAIのほうが能力が高くなっていくでしょう。
5年か、10年か、遅くとも20年以内には、ほとんどの人間の能力をAIが上回る時代がほぼ確実に来るでしょう。
そこまでいかなくても、AIを使用するかしないか、うまく活用できるかできないかで、生産性が何十倍、何百倍にも差が生まれる時代がもう来ています。
AIをうまく使えるようにならなければならない。
今までもそう思ってはいましたが、今日改めてそのことを実感しました。
Unity上でWhisper APIを使うコードとその使い方
1. 以下のコードをUnity上で作成する
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine.Networking;
public class AudioTranscription : MonoBehaviour
{
public string openaiApiKey;
public string filePath;
public string modelName;
IEnumerator Start()
{
string url = "https://api.openai.com/v1/audio/transcriptions";
WWWForm form = new WWWForm();
form.AddField("model", modelName);
byte[] fileBytes = File.ReadAllBytes(filePath);
form.AddBinaryData("file", fileBytes, Path.GetFileName(filePath), "multipart/form-data");
Dictionary<string, string> headers = new Dictionary<string, string>();
headers.Add("Authorization", "Bearer " + openaiApiKey);
UnityWebRequest www = UnityWebRequest.Post(url, form);
www.downloadHandler = new DownloadHandlerBuffer();
foreach (KeyValuePair<string, string> header in headers)
{
www.SetRequestHeader(header.Key, header.Value);
}
yield return www.SendWebRequest();
if (www.result != UnityWebRequest.Result.Success)
{
Debug.Log(www.error);
}
else
{
Debug.Log(www.downloadHandler.text);
}
}
}