spring-ai-alibaba文本转语音的实例
作者:star_1112
spring-ai-alibaba文本转语音
项目环境信息
如下:
- jdk java21
- spring-ai-alibaba 版本为1.0.0.2
- spring-ai 版本为 1.0.0
- spring-boot 版本为 3.5.7
// 传参为你的文件资源
private String getText(Resource resource) {
AudioTranscriptionPrompt prompt = new AudioTranscriptionPrompt(resource, DashScopeAudioTranscriptionOptions
.builder()
.withModel(paraformer-v2) //调用的模型为
.build());
AudioTranscriptionResponse call = dashScopeAudioTranscriptionModel.call(prompt);
AudioTranscription result = call.getResult();
String text = result.getOutput();
return text;
}报错信息
如下:
com.alibaba.cloud.ai.dashscope.common.DashScopeException: get transcription outcome failed
at com.alibaba.cloud.ai.dashscope.api.DashScopeAudioTranscriptionApi.getOutcome(DashScopeAudioTranscriptionApi.java:138)
at com.alibaba.cloud.ai.dashscope.audio.DashScopeAudioTranscriptionModel.toResponse(DashScopeAudioTranscriptionModel.java:224)
at com.alibaba.cloud.ai.dashscope.audio.DashScopeAudioTranscriptionModel.call(DashScopeAudioTranscriptionModel.java:123)
at com.pennon.agent.service.impl.VoiceProcessServiceImpl.getText(VoiceProcessServiceImpl.java:101)
at com.pennon.agent.service.impl.VoiceProcessServiceImpl.voiceToTextByOssUrl(VoiceProcessServiceImpl.java:89)
at com.pennon.agent.service.impl.ChatServiceImpl.getAudioTextAnswer(ChatServiceImpl.java:58)
at com.pennon.agent.websockethandler.AiAudioWebSocketHandler.handleTextMessage(AiAudioWebSocketHandler.java:37)
at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43)
at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75)
at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56)
at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58)
at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113)
at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84)
at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81)
at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:392)
at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130)
at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:486)
at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:286)
at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:129)
at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85)
at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184)
at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164)
at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152)
at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1774)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:973)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:491)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "sentence_id" (class com.alibaba.cloud.ai.dashscope.api.DashScopeAudioTranscriptionApi$Outcome$Transcript$Sentence), not marked as ignorable (4 known properties: "end_time", "begin_time", "text", "words"])
at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 1, column: 4880] (through reference chain: com.alibaba.cloud.ai.dashscope.api.DashScopeAudioTranscriptionApi$Outcome["transcripts"]->java.util.ArrayList[0]->com.alibaba.cloud.ai.dashscope.api.DashScopeAudioTranscriptionApi$Outcome$Transcript["sentences"]->java.util.ArrayList[0]->com.alibaba.cloud.ai.dashscope.api.DashScopeAudioTranscriptionApi$Outcome$Transcript$Sentence["sentence_id"])
at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:61)
at com.fasterxml.jackson.databind.DeserializationContext.handleUnknownProperty(DeserializationContext.java:1180)
at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:2244)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1823)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperties(BeanDeserializerBase.java:1773)
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:463)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1499)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:340)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer._deserializeNoNullChecks(CollectionDeserializer.java:501)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer._deserializeFromArray(CollectionDeserializer.java:358)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:245)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:29)
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:543)
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:587)
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:440)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1499)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:340)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer._deserializeNoNullChecks(CollectionDeserializer.java:501)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer._deserializeFromArray(CollectionDeserializer.java:358)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:245)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:29)
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:543)
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:587)
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:440)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1499)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:340)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)
at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:342)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4971)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3924)
at com.alibaba.cloud.ai.dashscope.api.DashScopeAudioTranscriptionApi.getOutcome(DashScopeAudioTranscriptionApi.java:133)
... 31 more
解决方案
在项目中创建目录类
如下:

把spring-ai-alibaba包中的DashScopeAudioTranscriptionApi类复制过来,在218行位置增加字段即可解决。

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
