为您的 AI 陪伴角色配上泰语声音

人们评判一个陪伴角色,看两件事:听起来像不像一个真实的人,您一开口它会不会停下。这两件事都属于文本转语音,在这里都已解决。

Sanae Chan

0:06

ค่ำคืนนี้ ปล่อยให้เสียงของฉัน อยู่เป็นเพื่อนคุณจนกว่าจะหลับนะคะ

37 / 50

这是陪伴角色开启对话的一句话。改一改,再听一遍。 输入框最多接受 50 个字符,可选 9 个音色,其中两个正是这里讨论的亲密语气。

亲近感藏在用词里#

英语陪伴角色只能靠说话方式营造亲密感,因为英语没有别处可以安放它:声音暖一些,语速慢一些,句尾柔一些。泰语的做法不同。泰语把关系写进了语法:说话人怎么称呼自己,怎么称呼您,句子用哪个语气词收尾。

所以亲疏程度就在文本里。助手想调整听起来的亲近程度,改的是它写出的文字,而这些文字本来就由语言模型来写。整个过程不涉及任何音频参数,也不需要。下面是同一个意思的四种亲疏程度,由同一个音色朗读。

同一个意思

吃晚饭了吗?我一直在等。

  1. 陌生人

    称对方为 คุณ,自称 ดิฉัน。这是前台接待的说法,用词无可挑剔,却不像任何人的陪伴。

    คุณทานข้าวเย็นแล้วหรือยังคะ ดิฉันรออยู่นะคะ

    称对方 / 自称
    คุณ / ดิฉัน
    语气词
    คะ
  2. 晚辈

    变的只是称呼:คุณ 换成 พี่,ดิฉัน 换成 หนู。助手成了两人中年纪较小的一方,这句话有了亲昵感,但还不算熟络。

    พี่ทานข้าวเย็นแล้วหรือยังคะ หนูรออยู่นะคะ

    称对方 / 自称
    พี่ / หนู
    语气词
    คะ
  3. 朋友

    代词 เธอ 和 เรา 拉近了距离,语气词也软化成 จ๊ะ。问的还是同一件事,现在是平辈之间在问。

    เธอกินข้าวเย็นแล้วยังจ๊ะ เรารออยู่นะ

    称对方 / 自称
    เธอ / เรา
    语气词
    จ๊ะ
  4. 更亲近

    礼貌语气词不见了。在泰语里,少了它本身就是信号,所以这一级用词最少,听起来却是四级中最亲近的。

    กินข้าวยังอ่ะ เรารอเธออยู่

    称对方 / 自称
    เธอ / เรา
    语气词
    无

选好您的产品该处在哪一级,让模型按这一级来写,音色就会照着读出来。把陪伴角色从礼貌调到亲近,改的是 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 是稳定的公开标识符。用户一月份认识的陪伴角色,到了十二月听起来还是原来的样子。

朗读的句子

คืนนี้ไม่ต้องรีบนอนก็ได้ อยู่คุยกันอีกสักหน่อยนะ

paxa-tts-flash-v2 · 2026-10-15

同一句话,每个音色各读一遍。点击名字可进入该音色的页面。

对面的人会注意到什么#

下面四点,没有人会把它们当作功能点名要求。人们说一个陪伴角色像个真人,或者说它不再像了,指的就是这些。

轮流说话与打断#

语音陪伴角色是一个循环,它显得鲜活还是呆板,取决于这个循环。语音识别转写用户的话,模型写出回复,再由语音合成读出来。循环的两端都在这里运行:Paxa STT Lite Realtime 在自己的 WebSocket 上聆听,并标出每一轮说话在哪里结束,下面四步是说话的那一半。多数实现出错的地方在第四步。

  1. 一段对话,一个 WebSocket

    实时端点在整个会话期间保持一个 WebSocket。配置只发送一次,之后的每一轮都是在已经预热的连接上发送文本帧。

  2. 模型写完一句,就发送一句

    不要等完整的回复。模型写完一句就立即发送,后面的内容还在生成时,音频就已经开始返回。泰语没有句末标点。泰语客户端在分句结尾执行 flush。

  3. 音频一到就播放

    二进制帧按发送顺序承载当前这一轮的音频。每一轮的音频之前都会先收到一条 charged 回执。客户端在听到声音之前,就知道这一轮花了多少。

  4. 对方一开口就取消

    用户插话时,发送一个 cancel 帧。正在说的句子随即停止,排队中的剩余回复被丢弃,连接保持打开,等待下一轮。直接关闭 WebSocket 也能让声音停下,但会让出并发名额,陪伴角色要等完整重连之后才能再回答。

被打断的一轮,已经合成的句子照常计费,被丢弃的剩余部分从未计费。每帧只发一句,这部分费用因此有了上限。同样的发送方式也让首段音频的延迟保持在低位。

实时流式文档

需要多快#

陪伴角色的语音有三种交付方式。选哪一种,取决于产品的形态。

陪伴角色说话的成本
对话回复数字符数费用
一个晚上202,400$0.02
一位活跃用户,一个月1,200144,000$1.44
1,000 位活跃用户,一个月$1,440

按每 1,000 个字符 10 积分计算,每条回复 120 个字符,每天 40 条回复。语音按字符计费。说话少的用户花费更少,没人说话的月份不产生费用。

常见问题#

能让声音听起来开心或难过吗?

可以。Paxa TTS Flash v2 的每个音色都接受写在文本里的指示,例如 [happy] 或 [sad],上面的音板用同一个音色读出每个情绪词。亲疏仍来自所选的音色本身,以及一门把亲疏写进用词的语言,上面的层级展示的正是这一点。

可以克隆声音,或者添加自己的角色音色吗?

不能。系统不会从录音复制任何声音。陪伴角色从音色库的 50 个音色中挑选,就像剧组从演员名单里选角。音色库里找不到合适声音的角色,可以在控制台用文字描述设计一个音色,最大的套餐最多可保存 50 个。音色库的 ID 永久不变,设计音色的 ID 在您删除之前保持不变。

用户插话时,陪伴角色怎样停下?

在实时连接上发送 cancel 帧。正在说的句子停止,排队中的剩余部分被丢弃且不计费,同一个连接继续承载下一轮。触发它的是聆听的一端:用户一开口,Paxa STT Lite Realtime 就发出 speech_started 事件。两端的用法都写在实时流式文档里。

同一句话里的泰语和英语都能读吗?

可以,而且用同一个音色。泰语陪伴角色经常在两种语言之间切换。一条从泰语转到英语再转回来的回复,会作为一整句连续读出,中间不换音色,每个音色也都会说中文。每次请求的文本最多 5,000 个字符。

能用音频驱动角色的面部动画吗?

可以。请求词、句或整段话语级别的时间戳,响应就会在音频之外附带时间区间,虚拟形象的口型就按它来动。带时间戳的请求按高于普通语音的费率计费。

免费积分,无需绑卡

登录后,免费积分足够陪伴角色说出最初的几千条回复。写请求之前,您可以先在控制台里用音色库中的任意音色朗读任意一句话。