优谷·雅言SDK 文档2.0.0

Java SDK 变更记录

服务端 Java SDK com.shengzhiai.yugu:yugu-java-sdk 的版本记录。格式遵循 Keep a Changelog,见 https://keepachangelog.com/zh-CN/1.1.0/,版本号遵循语义化版本,见 https://semver.org/lang/zh-CN/。破坏性变更只在主版本号升级时出现,每个版本按新增,变更,修复,破坏性变更分类记录。

查看 Markdown

2.1.0 - 2026-10-12#

新增#

  • 朗读进度:实时评测在收音过程中报告参考文本里哪些字或词已经读过。原生实时评测的 EvaluateConfig 新增 realtimeFeedback(true),开始帧带 "realtimeFeedback": true,未开启时开始帧与 2.0.0 相同,整段评测不发送该字段。声通兼容实时评测沿用 CompatConfig.realtimeFeedback(true)。进度只对 16 kHz,16 位,单声道 PCM 生效,一般比朗读晚 1 到 2 秒,随网络情况变化。
  • StreamPartial 新增 hasProgress(),getProgress(),getReadUnits(),getMatchedUnits(),getTotalUnits(),取自进度帧的 result.progress 与三个单位数,两条通道相同。getProgress() 按原文顺序列出参考文本的每个字或词的朗读状态,元素为新增的 ReadingWord,含 getWord(),isRead(),isMatched(),按值比较。没有进度时三个单位数为 -1,getProgress() 为空列表,getBytes() 与 getRaw() 不变。
  • 兼容通道的进度帧沿用声通 realtime_feedback 中间结果的结构,另带空串 recordId,kernel_version,resource_version 与声通式增量 words。SDK 不解析这几个字段,可从 getRaw() 读取。
  • 断线重连后的进度:缓冲策略为 REPLAY 时会话记住上一次回调的已读单位数与一致单位数,只回调两者都不小于上一次的进度帧,重放音频期间服务端从零重算的进度不会让界面倒退,丢弃的进度帧写 DEBUG 日志。缓冲策略为 DROP 时新会话只评重连之后的音频,每次重连成功后记录清零,新会话的进度帧照常回调。没有进度的帧照常回调。
  • 测试:线上录制的四份进度帧样例的解析,兼容帧的声通式字段原样保留,重连后的进度过滤与 DROP 下的清零,基于平台模拟服务的原生与兼容进度,单位不一致,关闭进度,REPLAY 与 DROP 断线重连集成测试,沙箱上按实时速度送入客户例句的进度测试。

变更#

  • onPartial 在原生与兼容两条通道都回调,调用 end() 之后的 ENDING 状态也会回调,onResult 总在最后。
  • 请求带 User-Agent: yugu-java-sdk/2.1.0。

2.0.0 - 2026-10-08#

破坏性变更#

  • Maven 坐标由 tech.dragonai.yugu:yugu-java-sdk 改为 com.shengzhiai.yugu:yugu-java-sdk,包名由 tech.dragonai.yugu 改为 com.shengzhiai.yugu。源码中的 import 需要整体替换。
  • 默认地址由 https://ygyx.dragonai.tech 改为 https://open.shengzhiai.com,WebSocket 默认地址改为 wss://open.shengzhiai.com。
  • YuguException 改为非受检异常,按错误类别派生 AuthException,RateLimitException,QuotaExceededException 等子类。原有的 getBizCode() 由 getCode() 取代,没有错误码时返回 0,没有 HTTP 状态时 getHttpStatus() 返回 0。
  • evaluateCompat 的参数改为音频加 CompatConfig,streamEvaluate 的参数改为 EvaluateConfig 加监听器,streamEvaluateCompat 的参数改为 CompatConfig 加监听器。
  • getReport 返回 ReportResult,原来的 data 节点由 getData() 取得。
  • StreamListener 调整:onResult(EvalResult) 只回调终评,进度帧改由 onPartial 回调。onError 的参数改为 YuguException。onConnected 与 onStarted 不再带参数。新增状态,重连与预检回调。
  • StreamSession 的 sendAudio,end,close 改为立即返回,不再返回 CompletableFuture,终评结果由 result() 取得。sendText 与 sendAudioBase64 移除。
  • EvalResult.getWarnings() 改为返回 Warning 列表,含警告码与说明,原来的整数列表由 getWarningCodes() 取得。
  • Dimensions 的 accuracy 与 pronunciation 分开保存,getAccuracy() 在平台未返回准确度时回落到发音分。
  • 演示程序移出 SDK 的 jar,改为独立工程 demos/java-cli。

新增#

  • 幂等键:写操作自动生成 32 位小写十六进制的 Idempotency-Key,可通过 RequestOptions 指定,重试与重连复用同一个键。结果提供 getIdempotencyKey() 与 isReplayed(),后者对应响应头 Idempotency-Replayed: true 与实时结果帧的 replayed 字段。
  • 重试与退避:RetryPolicy 默认最多重试 2 次,退避约 200 毫秒与 400 毫秒,抖动正负 30 %,遵守 Retry-After,整次调用受 300 秒总期限约束。只重试连接失败,读超时,HTTP 429,HTTP 5xx 与错误码表标记为可重试的错误码。每次重试写 WARN 日志,同时回调 EventListener.onRetry。
  • 错误分类:ErrorCategory 枚举与 14 个异常子类,YuguErrors.isRetryable 公开可重试判定,YuguErrors.fromCode 与 fromWarning 按码构造异常,错误码常量由 spec/errors.json 生成到 ErrorTable。异常保留错误码,HTTP 状态,幂等键,记录号,尝试次数与截断到 4 KB 的原始响应体。
  • 实时会话状态机:SessionState 共 10 个状态,getState() 与 isActive() 可随时查询,回调保证恰有一次结果或错误,onClosed 最后到达,同一会话的回调不并发。
  • 断线重连:ReconnectPolicy 默认连续重连 8 次,等待合计约 23 秒,默认设置可以撑过 10 秒左右的断网。覆盖传输故障,异常关闭,心跳超时,连接超时,终评超时与可重试的错误帧。一个会话累计最多重连 maxAttempts 的 3 倍,默认 24 次。关闭码 1002,1003,1007,1008,1009,1010 以及 4000 到 4999 不重连,直接以 90005 失败。AudioBufferPolicy 提供 REPLAY,DROP,FAIL 三种音频处理方式,默认 REPLAY 重放全部音频。
  • 心跳:每 15 秒发送 WebSocket 协议层 ping,30 秒收不到 pong 判定断线。结束后等待终评默认 300 秒。
  • 生命周期:YuguClient 实现 AutoCloseable,close() 可重复调用,取消未结束的会话,关闭后的调用抛出错误码 90004。StreamSession 的 cancel() 与 close() 可重复调用。
  • 音频预检:AudioPrecheckMode 提供 OFF,WARN,REJECT 三种模式,检查时长,大小,静音,音量与格式,本地码 90101 到 90105,REJECT 模式在上传前拦截无效音频。大小上限为整段评测 50 MB,实时评测单轮 10 MB,时长上限 300 秒。
  • 外部音频:evaluate 与 evaluateCompat 接受 byte[],File,Path,InputStream 与原始 PCM,AudioSource.pcm 自动封装为 WAV。
  • 可观测性:LogLevel 五个级别,YuguLogger 接入任意日志框架,日志中的 secretKey,签名与令牌全部脱敏。EventListener 提供请求开始,请求结束,重试,会话状态与重连五个指标回调。
  • 结果模型:逐句分数 SentenceScore,连读题型 ConnectedScores,开放题 OpenScores,英文单词的重音,字母发音与音节,getRaw() 保留完整响应。连读题型没有 overall 字段,getOverall() 改取 connected_overall。
  • strictAudio 选项:平台返回警告 1001 时抛出 AudioQualityException。
  • CancellationToken:从其他线程取消进行中的 REST 调用。
  • 发布物:-sources.jar 与 -javadoc.jar,许可证,开发者与源码仓库信息,Maven Wrapper,JaCoCo 覆盖率门槛 70 %,持续集成脚本 ci/java.sh。
  • 测试:签名向量,错误码表全量映射,各评测模式的结果解析,multipart 组装,退避计算,实时会话状态机,基于平台模拟服务的幂等,重试与断线集成测试。

变更#

  • 最低 Java 版本由 17 降为 11。
  • 原生评测的 config 分片不带文件名,Content-Type 为 application/json; charset=utf-8,签名集合为 config 分片的完整 JSON 文本。
  • 兼容评测的 coreType 只放在路径中,不再作为表单字段发送,签名集合为实际发送的表单字段。
  • 语音合成请求体中的数字一律写成不带指数的十进制,签名使用相同的文本。
  • 请求带 User-Agent: yugu-java-sdk/2.0.0。
  • 实时评测单次 sendAudio 的音频按不超过 32000 字节一帧发送,低于平台 128 KB 的帧上限。
  • HTTP 客户端固定使用 HTTP/1.1。
  • 只配置 baseUrl 时,WebSocket 地址由其推导。

修复#

  • 报告查询的记录号按路径段编码,空格不再被编码为加号。
  • 实时会话的发送改为有序队列,并发调用 sendAudio 不再触发 IllegalStateException。
  • 结果中 {code, message} 形式的警告不再丢失。
  • 实时会话断线时不再静默结束,调用方总能收到结果,错误或取消之一,随后收到 onClosed。

1.0.0 - 2026-06-24#

新增#

  • 首个版本,坐标 tech.dragonai.yugu:yugu-java-sdk:1.0.0,Java 17。
  • 原生整段评测 evaluate,声通兼容整段评测 evaluateCompat,语音合成 tts,报告查询 getReport。
  • 原生实时评测 streamEvaluate 与声通兼容实时评测 streamEvaluateCompat。
  • 签名器 Signer,与平台共用签名一致性向量。
  • 结果模型 EvalResult,Dimensions,WordScore,AsrAlignment。
更新于 2026-10-12