核验清单
- ✓先看这次返回的
usage.characters。它不是聊天模型的 token,也不是 mp3 的秒数。流式里句子结束带回的是累计字符,不要和最终用量再加一次。 - ✓确认请求打到百炼的 SpeechSynthesizer,还是智能语音交互的 appkey。交互侧一个汉字计两个有效字符,语音合成再按一百个字符折成一次调用。
- ✓开了 SSML 时,交互侧的标签本身不计。百炼没有写成同一句话,对账仍用它返回的 characters,不要用标签的字节长度去改。
- ✓
hot_fix的替换文本才是实际合成内容。Markdown 过滤只在 cosyvoice-v3-flash 的复刻音色上提供,滤掉的是朗读,账单仍看 characters。 - ✓免费额度只抵华北2(北京)的实时推理。文本模型的 token 余额抵不了语音这一列。新加坡没有这份免费额度。
1. 返回的是字符,不是 token,也不是秒
百炼非实时语音合成 HTTP 接口的返回里,usage.characters 写的是本次请求中计费的有效字符数。流式时,sentence-end 带回句子文本和累计的计费字符数。文档给的那句「我家的后面有一个很大的花园。」在非流式结果、流式中间结果和最终结果里,characters 都是 15。这是接口写明的返回值,不是你肉眼再数一遍以后可以改掉的字数。多句的时候,句子结束事件上的数是累计。最终的 usage.characters 已经是这一次请求的总量,不要把每一句的累计再加到总量上。
模型页把这一项标成语音合成,单位是每万字符。不同模型各有一行,华北2(北京)和新加坡也不是同一行。具体单价以模型页和控制台为准,这里不把某一天的数字写成长期价格。语速、音调、采样率、音量写在请求参数里,不出现在 usage 里。把生成出来的 mp3 时长拿去对这列,对的是另一本账。音频 URL 有效期 24 小时。链接过期以后下载失败,不等于又合成了一次。再调一次接口,才会再记一笔 characters。
同一张智能语音交互的计费项表里,「阿里云百炼语音模型服务」写在语音识别下面,按语音时长计。那一列不是 CosyVoice 合成的字符。识别按秒,合成按字符,两笔可以出在同一个云账号上,不能收成「语音相关,所以应该只付时长」。
2. 另一套接口把汉字计成两个
智能语音交互的计费项把语音合成的调用次数按每次请求传入的 UTF-8 字符数折算。一百个字符以内,含一百个,记为一次。每再超出一百个字符,增加一次。单次请求最多传入三百个字符。一个汉字算两个有效字符,英文字母、全角和半角标点算一个,SSML 标签不计入。页面自己的例子是:102 个字符记为两次,201 个字符记为三次。同一张表上,长文本语音合成的计费单元写成合成字数,和按次数的那一行不是同一列。
CosyVoice 流式接口在 SynthesisCompleted 里用 payload.measureLength 报这次的字符计量,口径同样是一个汉字计为两个字符,一个英文字母、标点或句子中间的空格计为一个字符。同一会话里,单次合成不超过一万字符,累计不超过二十万字符。这一路只提供商用版,不支持试用。完成事件报的是字符计量,不是直接的调用次数。你在账单上看到的是次数还是字数,先对计费项里的那一行,不要把 measureLength 当成已经折好的次数。
所以同一段中文,百炼示例给的是 characters 15,交互侧会先把汉字乘二,再按一百个去折调用次数。百炼的接口页没有把「一个汉字等于几个字符」写成和交互侧同一句话,对账用它返回的 15,不要用交互侧的两倍去乘你提交的文本,再拿去改百炼的账单。两套数字不能相加,也不能用其中一套估算另一套。先确认请求打到的是百炼的 SpeechSynthesizer,还是智能语音交互的项目 appkey。
3. 标签、替换和过滤改的是送进去的文本
百炼要使用 SSML,必须把 enable_ssml 设为 true,正文换成标记。交互侧写明标签本身不计字符,只计要合成的文本。百炼没有把这句写成同一条规则。返回的 characters 才是它认的数。标签很长,不代表这一笔就按标签的字节计。标签很短,也不代表可以自己把标记从字数里扣掉。
百炼的 hot_fix.replace 在合成前把指定词换成目标文本,文档写替换后的文本才是实际合成内容。你提交的原词和读出来的词可以不是同一串。拼音标注改的是读音,不是把拼音字母再送去朗读。对账仍以返回的 characters 为准,不要用替换前的字数去改它,也不要假定替换一定让字符变多或变少。
Markdown 过滤只在 cosyvoice-v3-flash 的复刻音色上提供。打开以后,合成前会滤掉标记符号,避免把井号和星号读出来。滤掉的是朗读。账单仍看 characters,不要假设星号一定免费,或一定按原文照单全收。v2 不支持这段热修复。别的模型的复刻音色没有这个 Markdown 开关。开关不在,不代表那些符号会按你希望的方式消失。
4. 免费额度对不上旁边的 token
百炼新人免费额度只给华北2(北京),开通前要完成实名,否则不发。有效期 90 天,从开通、模型发布或申请通过里较晚的那天起算,不用也不会暂停。到期剩余作废,不补发、不延期、不重置。同一实名主体再注册一个账号,领不到第二份。额度只抵模型实时推理。批量调用、调优、部署、自定义模型、PAI-DSW 和 OSS 不在里面。不同模型的额度不互通,带日期的快照和最新版是两个模型,用尽一个不会自动切到另一个。主账号和 RAM 子账号共用一份。
页面说的额度通常是 token,输入和输出共用。语音合成在模型页上是每万字符,不是那一池 token。文本模型还剩多少,抵不了这一列。新加坡没有这份免费额度。抵扣顺序是免费额度、资源包、节省计划,然后才是按量。Token Plan 或 Coding Plan 的专属 API Key 不消耗免费额度,会直接按量。控制台剩余量是分钟级,要手动刷新。开了用完即停,额度尽了就停。没开,进行中的调用不会被掐断,超出的部分按量后付。这些规则和模型免费额度那篇是同一本账的开关,不是语音字符的计算公式。
联网搜索按次另计,是搜索那篇。知识库从创建起按规格小时走,是知识库那篇。三列都可以和这次的 characters 同时出现。搜索次数、知识库小时、语音字符,不能收成「已经在调一个模型,所以只付 token」。
5. 充值缩不短这些字符
对账按这一次实际走的接口分列。百炼看返回的 characters,流式不要把累计数再加一次,语速和采样率不在这列里,24 小时后的链接失效也不是新的一笔。交互侧先用汉字计二的那把尺子读 measureLength,再看账单上是按一百个字符折成的调用次数,还是长文本那一行的合成字数。SSML 标签在交互侧不计。替换和 Markdown 过滤改的是送进引擎的文本,不改「以返回值为准」这一条。免费额度只抵北京的实时推理,文本模型的 token 余额单独留在它自己的模型上。
给阿里云账户充值,发生在这些列扣款之前。链上把稳定币换成能充进账户的资产,不会把汉字从两个有效字符改成一个,也不会让文本模型的 token 去付语音这一列。需要这一步时,可以用无需注册、非托管的 AllSwap 完成链上兑换。兑换成功只说明资产换了手。字符仍按这次接口返回的量计。