Paxa Labs

ย้ายจาก OpenAI text to speech และ Whisper

OpenAI กำลังถอด tts-1 และ whisper-1 ออกจาก API ชี้ OpenAI SDK มาที่ Paxa แล้วชื่อโมเดลและชื่อเสียงเดิมใช้ต่อได้

ดูเป็น Markdown

ย้ายมาจาก OpenAI? เปลี่ยนแค่ Base URL และคีย์ ชื่อโมเดลและชื่อเสียงเดิมใช้ต่อได้ทันที

  • tts-1 tts-1-hd และ gpt-4o-mini-tts จะถูกถอดออกจาก API ของ OpenAI ในวันที่ 6 มกราคม 2570
  • whisper-1 gpt-4o-transcribe และ gpt-4o-mini-transcribe จะถูกถอดออกในวันที่ 26 กุมภาพันธ์ 2570 พร้อมกับ gpt-4o-transcribe-diarize ซึ่ง Paxa ไม่รับชื่อนี้ หากต้องการแยกผู้พูด ให้ใช้ POST /v1/stt

รายละเอียดอยู่ในหน้าการเลิกใช้งานของ OpenAI สำหรับเสียงพูด OpenAI แนะนำให้ไปใช้ Realtime API ซึ่งทำงานต่างจาก /v1/audio/speech

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

การตั้งค่าค่า
Base URLhttps://api.paxalabs.com/v1
คีย์ APIคีย์ของ Paxa จากแดชบอร์ด

ชื่อโมเดล ชื่อเสียง และเนื้อหาคำขอใช้แบบเดิมได้ทั้งหมด บัญชีใหม่เริ่มต้นด้วย 100 เครดิตฟรี

แปลงข้อความเป็นเสียงพูด#

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.paxalabs.com/v1",
    api_key=os.environ["PAXA_API_KEY"],
)

with client.audio.speech.with_streaming_response.create(
    model="tts-1",
    voice="alloy",
    input="สวัสดีครับ ยินดีต้อนรับสู่ Paxa Labs",
) as response:
    response.stream_to_file("speech.mp3")

ถอดเสียงเป็นข้อความ#

Python
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.paxalabs.com/v1",
    api_key=os.environ["PAXA_API_KEY"],
)

transcript = client.audio.transcriptions.create(
    model="whisper-1",
    file=open("meeting.m4a", "rb"),
)
print(transcript.text)
  • response_format เป็น json (ค่าเริ่มต้น) verbose_json text srt หรือ vtt
  • language ใช้ส่งคำใบ้ภาษา หากไม่ระบุ โมเดลจะตรวจภาษาเอง
  • ไฟล์เสียงยาวได้ไม่เกิน 60 นาทีและ 25 MiB
  • Paxa STT Lite เป็นพรีวิวงานวิจัย

เสียงไหนเป็นผู้พูด#

เมื่อคำขอระบุชื่อของเสียง OpenAI เสียงหนึ่งของเราจะเป็นผู้พูด ทุกเสียงพูดได้ทั้งภาษาไทย อังกฤษ และจีนกลาง รวมถึงประโยคที่ปนกัน และทุกคำตอบจะระบุเสียงที่พูดไว้ในเฮดเดอร์ x-voice-id

ชื่อที่ส่งเสียงของ Paxaบทบาท
alloyฝอยทอง (foithong)เสียงเล่าเรื่อง
ashขนมครก (khanomkrok)เสียงชายหลัก
balladโอเลี้ยง (oliang)วิทยุยามดึก
cedarข้าวต้ม (khaotom)คุณพ่อใจดี
coralคุกกี้ (cookie)งานบริการ
echoมัสมั่น (massaman)พระเอก
fableเอสเพรสโซ (espresso)นักอ่านเรื่องยาว
marinซ่าหริ่ม (salim)สาวข้างบ้าน
novaนมเย็น (nomyen)เสียงหญิงหลัก
onyxทองเอก (thongek)ผู้ประกาศข่าว
sageใบเตย (baitoey)ผู้ให้คำปรึกษา
shimmerตะโก้ (tako)นักอ่านเป็นกันเอง
verseลาเต้ (latte)หนังแบรนด์

หากต้องการเลือกเสียงเอง ให้ส่งรหัสเสียงแทน เช่น "khanomkrok" GET /v1/voices แสดงเสียงทั้ง 50 เสียง และฟังตัวอย่างได้ที่คลังเสียง

ชื่อโมเดลก็จับคู่แบบเดียวกัน tts-1 tts-1-hd gpt-4o-mini-tts gpt-4o-mini-tts-2025-03-20 gpt-4o-mini-tts-2025-12-15 ทำงานบน paxa-tts-flash-v2 ส่วน whisper-1 gpt-4o-transcribe gpt-4o-mini-transcribe gpt-4o-mini-transcribe-2025-03-20 gpt-4o-mini-transcribe-2025-12-15 ทำงานบน paxa-stt-lite-v1-preview

ในเครื่องมือที่คุณใช้อยู่#

เครื่องมือส่วนใหญ่ที่มีตัวเลือกเสียงพูดของ OpenAI เปลี่ยน base URL ได้ ชื่อเมนูอาจต่างกันตามเวอร์ชัน

  • ใน Open WebUI เปิด Admin Panel แล้วไปที่ Settings และ Audio เลือก OpenAI engine ทั้งสำหรับแปลงข้อความเป็นเสียงและถอดเสียง ตั้ง base URL เป็น https://api.paxalabs.com/v1 แล้ววางคีย์ของ Paxa
  • ใน n8n สร้าง OpenAI credential สำหรับงานเสียงโดยเฉพาะ ตั้ง Base URL เป็น https://api.paxalabs.com/v1 พร้อมคีย์ของ Paxa แล้วใช้กับคำสั่งด้านเสียงของ OpenAI node ส่วน credential เดิมให้เก็บไว้ใช้กับแชต เพราะ Paxa ให้บริการเฉพาะเสียงพูดและการถอดเสียง
  • ใน OpenAI TTS custom integration ของ Home Assistant เลือกตัวเลือก custom ตั้ง URL เป็น https://api.paxalabs.com/v1/audio/speech และใช้โมเดลกับเสียงเดิมได้
  • ใน LibreChat ตั้ง url ของการตั้งค่าเสียงพูดและการถอดเสียงใน librechat.yaml เป็น https://api.paxalabs.com/v1/audio/speech และ https://api.paxalabs.com/v1/audio/transcriptions เพราะ LibreChat ส่งคำขอไปที่ URL ตามที่เขียนไว้ทุกตัวอักษร
  • ใน SillyTavern เลือกผู้ให้บริการ TTS แบบ OpenAI Compatible แล้วตั้ง endpoint เป็น https://api.paxalabs.com/v1/audio/speech

คู่มือการเชื่อมต่อ อธิบายการตั้งค่า Open WebUI, LibreChat, Home Assistant และ SillyTavern ทีละขั้น รวมถึง AnythingLLM, LiveKit Agents และ Strands Agents

เครื่องมือที่อ่านค่า OPENAI_BASE_URL จะย้ายการเรียก OpenAI ทั้งหมดมาที่ Paxa รวมถึงแชต ซึ่ง Paxa ไม่ได้ให้บริการ จึงควรตั้งค่านี้เฉพาะกับเครื่องมือที่ใช้ OpenAI แค่งานเสียงเท่านั้น

สิ่งที่ต่างจาก OpenAI#

  • ฟอร์แมตที่ให้บริการคือ mp3 (ค่าเริ่มต้น) opus wav pcm mulaw และ alaw โดย pcm เป็นโมโน 16 บิตที่ 24 kHz ส่วน aac และ flac ได้คำตอบ 400
  • ความเร็วตั้งได้ตั้งแต่ 0.5 ถึง 1.5 ค่าที่อยู่นอกช่วงนี้ได้คำตอบ 400
  • ระบบละเว้น instructions หากต้องการกำกับน้ำเสียง ให้เขียนแท็กคำกำกับลงในข้อความแทน เช่น [whispering] see you tomorrow หรือ [cheerful] welcome back!
  • สตรีมเสียงเป็นค่าเริ่มต้น และ "stream": false จะส่งไฟล์เต็มกลับมา
  • การสตรีมส่งเป็นไบต์เสียงดิบพร้อม content type ของไฟล์เสียง แม้คำขอจะระบุ "stream_format": "sse" ไคลเอนต์ที่อ่านแบบ event จึงควรตรวจ content type ก่อน
  • คำขอที่ไม่ผ่านสคีมาได้คำตอบ 400 validation พร้อม path คือฟิลด์ที่ผิด และ reason คือโค้ดคงที่ที่บอกว่าผิดอย่างไร
  • โมเดลหรือเสียงที่ไม่รู้จักได้คำตอบ 400 unknown_model หรือ 400 unknown_voice
  • คำขอเสียงพูดหนึ่งครั้งส่งข้อความได้ไม่เกิน 5,000 ตัวอักษร
  • เสียงพูดคิด 10 เครดิตต่อ 1,000 ตัวอักษร และการถอดเสียงคิด 8.33 เครดิตต่อนาที ดูราคา

มากกว่าการใช้แทนกันได้#

  • ทุกเสียงพูดได้ทั้งภาษาไทย อังกฤษ และจีนกลาง รวมถึงประโยคที่ปนกัน
  • แท็กคำกำกับใช้กำกับน้ำเสียงและเพิ่มเสียงประกอบ เช่น [laughs] และ [sighs] ส่วน <emph> ใช้เน้นช่วงข้อความ
  • API หลักของเรามีtimestamp ระดับคำ และซ็อกเก็ตแบบ live ที่รับข้อความระหว่างที่กำลังเขียน

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

alloy จะเสียงเหมือนเดิมไหม#

ไม่เหมือน เสียงของเรารับชื่อของเสียง OpenAI และตารางด้านบนบอกว่าเสียงไหนพูดแทนแต่ละชื่อ ลองฟังก่อนย้าย หรือเลือกเสียงใดก็ได้ด้วยรหัสเสียง

ถ้าเครื่องมือของฉันตั้ง base URL ไม่ได้ล่ะ#

เครื่องมือนั้นต้องมีการเชื่อมต่อกับ Paxa โดยตรง บอกเราว่าเป็นเครื่องมือไหน

ยังใช้ OpenAI สำหรับแชตต่อได้ไหม#

ได้ ชี้เฉพาะการเรียกด้านเสียงมาที่ Paxa

ถ้าส่งชื่อที่ไม่ได้จับคู่ไว้จะเป็นอย่างไร#

เสียงหรือโมเดลที่ไม่รู้จักได้คำตอบ 400 unknown_voice หรือ unknown_model ระบบจะไม่สลับไปใช้อย่างอื่นเงียบ ๆ