我们正在将音频文件发送到Google语音文本API。这些音频文件可以是10秒,也可以是几分钟。我们正在使用Firebase云功能发出这些请求。我们一次运行这些功能的多个实例。如果我们有很多音频文件,则会收到以下错误消息:
Error: 8 RESOURCE_EXHAUSTED: Quota exceeded for quota metric speech.googleapis.com/default_requests and limit DefaultRequestsPerMinutePerProject of service speech.googleapis.com
问题是如何通过长时间运行来更改设置,以减少对单个文件的请求?
希望有人可以提供帮助!
我知道该API每分钟最多有300个请求。如果一次发送大量音频文件,则会超出此范围。 如前所述,我们使用长时间运行的操作来获取结果。如果我们发送1个音频文件,我们希望向API发出1个请求,但是如果我们查看配额页面,则会看到更多信息。 (例如20-50个请求)。我们认为这是由于操作检查响应吗?因此,它向API发出了新请求,以查看是否已经有结果?
问题是我们是否可以将这些值设置为较少定期检查,我们该怎么做?
我们认为这与以下方面有关:
export interface BackoffSettings {
maxRetries?: number;
initialRetryDelayMillis: number;
retryDelayMultiplier: number;
maxRetryDelayMillis: number;
initialRpcTimeoutMillis?: number | null;
maxRpcTimeoutMillis?: number | null;
totalTimeoutMillis?: number | null;
rpcTimeoutMultiplier?: number | null;
}
在这里,我们尝试将initialRetryDelayMillis设置为更高的值。 我们认为这是用于检查结果的,如果我们将其设置为较高的值,它将执行较少的请求以检查结果。事实似乎并非如此。
const audioConfig = {
sampleRateHertz: wavOptions.sampleRate,
encoding: 'LINEAR16',
languageCode: speechLanguage,
enableSpeakerDiarization: false,
enableWordTimeOffsets: true,
enableWordConfidence: true,
};
const request = {
config: audioConfig,
audio: { uri: 'gs://' + AUDIO_BUCKET_NAME + '/' + filePath },
};
const callOptions = {
longrunning: {
backoffSettings: {
initialRetryDelayMillis: 100,
maxRetryDelayMillis: 60000,
retryDelayMultiplier: 1.3,
initialRpcTimeoutMillis: null,
rpcTimeoutMultiplier: null,
maxRpcTimeoutMillis: null,
totalTimeoutMillis: null
}
}
}
callOptions:上面显示的这些值是默认值。如果我们增加initialRetryDelayMillis或retryDelayMultiplier,我们甚至可以得到更多的请求,而不是更少。
const [operation] = await speechClient.longRunningRecognize(request, callOptions);
希望通过增加initialDelayMillis或retryDelayMultiplier来查看拒绝请求的数量,但情况恰恰相反。