Paxa Labs

เพื่อน AI และแชทบอทบทบาทสมมติภาษาไทย

ให้เพื่อน AI หรือตัวละครบทบาทสมมติภาษาไทยมีเสียงเป็นของตัวเอง เปิด WebSocket เดียวต่อหนึ่งบทสนทนา สั่งหยุดได้เมื่อถูกพูดแทรก และใช้รหัสเสียงคงที่ที่ทำให้ตัวละครเป็นเสียงเดิมเสมอ

ไอเดียให้ลองเล่น

เปิดบทสนทนาตอนค่ำ

คืนนี้เป็นยังไงบ้าง เล่าให้ฟังหน่อยสิ เราอยากรู้จริง ๆ นะ

จำเรื่องเมื่อวานได้

เมื่อวานที่เล่าเรื่องงานให้ฟัง วันนี้ดีขึ้นบ้างไหม

ตัวละครในฉากหนึ่ง

อย่าเพิ่งเดินออกไปสิ ฉันยังพูดไม่จบเลยนะ กลับมานั่งลงก่อน

บอกราตรีสวัสดิ์

หลับให้สบายนะ พรุ่งนี้ตื่นมาค่อยเล่าให้ฟังต่อก็ได้

ทุกการ์ดเล่นคลิปจริงที่สร้างจากสคริปต์นั้น ๆ ด้วยเสียงนมเย็น เปิดในหน้าเสียงพูดเพื่อให้พูดข้อความของคุณเองได้

ทำให้เพื่อน AI พูดได้อย่างไร

เพื่อน AI คือบทสนทนาที่ไม่มีงานรออยู่ตอนจบ เรื่องนี้เปลี่ยนหน้าที่ของชั้นเสียงไปทั้งหมด บอทบริการพูดผลลัพธ์ที่เขียนสคริปต์ไว้ไม่กี่แบบ ส่วนเพื่อน AI พูดทุกอย่างที่โมเดลเขียนขึ้นมา ตลอดทั้งคืน ด้วยเสียงที่ผู้ใช้ตัดสินใจไปแล้วว่าเป็นของใครคนหนึ่ง ลองถามคนที่เลิกเปิดแอปว่าทำไม คำตอบมักไม่ได้อยู่ที่บทที่เขียน แต่อยู่ที่วันหนึ่งเสียงมันเพี้ยนไปนิดหนึ่ง หรือมันพูดต่อทั้งที่เรากำลังจะพูดอะไรบางอย่าง สองอย่างที่รับน้ำหนักตรงนี้ อย่างแรกคือเสียงที่ไม่เพี้ยนไปตามเวลา ซึ่งรหัสเสียงคงที่ในแคตตาล็อกให้มาอยู่แล้ว อย่างที่สองคือการพูดแทรก คนที่คุยกับเพื่อน AI ย่อมพูดแทรกขึ้นมา และเพื่อน AI ที่ยังอ่านย่อหน้าเดิมต่อทั้งที่ไม่มีใครฟังแล้ว จะหมดความเป็นคนทันที ประเทศไทยเป็นตลาดที่เริ่มจากแชท LINE มีผู้ใช้ประจำเดือน 56 ล้านคน คิดเป็นร้อยละ 78.2 ของประชากร เพื่อน AI ภาษาไทยจึงมักเป็นสินค้าแชทที่เรียนรู้ที่จะพูดได้

ที่มา:DataReportal (2026)(เปิดในแท็บใหม่)

  1. เปิดซ็อกเก็ตพร้อมกับที่บทสนทนาเริ่ม

    WebSocket เดียวรับทั้งเซสชัน ส่งโมเดล เสียง และรูปแบบไฟล์ครั้งเดียวตอนเปิด หลังจากนั้นทุกตาคือเฟรมข้อความบนการเชื่อมต่อที่อุ่นอยู่แล้ว

  2. สั่งสังเคราะห์ทีละประโยค

    ส่งประโยคทันทีที่โมเดลเขียนจบ เสียงจะเริ่มกลับมาตั้งแต่ส่วนที่เหลือยังเขียนไม่เสร็จ และตาที่ถูกพูดแทรกกลางคันก็เหลือให้จ่ายแค่ประโยคเดียว

  3. สั่งหยุดทันทีที่อีกฝ่ายเริ่มพูด

    เฟรม cancel หยุดรอบที่กำลังพูดและทิ้งส่วนที่ค้างในบัฟเฟอร์ เซสชันยังเปิดอยู่ และเฟรมข้อความถัดไปเริ่มตาใหม่ได้ทันที

หนึ่งซ็อกเก็ต หลายตา และการพูดแทรกหนึ่งครั้ง

ws /v1/tts/live
-> {"type":"start","model":"paxa-tts-flash-v2","voice":"sanaechan"}
<- {"type":"started","connection":"c_8f21","voice":"sanaechan"}
-> {"type":"text","text":"คืนนี้เป็นยังไงบ้าง"}
<- {"type":"charged","seq":1,"chars":19,"credits":0.19}
<- [เฟรมเสียงไบนารี]
<- {"type":"flushed","seq":1}
-> {"type":"text","text":"เล่าให้ฟังหน่อยสิ เราอยากรู้จริง ๆ นะ"}
<- {"type":"charged","seq":2,"chars":37,"credits":0.37}
<- [เฟรมเสียงไบนารี]
   # ผู้ใช้เริ่มพูดแทรก
-> {"type":"cancel"}
<- {"type":"cancelled","seq":2}
-> {"type":"text","text":"ได้ ๆ ฟังอยู่"}

ตาที่ 2 ยังคงค่าบริการ 0.37 เครดิตตามใบเสร็จเดิม ซึ่งเป็นส่วนต่างจากยอดสะสมของการเชื่อมต่อ ไม่มีอะไรค้างอยู่ในคิวหลังจากนั้น และการเชื่อมต่อเดิมรับตาถัดไปต่อได้โดยไม่ต้องเชื่อมใหม่

ค่าเสียงของเพื่อน AI

ค่าเสียงของเพื่อน AI
บทสนทนาจำนวนคำตอบตัวอักษรค่าใช้จ่าย
หนึ่งค่ำคืน202,400$0.02
ผู้ใช้ประจำหนึ่งคน หนึ่งเดือน1,200144,000$1.44
ผู้ใช้ประจำ 1,000 คน หนึ่งเดือนประมาณ $1,440

คำนวณที่ 10 เครดิตต่อ 1,000 ตัวอักษร จากคำตอบยาว 120 ตัวอักษร วันละ 40 คำตอบ ค่าบริการคิดตามตัวอักษรที่พูดออกไปจริง

ชีวิตของตัวละครหนึ่งตัว

สัปดาห์ที่ 1

เลือกเสียง

คุณลองฟังทั้งแคตตาล็อกแล้วเลือกมาหนึ่งเสียง การเลือกนั้นกลายเป็นรหัสหนึ่งบรรทัดในไฟล์ตั้งค่า และเป็นครั้งสุดท้ายที่ใครต้องคิดเรื่องนี้

เดือนที่ 3

ระดับความสนิทเข้าที่

คุณดูบทสนทนาจริงมาพักหนึ่งแล้วขยับตัวละครจากระดับสุภาพไปหาระดับสนิท นั่นคือการแก้ prompt คำสรรพนามและคำลงท้ายที่มันเขียนเปลี่ยนไป ส่วนเสียงที่อ่านยังเป็นเสียงเดิม

เดือนที่ 9

มีคนผูกพันกับมันแล้ว

เสียงยังเป็นเสียงเดียวกับที่เขารู้จักตั้งแต่แรก เพราะรหัสของเสียงรุ่นเสถียรให้เสียงเดิมเสมอ ไม่มีอะไรเสื่อม ไม่มีอะไรหมดอายุ และไม่ต้องอัดใหม่เมื่อผู้ให้บริการเปลี่ยนอะไรสักอย่าง

เดือนที่ 18

เพิ่มตัวละครตัวที่สอง

อีกหนึ่งรหัสเสียง อีกหนึ่ง prompt ตัวละครตัวแรกไม่ถูกแตะเลย และผู้ใช้ที่คุยกับตัวแรกอย่างเดียวจะไม่รู้สึกถึงความเปลี่ยนแปลงใด ๆ

ไม่มีขั้นตอนไหนบนไทม์ไลน์นี้ที่ต้องใช้แท็กอารมณ์ สิ่งที่ทำให้ตัวละครเปลี่ยนไปตามเวลาคือบทที่เขียนและเสียงที่เลือก

สำหรับนักพัฒนา

ตัวอย่าง TypeScript และ Python เปิดซ็อกเก็ตสด ส่งข้อความเข้าไปตามที่มี แล้วอ่านใบเสร็จกับเฟรมเสียงกลับมา ส่วนตัวอย่างออปชันแสดงฟิลด์เสียง โมเดล และรูปแบบไฟล์ที่ตัวละครหนึ่งตัวตั้งครั้งเดียวแล้วใช้ไปตลอด

เอกสารอ้างอิง API ฉบับเต็ม
// Runs on Bun as-is; on Node, `import WebSocket from "ws"` accepts
// the same constructor options. Browsers cannot send this header, and
// API keys never ship to browsers anyway.
const socket = new WebSocket("wss://api.paxalabs.com/v1/tts/live", {
  headers: { Authorization: `Bearer ${process.env.PAXA_API_KEY}` },
});
socket.binaryType = "arraybuffer";

socket.onopen = () => {
  socket.send(JSON.stringify({
    type: "start",
    model: "paxa-tts-flash-v2",
    voice: "khanomkrok",
    timestamps: "word",
  }));
  // Send text whenever it becomes available, token by token if you like.
  socket.send(JSON.stringify({ type: "text", text: "สวัสดีครับ ยินดีต้อนรับสู่ Paxa Labs" }));
  socket.send(JSON.stringify({ type: "flush" }));
  socket.send(JSON.stringify({ type: "end" }));
};

socket.onmessage = (event) => {
  if (typeof event.data === "string") {
    const message = JSON.parse(event.data);
    if (message.type === "done") socket.close();
    return;
  }
  player.feed(new Uint8Array(event.data)); // binary frames are audio
};

ฟังเสียงจริง

เสียงบางส่วนจากทั้งหมด 50 เสียง สร้างจาก API ด้วยรหัสเสียงที่เปิดให้ใช้งานจริง ฟังครบทุกเสียงได้ที่หน้า Text-to-Speech

ทำไมภาษาไทยเก็บเรื่องนี้ไว้คนละที่

ภาษาไทยระบุความสัมพันธ์ไว้ในตัวคำเลย คำสรรพนามที่ผู้พูดเลือกใช้เรียกตัวเองและเรียกอีกฝ่าย กับคำลงท้ายที่ปิดประโยค วางคนสองคนไว้ในตำแหน่งที่สัมพันธ์กัน ตั้งแต่ก่อนที่น้ำเสียงจะเข้ามาเกี่ยว Paxa TTS Flash v2 อ่านทั้งหมดนี้จากตัวสะกด ความสนิทของตัวละครจึงเป็นสิ่งที่ prompt กำหนด และเสียงเป็นฝ่ายแสดงออกมา

คำถามที่พบบ่อย

อีกหกเดือนตัวละครจะยังเสียงเดิมไหม

ยังเหมือนเดิม เสียงคือรหัสคงที่ในแคตตาล็อก และรหัสเดิมให้เสียงเดิมทุกคำขอ ความเป็นเสียงของตัวละครไม่ได้ขึ้นกับไฟล์ตัวอย่างที่คุณต้องเก็บรักษาไว้เอง

หยุดพูดตอนผู้ใช้พูดแทรกได้อย่างไร

ส่งเฟรม cancel บนซ็อกเก็ตสด ประโยคที่กำลังพูดจะหยุด ส่วนที่ค้างในคิวถูกทิ้งโดยไม่คิดเงิน และการเชื่อมต่อเดิมรับตาถัดไปต่อได้เลย

ทำให้เพื่อน AI เสียงดีใจหรือเสียใจได้ไหม

ได้ ทุกเสียงของ Paxa TTS Flash v2 รับคำกำกับในวงเล็บเหลี่ยมที่เขียนไว้ในข้อความตอบ เช่น [happy] หรือ [sad] ส่วนความสนิทของประโยคไทยยังมาจากคำสรรพนามและคำลงท้ายที่ใช้เขียน และเสียงที่คุณเลือกให้อ่าน

ให้ตัวละครบทบาทสมมติแต่ละตัวมีเสียงของตัวเองได้ไหม

ได้ ให้แต่ละตัวละครใช้หนึ่งใน 50 เสียงในแค็ตตาล็อก หรือออกแบบเสียงให้ตัวละครจากคำบรรยาย บัญชีหนึ่งเก็บเสียงที่ออกแบบไว้ได้ 1 ถึง 50 เสียงตามแพลน และเราไม่มีบริการโคลนเสียง

เพื่อน AI ที่ถูกใช้งานหนักมีค่าใช้จ่ายเท่าไร

ประมาณ $1.44 ต่อเดือน สำหรับผู้ใช้ที่ได้รับคำตอบเป็นเสียงวันละ 40 ครั้ง ค่าเสียงคิดตามจำนวนตัวอักษร เดือนที่คุยน้อยจึงจ่ายน้อยลง และเดือนที่เงียบสนิทก็ไม่มีค่าใช้จ่าย

เริ่มต้นด้วยเครดิตฟรี

เข้าสู่ระบบด้วย Google, GitHub หรือ Hugging Face แล้วใช้เครดิตฟรี 100 เครดิตกับข้อความของคุณเอง

บทความที่เกี่ยวข้อง