Paxa Labs

แปลงข้อความเป็นเสียงแบบเรียลไทม์ สำหรับบทสนทนาสด

Voice Agent ที่รอให้คำตอบครบก่อนค่อยพูด ทำให้ปลายสายต้องรออยู่ในความเงียบ ส่งข้อความให้ Paxa TTS Flash v2 ไปพร้อมกับที่โมเดลเขียน แล้วเสียงจะทยอยกลับมาตั้งแต่ส่วนที่เหลือยังเขียนไม่เสร็จ

สองบทสนทนาบนสาย#

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

ออกแบบเสียงของคุณเอง เริ่มจากผู้ช่วยเสียง

  • สวัสดีค่ะ ฝ่ายจองตั๋วยินดีให้บริการค่ะ วันนี้ให้ช่วยเรื่องอะไรดีคะสาคู · ผู้ช่วย AI0:05
  • [อืม] พรุ่งนี้เช้ามีเที่ยวบินไปเชียงใหม่สองเที่ยวค่ะ เจ็ดโมงตรง กับเก้าโมงครึ่งสาคู · ผู้ช่วย AI0:06
  • [อบอุ่น] เรียบร้อยค่ะ จองที่นั่งให้แล้ว และส่งรายละเอียดการจองไปที่โทรศัพท์ของคุณแล้วค่ะสาคู · ผู้ช่วย AI0:05
  • ไรเดอร์รับอาหารเรียบร้อยแล้วครับ [ร่าเริง] อีกประมาณสิบนาทีน่าจะถึงหน้าบ้านครับกะเพรา · สบาย ๆ0:05

paxa-tts-flash-v2 · บันทึกเมื่อ 28 ต.ค. 2569 · ไม่มีการแก้ไข

เอเจนต์คนเดิม สามภาษา#

สาคู รับสายจองตั๋วเป็นภาษาไทย อังกฤษ และจีนกลาง คำแต่ละคำอ่านตามภาษาของตัวอักษรที่เขียน เอเจนต์จึงสลับจากภาษาไทยเป็นภาษาอังกฤษระหว่างการตอบแต่ละรอบได้โดยไม่ต้องเชื่อมต่อใหม่

ภาษาไทย

สวัสดีค่ะ ฝ่ายจองตั๋วยินดีให้บริการค่ะ วันนี้ให้ช่วยเรื่องอะไรดีคะ

saku · paxa-tts-flash-v2

ภาษาอังกฤษ

Hi, you've reached the booking line. How can I help you today?

saku · paxa-tts-flash-v2

ภาษาจีนกลาง

您好,这里是订票热线。请问今天有什么可以帮您?

saku · paxa-tts-flash-v2

เซสชันสดหนึ่งรอบ ทีละเฟรม#

ค่าบริการคิดสะสมต่อการเชื่อมต่อ ยอดรวมเท่ากับการเรียก POST /v1/tts หนึ่งครั้งที่มีข้อความทั้งหมดที่การเชื่อมต่อนั้นถูกคิดเงิน และขั้นต่ำ 0.1 เครดิตต่อคำขอคิดเพียงครั้งเดียว

  1. เปิดซ็อกเก็ตแล้วส่ง start

    เชื่อมต่อ WS /v1/tts/live โดยส่งคีย์ API ในเฮดเดอร์ตอนอัปเกรด เฟรมแรกคือ start ซึ่งระบุโมเดลและเสียง และกำหนดรูปแบบไฟล์เสียง Timestamp ความเร็ว และภาษาได้สำหรับทั้งการเชื่อมต่อ เซิร์ฟเวอร์ตอบด้วย started พร้อมรหัสการเชื่อมต่อ

  2. ส่งข้อความไปพร้อมกับที่เขียน

    เฟรม text แต่ละเฟรมต่อท้ายบัฟเฟอร์ เซิร์ฟเวอร์เริ่มสังเคราะห์เมื่อขึ้นบรรทัดใหม่ เจอเครื่องหมายจบประโยค หรือบัฟเฟอร์ยาวถึงเกณฑ์ ส่วนเฟรม flush สั่งสังเคราะห์สิ่งที่ค้างอยู่ทันที การสังเคราะห์แต่ละครั้งคือหนึ่งรอบ ภาษาไทยไม่มีเครื่องหมายจบประโยค ไคลเอนต์ภาษาไทยจึงส่ง flush เมื่อตอบจบแต่ละรอบ คำกำกับที่ยังเปิดค้างตรงจุดส่งจะรอจนปิดครบก่อน และคำกำกับที่ยังเปิดค้างเกินเกณฑ์ความยาวจะถูกอ่านเป็นข้อความ แต่ละรอบเริ่มด้วยคำกำกับที่รอบก่อนหน้าจบไว้ และคำกำกับเหล่านั้นนับรวมใน max_chars

  3. เล่นเสียงของแต่ละรอบ

    ทุกรอบเริ่มด้วยอีเวนต์ charged ที่บอกเครดิตของรอบนั้นและยอดสะสมของการเชื่อมต่อ ตามด้วยเฟรมไบนารีที่เป็นเสียงในรูปแบบของเซสชัน แล้วจบด้วย flushed เมื่อส่งรอบนั้นครบ ถ้าเปิด Timestamp ไว้ อีเวนต์ timing จะส่งช่วงเวลาของรอบนั้นมาด้วย

  4. ส่ง cancel เมื่อปลายสายพูดแทรก

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

  5. ปิดเซสชัน

    ส่ง end เพื่อสังเคราะห์ส่วนที่เหลือ เซิร์ฟเวอร์ส่ง done พร้อมจำนวนตัวอักษรและเครดิตรวม แล้วปิดการเชื่อมต่อ ความผิดพลาดมาเป็นอีเวนต์ error และถ้ากู้คืนได้ การเชื่อมต่อจะยังเปิดอยู่ ระหว่างที่เปิดค้างไว้ การเชื่อมต่อหนึ่งเส้นใช้ช่องคำขอพร้อมกันของแพ็กเกจหนึ่งช่อง

ใช้ซ็อกเก็ตสดกับงานแบบไหน#

ใช้ซ็อกเก็ตสดเมื่อข้อความมาทีละส่วน ถ้าคำตอบแต่ละครั้งครบก่อนส่ง ให้ใช้ POST /v1/tts ที่ตั้ง stream เป็น true ซึ่งส่งเสียงกลับมาระหว่างที่กำลังสังเคราะห์

ฉากอื่น ๆ#

แต่ละหน้าใช้เสียงของ Paxa TTS Flash v2 ในงานคนละแบบ

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

ควรใช้ซ็อกเก็ตสดหรือคำขอแบบสตรีม

ใช้ POST /v1/tts ที่ตั้ง stream เป็น true เมื่อข้อความของคำตอบแต่ละครั้งครบก่อนส่ง ใช้ WS /v1/tts/live เมื่อข้อความมาทีละส่วน เช่นสตรีมโทเคนจากโมเดลภาษา หรือเมื่อต้องการให้การเชื่อมต่อเดียวรองรับทั้งบทสนทนา

ถ้าปลายสายพูดแทรกจะเกิดอะไรขึ้น

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

การเชื่อมต่อสดคิดค่าบริการอย่างไร

คิดสะสมตามจำนวนตัวอักษรในอัตราเดียวกับ POST /v1/tts ขั้นต่ำ 0.1 เครดิตคิดครั้งเดียวต่อการเชื่อมต่อในรอบแรกที่ถูกคิดเงิน และอีเวนต์ charged ของทุกรอบบอกเครดิตของรอบนั้นพร้อมยอดสะสม ถ้าเปิด Timestamp การเชื่อมต่อจะคิดในอัตราที่สูงกว่า

ขอ Timestamp ระดับคำได้ไหม

ได้ ตั้ง timestamps เป็น "word" ใน POST /v1/tts หรือในเฟรม start แล้วทุกคำจะมีเวลาเริ่มและเวลาจบเป็นวินาที ส่วน "sentence" และ "utterance" ให้ช่วงเวลาที่ยาวกว่า บนซ็อกเก็ตสด เวลาของแต่ละรอบนับจากต้นเสียงของรอบนั้นเอง Timestamp คิดในอัตราที่สูงกว่าเสียงพูดธรรมดา

ใช้กับ OpenAI SDK ได้ไหม

ได้ สำหรับคำตอบทีละครั้ง POST /v1/audio/speech รับคำขอรูปแบบเดียวกับ OpenAI และสตรีมเสียงเป็นค่าเริ่มต้น ชี้ SDK มาที่ base URL ของ Paxa API แล้วยืนยันตัวตนด้วยคีย์ของ Paxa

เปิดเซสชันสดครั้งแรก บัญชีใหม่ได้เครดิตฟรี 100 เครดิต เลือกเสียงใน Playground ก่อน แล้วสร้างคีย์ API และเปิดซ็อกเก็ต

เริ่มใช้ฟรี