devlog

Go で OpenAI Whisper API を叩く

2024-01-21

Go言語で OpenAI の Whisper API を叩いてみました。
音声ファイルを文字起こしでき、めっちゃ便利です。

事前準備

ライブラリとして go-openai を用います

go get github.com/sashabaranov/go-openai

サンプルコード

ローカルに音声ファイルを置いてください。リクエストの際にファイル名を渡します

package main import ( "context" "fmt" "log" "github.com/sashabaranov/go-openai" ) func main() { ctx := context.Background() token := "" // OpenAI API のトークンをセット client := openai.NewClient(token) req := openai.AudioRequest{ Model: openai.Whisper1, FilePath: "sample.wav", // ファイルを指定 } res, err := client.CreateTranscription(ctx, req) if err != nil { log.Fatalf("Error: %s", err.Error()) } fmt.Printf("text: %s", res.Text) // text: こんにちは }

io.Reader を渡す方法

ファイル名を渡す代わりに io.Reader を渡すこともできます。 例えばウェブアプリでローカルにファイルを保存するのが難しい場合、この方法が有用です。

package main import ( "context" "fmt" "log" "os" "github.com/sashabaranov/go-openai" ) func main() { ctx := context.Background() file, err := os.Open("sample.wav") defer file.Close() token := "" // OpenAI API のトークンをセット client := openai.NewClient(token) req := openai.AudioRequest{ Model: openai.Whisper1, FilePath: "sample.wav", Reader: file, // io.Reader を渡す } res, err := client.CreateTranscription(ctx, req) if err != nil { log.Fatalf("Error: %s", err.Error()) } fmt.Printf("text: %s", res.Text) // text: こんにちは }

フォーマットを verbose_json にすると詳細なデータを取得できる

フォーマットとして verbose_json を指定すると、language や duration など詳細なデータが返ってきました。

package main import ( "context" "fmt" "log" "github.com/sashabaranov/go-openai" ) func main() { ctx := context.Background() token := "" // OpenAI API のトークンをセット client := openai.NewClient(token) req := openai.AudioRequest{ Model: openai.Whisper1, FilePath: "sample.wav", Format: openai.AudioResponseFormatVerboseJSON, // フォーマットを verbose_json へ } res, err := client.CreateTranscription(ctx, req) if err != nil { log.Fatalf("Error: %s", err.Error()) } fmt.Printf("text: %s\n", res.Text) // text: こんにちは fmt.Printf("language: %s\n", res.Language) // language: japanese fmt.Printf("duration: %f\n", res.Duration) // duration: 2.810000 }

終わりに

めっちゃ便利です。APIを呼ぶだけなのでウェブアプリに容易に組み込めるかと思います。

  • 作成日
    2024-01-21
  • 更新日
    2024-01-21