spring-ai-alibaba文本转语音的实例

 更新时间:2025年11月07日 08:38:20   作者:star_1112  
在使用Spring-ai-alibaba进行文本转语音项目时,遇到DashScopeException错误,原因是响应中的字段未被识别,通过在项目中创建目录类,复制DashScopeAudioTranscriptionApi类并在指定位置增加字段,解决了该问题

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行位置增加字段即可解决。

总结

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

相关文章

  • springcloud feign调其他微服务时参数是对象的问题

    springcloud feign调其他微服务时参数是对象的问题

    这篇文章主要介绍了springcloud feign调其他微服务时参数是对象的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Java IO文件过滤器对命令设计模式的使用

    Java IO文件过滤器对命令设计模式的使用

    java io流里面使用到了很多的设计模式,最典型的就是装饰模式,还有命令模式,下面分两部分来讲Java IO文件过滤器对命令设计模式的使用,一起看看吧
    2017-06-06
  • Java队列数据结构的实现

    Java队列数据结构的实现

    这篇文章主要介绍了Java队列数据结构的实现,队列是一种特殊的线性表,只允许在表的队头进行删除操作,在表的后端进行插入操作,队列是一个有序表先进先出,想了解更多相关资料的小伙伴可以参考下面文章的详细内容
    2021-12-12
  • java 过滤器模式(Filter/Criteria Pattern)详细介绍

    java 过滤器模式(Filter/Criteria Pattern)详细介绍

    这篇文章主要介绍了java 过滤器模式(Filter/Criteria Pattern)详细介绍的相关资料,需要的朋友可以参考下
    2016-10-10
  • spring boot和mybatis集成分页插件

    spring boot和mybatis集成分页插件

    这篇文章主要为大家详细介绍了spring boot和mybatis集成分页插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • Java实例项目零钱通的实现流程

    Java实例项目零钱通的实现流程

    本篇文章为你带来Java的一个新手实战项目,是一个零钱通系统,项目来自于B站韩顺平老师,非常适合新手入门练习,感兴趣的朋友快来看看吧
    2022-03-03
  • Zookeeper启动指定JDK版本方式

    Zookeeper启动指定JDK版本方式

    文章讲述了如何在Linux系统上启动指定JDK版本的Zookeeper,包括下载JDK、解压文件、修改zkEnv.sh脚本和重启Zookeeper的过程
    2025-02-02
  • Springsession nginx反向代理集成过程

    Springsession nginx反向代理集成过程

    这篇文章主要介绍了Springsession nginx反向代理集成过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • 解决java调用dll报Unable to load library错误的问题

    解决java调用dll报Unable to load library错误的问题

    这篇文章主要介绍了解决java调用dll报Unable to load library错误的问题。具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Java设计模式以虹猫蓝兔的故事讲解桥接模式

    Java设计模式以虹猫蓝兔的故事讲解桥接模式

    桥接是用于把抽象化与实现化解耦,使二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响
    2022-04-04

最新评论