openai apiの追加
hirai 2023/05/13(Sat) 18:38
初めまして。C++は初心者ですがOpenAIのAPIを使いたくて
OpenSiv3Dの勉強を始めました。
https://api.openai.com/v1/audio/transcriptions
上記文字起こしAPIをSivOpenAI.cppに下記のように追加しました。
(関連箇所のみ抜粋)
namespace s3d
{
namespace detail
{
// OpenAI の文字起こし API の URL
constexpr URLView AudioV1URL = U"https://api.openai.com/v1/audio/transcriptions";
// 文字起こし API に送信するリクエストを作成する
[[nodiscard]]
static std::string MakeTransRequest(const StringView filePath)
{
return "-F file=\"@" + filePath.toUTF8() + "\"";
}
[[nodiscard]]
static HashTable<String, String> MakeFileHeaders(const StringView apiKey)
{
return{
{ U"Content-Type", U"multipart/form-data" },
{ U"Authorization", (U"Bearer " + apiKey) },
};
}
}
namespace OpenAI
{
namespace Audio
{
AsyncHTTPTask TransAsync(const StringView apiKey, const StringView filePath)
{
// API キーが空の文字列である場合は失敗
if (apiKey.isEmpty())
{
return{};
}
const std::string data = detail::MakeTransRequest(filePath);
const auto headers = detail::MakeFileHeaders(apiKey);
return SimpleHTTP::PostAsync(detail::AudioV1URL, headers, data.data(), data.size());
}
String GetContent(const JSON& response)
{
if (not response)
{
return{};
}
if (not response.hasElement(U"text"))
{
return{};
}
return response[U"text"].getString().trimmed();
}
}
}
}
アプリから
m_task = OpenAI::Audio::TransAsync(m_api_key, U"C:\Data\source\OpenAIManager\App\audio.wav");
のように呼び出しているのですが、bad requestになってしまいます。
間違っているところや、そもそも勘違いしている所などをご指摘いただきたいです。
よろしくお願いいたします。
Reputeless 2023/05/14(Sun) 15:43