ย้ายจาก OpenAI text to speech และ Whisper
OpenAI กำลังถอด tts-1 และ whisper-1 ออกจาก API ชี้ OpenAI SDK มาที่ Paxa แล้วชื่อโมเดลและชื่อเสียงเดิมใช้ต่อได้
ย้ายมาจาก OpenAI? เปลี่ยนแค่ Base URL และคีย์ ชื่อโมเดลและชื่อเสียงเดิมใช้ต่อได้ทันที
tts-1tts-1-hdและgpt-4o-mini-ttsจะถูกถอดออกจาก API ของ OpenAI ในวันที่ 6 มกราคม 2570whisper-1gpt-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 URL | https://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")import { writeFile } from "node:fs/promises";
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.paxalabs.com/v1",
apiKey: process.env.PAXA_API_KEY,
});
const response = await client.audio.speech.create({
model: "tts-1",
voice: "alloy",
input: "สวัสดีครับ ยินดีต้อนรับสู่ Paxa Labs",
});
await writeFile("speech.mp3", Buffer.from(await response.arrayBuffer()));curl -X POST https://api.paxalabs.com/v1/audio/speech \
-H "Authorization: Bearer $PAXA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "tts-1",
"input": "สวัสดีครับ ยินดีต้อนรับสู่ Paxa Labs",
"voice": "alloy"
}' \
--output speech.mp3import { readFile, writeFile } from "node:fs/promises";
import { createOpenAI } from "@ai-sdk/openai";
import { generateSpeech, transcribe } from "ai";
const paxa = createOpenAI({
baseURL: "https://api.paxalabs.com/v1",
apiKey: process.env.PAXA_API_KEY,
});
const { audio } = await generateSpeech({
model: paxa.speech("tts-1"),
voice: "alloy",
text: "สวัสดีครับ ยินดีต้อนรับสู่ Paxa Labs",
});
await writeFile("speech.mp3", audio.uint8Array);
const { text } = await transcribe({
model: paxa.transcription("whisper-1"),
audio: await readFile("meeting.m4a"),
});ถอดเสียงเป็นข้อความ#
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_jsontextsrtหรือvttlanguageใช้ส่งคำใบ้ภาษา หากไม่ระบุ โมเดลจะตรวจภาษาเอง- ไฟล์เสียงยาวได้ไม่เกิน 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 ระบบจะไม่สลับไปใช้อย่างอื่นเงียบ ๆ