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而无需额外指定语言代码:
- 登录Google Cloud控制台,进入Speech-to-text服务
- 创建新的识别器,设置默认语言代码
- 将请求中的
Recognizer字段替换为自定义识别器的资源路径(如projects/my-project/locations/global/recognizers/my-custom-recognizer)
内容的提问来源于stack exchange,提问作者mikebridge
相关产品推荐
相关产品推荐

