You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go调用Google Speech-to-text APIv2遇language_codes非空错误

解决Google Speech-to-text APIv2调用时的language_codes非空错误

问题原因

你使用的是全局默认识别器(projects/my-project/locations/global/recognizers/_),该识别器没有预设语言配置,因此必须在请求中明确指定语言代码。尽管文档标注language_codes为可选字段,但这仅适用于已预先设置语言的自定义识别器,全局默认识别器不包含此预设,所以必须显式传入。

另外你提到RecognitionConfig结构体中找不到LanguageCodes字段,是因为该字段并不直接属于RecognitionConfig,而是嵌套在ManualDecodingConfig中——DecodingConfig是一个oneof类型,你当前使用的AutoDecodingConfig不包含语言配置项,需要切换到ManualDecodingConfig来指定语言。

解决方案

方案1:切换到ManualDecodingConfig并指定语言代码

修改你的RecognitionConfig配置,使用ManualDecodingConfig并添加LanguageCodes字段,示例代码如下:

package main

import (
    speech "cloud.google.com/go/speech/apiv2"
    speechpb "cloud.google.com/go/speech/apiv2/speechpb"
    "context"
    "fmt"
    "log"
)

func main() {
    ctx := context.Background()
    client, err := speech.NewClient(ctx)
    if err != nil {
        log.Fatalf("Failed to create client: %v", err)
    }
    defer client.Close()

    gcsURI := fmt.Sprintf("gs://%s/%s", "my-bucket", "myfile.mp3")

    // 使用ManualDecodingConfig并指定语言代码
    config := &speechpb.RecognitionConfig{
        DecodingConfig: &speechpb.RecognitionConfig_ManualDecodingConfig{
            ManualDecodingConfig: &speechpb.ManualDecodingConfig{
                LanguageCodes: []string{"zh-CN"}, // 替换为你需要的语言代码,比如"en-US"
                // 可选:添加其他解码配置,如音频编码、采样率等
                // AudioEncoding: speechpb.AudioEncoding_MP3,
                // SampleRateHertz: 16000,
            },
        },
    }
    
    audioSource := &speechpb.RecognizeRequest_Uri{
        Uri: gcsURI,
    }

    req := &speechpb.RecognizeRequest{
        Config:     config,
        Recognizer: "projects/my-project/locations/global/recognizers/_",
        AudioSource: audioSource,
    }

    resp, err := client.Recognize(ctx, req)
    if err != nil {
        log.Fatalf("Failed to recognize: %v", err)
    }
    
    for _, result := range resp.Results {
        for _, alt := range result.Alternatives {
            fmt.Printf("\"%v\" (confidence=%.3f)\n", alt.Transcript, alt.Confidence)
        }
    }
}

方案2:创建预设语言的自定义识别器

如果你不想每次请求都指定语言,可以创建一个预设了目标语言的自定义识别器,之后调用该识别器时即可使用AutoDecodingConfig而无需额外指定语言代码:

  1. 登录Google Cloud控制台,进入Speech-to-text服务
  2. 创建新的识别器,设置默认语言代码
  3. 将请求中的Recognizer字段替换为自定义识别器的资源路径(如projects/my-project/locations/global/recognizers/my-custom-recognizer)

内容的提问来源于stack exchange,提问作者mikebridge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 14:15:07