为您的 AI 陪伴角色配上泰语声音
亲近感藏在用词里#
英语陪伴角色只能靠说话方式营造亲密感,因为英语没有别处可以安放它:声音暖一些,语速慢一些,句尾柔一些。泰语的做法不同。泰语把关系写进了语法:说话人怎么称呼自己,怎么称呼您,句子用哪个语气词收尾。
所以亲疏程度就在文本里。助手想调整听起来的亲近程度,改的是它写出的文字,而这些文字本来就由语言模型来写。整个过程不涉及任何音频参数,也不需要。下面是同一个意思的四种亲疏程度,由同一个音色朗读。
同一个意思
吃晚饭了吗?我一直在等。
陌生人
称对方为 คุณ,自称 ดิฉัน。这是前台接待的说法,用词无可挑剔,却不像任何人的陪伴。
คุณทานข้าวเย็นแล้วหรือยังคะ ดิฉันรออยู่นะคะ
- 称对方 / 自称
- คุณ / ดิฉัน
- 语气词
- คะ
晚辈
变的只是称呼:คุณ 换成 พี่,ดิฉัน 换成 หนู。助手成了两人中年纪较小的一方,这句话有了亲昵感,但还不算熟络。
พี่ทานข้าวเย็นแล้วหรือยังคะ หนูรออยู่นะคะ
- 称对方 / 自称
- พี่ / หนู
- 语气词
- คะ
朋友
代词 เธอ 和 เรา 拉近了距离,语气词也软化成 จ๊ะ。问的还是同一件事,现在是平辈之间在问。
เธอกินข้าวเย็นแล้วยังจ๊ะ เรารออยู่นะ
- 称对方 / 自称
- เธอ / เรา
- 语气词
- จ๊ะ
更亲近
礼貌语气词不见了。在泰语里,少了它本身就是信号,所以这一级用词最少,听起来却是四级中最亲近的。
กินข้าวยังอ่ะ เรารอเธออยู่
- 称对方 / 自称
- เธอ / เรา
- 语气词
- 无
选好您的产品该处在哪一级,让模型按这一级来写,音色就会照着读出来。把陪伴角色从礼貌调到亲近,改的是 system prompt。底层模型始终不变。
sanaechan · paxa-tts-flash-v2 · 2026-10-15
同一个音色,四种亲疏程度。各行之间唯一的变化是文字。
在用词之上叠加情感#
Paxa TTS Flash v2 的每个音色还接受写在回复里方括号中的指示,例如 [happy] 或 [sad]。陪伴角色的提示词可以让语言模型在写文字的同时写出指示。
亲疏程度仍然来自上面层级里的代词和语气词,指示决定这句话用什么情绪说出来。
- [neutral]0:03
- [happy]0:02
- [sad]0:03
- [angry]0:02
- [afraid]0:03
khanomchan · paxa-tts-flash-v2 · 2026-10-15
Khanom Chan 在每个情绪词下读同一句话。
8 个为近距离说话设计的音色#
音色库共有 50 个音色。这几个专为对着一位听众长时间说话而设计:深夜的低声语气、私语朗读和睡前朗读、贴近麦克风的朗读,以及角色扮演阵容需要的角色音色。音色 ID 是稳定的公开标识符。用户一月份认识的陪伴角色,到了十二月听起来还是原来的样子。
朗读的句子
คืนนี้ไม่ต้องรีบนอนก็ได้ อยู่คุยกันอีกสักหน่อยนะ
- Massaman男主角0:04
- Panang舞台腔0:04
- Oliang深夜电台0:04
- Sanae Chan深夜暖调0:04
- Tub Tim Krob私语朗读0:04
- Luk Chup角色配音0:04
- Woon睡前0:04
- Sangkaya贴耳0:04
paxa-tts-flash-v2 · 2026-10-15
同一句话,每个音色各读一遍。点击名字可进入该音色的页面。
对面的人会注意到什么#
下面四点,没有人会把它们当作功能点名要求。人们说一个陪伴角色像个真人,或者说它不再像了,指的就是这些。
到了十二月,还是同一个人
有人在一月认识了这个角色。九个月的对话之后,声音没有任何变化。这里没有会丢失的录音,也没有会走样的样本,因为音色就是音色库里的一个 ID:再次调用,回答的还是同一个人。声音悄悄变了的陪伴角色,会让人不再信任,而对方通常说不出原因。
您一开口,它就停下
人与人之间,话说到一半被打断再平常不过。被一个停不下来的东西压着说话,才是整个幻觉崩塌的时刻。在这里,句子在当前位置停下,回复的剩余部分直接丢弃。对方回应的,是一个一直在听的陪伴角色。
想完之前就开口
停顿两秒,再流畅地说出一整段,这是机器在组织答案的声音。先说出第一句,后面的还在酝酿,这是人在说话的声音。区别完全在于音频何时开始,而听的人会把它理解为专注。
晚上十一点,可以轻声细语
同一句话,用轻声的睡前朗读、深夜的低沉语气或白天明亮的声音说出来,感受各不相同。这是每个角色做一次的选角决定,可选的音色本就是按这些时段设计的。它对陪伴角色给人的感受,影响比用户在菜单里能找到的任何设置都大。
轮流说话与打断#
语音陪伴角色是一个循环,它显得鲜活还是呆板,取决于这个循环。语音识别转写用户的话,模型写出回复,再由语音合成读出来。循环的两端都在这里运行:Paxa STT Lite Realtime 在自己的 WebSocket 上聆听,并标出每一轮说话在哪里结束,下面四步是说话的那一半。多数实现出错的地方在第四步。
一段对话,一个 WebSocket
实时端点在整个会话期间保持一个 WebSocket。配置只发送一次,之后的每一轮都是在已经预热的连接上发送文本帧。
模型写完一句,就发送一句
不要等完整的回复。模型写完一句就立即发送,后面的内容还在生成时,音频就已经开始返回。泰语没有句末标点。泰语客户端在分句结尾执行 flush。
音频一到就播放
二进制帧按发送顺序承载当前这一轮的音频。每一轮的音频之前都会先收到一条 charged 回执。客户端在听到声音之前,就知道这一轮花了多少。
对方一开口就取消
用户插话时,发送一个 cancel 帧。正在说的句子随即停止,排队中的剩余回复被丢弃,连接保持打开,等待下一轮。直接关闭 WebSocket 也能让声音停下,但会让出并发名额,陪伴角色要等完整重连之后才能再回答。
被打断的一轮,已经合成的句子照常计费,被丢弃的剩余部分从未计费。每帧只发一句,这部分费用因此有了上限。同样的发送方式也让首段音频的延迟保持在低位。
实时流式文档需要多快#
陪伴角色的语音有三种交付方式。选哪一种,取决于产品的形态。
一次性请求轮流对话,一次一条回复
每条回复一个 POST,返回完整文件。这是最直接可行的做法,适合用户先看文字再听声音的场景。
实时连接语音对话
整个会话一个 WebSocket,按句 flush,被打断时用 cancel。这就是陪伴角色的循环,所有套餐都可使用。
专属算力高负载下的实时场景
在公共 API 上,您与所有其他用户共享算力。中位延迟很快,长尾延迟则随整体负载波动。专属算力让长尾也归您自己。我们在自己的测试台上测得首段音频 15 至 20 毫秒,速度为实时的 190 至 300 倍。
| 对话 | 回复数 | 字符数 | 费用 |
|---|---|---|---|
| 一个晚上 | 20 | 2,400 | $0.02 |
| 一位活跃用户,一个月 | 1,200 | 144,000 | $1.44 |
| 1,000 位活跃用户,一个月 | $1,440 | ||
常见问题#
能让声音听起来开心或难过吗?
可以。Paxa TTS Flash v2 的每个音色都接受写在文本里的指示,例如 [happy] 或 [sad],上面的音板用同一个音色读出每个情绪词。亲疏仍来自所选的音色本身,以及一门把亲疏写进用词的语言,上面的层级展示的正是这一点。
可以克隆声音,或者添加自己的角色音色吗?
不能。系统不会从录音复制任何声音。陪伴角色从音色库的 50 个音色中挑选,就像剧组从演员名单里选角。音色库里找不到合适声音的角色,可以在控制台用文字描述设计一个音色,最大的套餐最多可保存 50 个。音色库的 ID 永久不变,设计音色的 ID 在您删除之前保持不变。
用户插话时,陪伴角色怎样停下?
在实时连接上发送 cancel 帧。正在说的句子停止,排队中的剩余部分被丢弃且不计费,同一个连接继续承载下一轮。触发它的是聆听的一端:用户一开口,Paxa STT Lite Realtime 就发出 speech_started 事件。两端的用法都写在实时流式文档里。
同一句话里的泰语和英语都能读吗?
可以,而且用同一个音色。泰语陪伴角色经常在两种语言之间切换。一条从泰语转到英语再转回来的回复,会作为一整句连续读出,中间不换音色,每个音色也都会说中文。每次请求的文本最多 5,000 个字符。
能用音频驱动角色的面部动画吗?
可以。请求词、句或整段话语级别的时间戳,响应就会在音频之外附带时间区间,虚拟形象的口型就按它来动。带时间戳的请求按高于普通语音的费率计费。