เซิร์ฟเวอร์ Whisper API: ตัวเลือกการติดตั้งและขั้นตอนข้อความ
whisper api server คือบริการ HTTP ที่รับ audio และส่งคืน transcript มันจัดการเฉพาะเสียง ดังนั้นสิ่งที่ต้องการทำกับคำพูดหลังจากนั้นจึงต้องใช้โมเดลข้อความแยกต่างหาก
อัปเดต

ประเด็นสำคัญ
- Whisper เป็นโมเดลแปลงเสียงเป็นข้อความ; เซิร์ฟเวอร์จะห่อโมเดลนี้ไว้หลังเอนด์พอยต์ HTTP
- คุณสามารถเช่าเอนด์พอยต์ที่โฮสต์ไว้ โฮสต์ด้วยตัวเอง หรือรันไบนารีในเครื่อง
- API นี้เป็นข้อความเท่านั้น: ทำขั้นตอนหลังการถอดเสียง ไม่ใช่ขั้นตอนเสียง
- ขั้นตอนทั้งสองเชื่อมต่อกันด้วยโค้ด Python เพียงไม่กี่บรรทัดโดยใช้ OpenAI SDK สองครั้ง
คำตอบแบบสั้น
Whisper เป็นโมเดลรู้จำเสียงพูดแบบโอเพนซอร์สที่ OpenAI เผยแพร่ โดยตัวมันเองเป็นไฟล์โมเดลและโค้ดการอนุมานบางส่วน เซิร์ฟเวอร์จะสร้างอินเทอร์เฟซ HTTP ไว้ด้านหน้า เพื่อให้แอปของคุณสามารถส่งไฟล์เสียงและรับข้อความกลับแทนการเรียกฟังก์ชัน Python โดยตรง
เซิร์ฟเวอร์ส่วนใหญ่คัดลอกโครงสร้างของ OpenAI transcription endpoint, POST /v1/audio/transcriptions ซึ่งรับ multipart upload พร้อมไฟล์ audio และชื่อโมเดล โครงสร้างนี้คือเหตุผลที่ไลบรารีไคลเอนต์ชุดเดียวกันสามารถสื่อสารกับบริการโฮสต์, คอนเทนเนอร์บนเครื่องของคุณเอง หรือ wrapper เล็กๆ ที่คนอื่นเขียน
- ข้อมูลนำเข้า: ไฟล์เสียง โดยทั่วไปเป็น mp3, wav, m4a หรือรูปแบบคล้ายกัน
- ข้อมูลส่งออก: ข้อความธรรมดา หรือ JSON พร้อมส่วนย่อยและเวลาเริ่มต้น ขึ้นอยู่กับเซิร์ฟเวอร์
- ไม่รวม: สรุปผล, แปลงเป็นภาษาที่สละสลวย, การดึงรายการที่ต้องดำเนินการ สิ่งเหล่านี้ต้องการโมเดลภาษา
สามวิธีในการใช้งานเซิร์ฟเวอร์ Whisper
1. เอนด์พอยต์แบบโฮสต์
OpenAI มีเอนด์พอยต์ถอดเสียงแบบโฮสต์ และผู้ให้บริการรายอื่นก็ขายบริการถอดเสียงที่ใช้ Whisper เช่นกัน คุณจ่ายตามการใช้งาน คุณไม่ต้องจัดการฮาร์ดแวร์ และคุณส่งไฟล์เสียงของคุณไปยังโครงสร้างพื้นฐานของผู้อื่น โมเดลการเรียกเก็บเงินแตกต่างกันไปตามผู้ให้บริการ และบริการด้านเสียงมักคิดค่าบริการตามระยะเวลาของเสียง ดังนั้นควรตรวจสอบราคาปัจจุบันก่อนตัดสินใจใช้งานปริมาณมาก
2. Wrapper แบบโฮสต์เอง
โปรเจกต์ open-source หลายตัวห่อหุ้ม Whisper หรือการ implement ใหม่ไว้ใน web server ที่เลียนแบบ route การ transcription ของ OpenAI คุณสามารถรันมันใน Docker บนเครื่องที่มี GPU หรือบน CPU หากยอมรับความเร็วที่ช้าลง สิ่งนี้ให้คุณควบคุมว่า audio จะถูกส่งไปที่ไหน นอกจากนี้คุณยังต้องรับผิดชอบต่อการดาวน์โหลดโมเดล, การอัปเดต, การจัดการคิว และการเริ่มใหม่
3. ไบนารีแบบโลคอล
โปรเจกต์ whisper.cpp เป็นการพอร์ตโค้ดของโมเดลด้วย C และ C++ และในรีโพซิทอรีของมันมีเซิร์ฟเวอร์ HTTP ตัวอย่าง มันทำงานบนแล็ปท็อปทั่วไปและเซิร์ฟเวอร์ขนาดเล็ก ซึ่งทำให้เป็นตัวเลือกที่ดีสำหรับโปรโตไทป์หรือสำหรับผู้ใช้รายเดียวที่ถอดเสียงบันทึกไม่กี่รายการต่อวัน สำหรับงานแบทช์ที่มีชั่วโมงนับร้อย การใช้บริการที่มี GPU มักจะใช้งานได้จริงกว่า
เลือกตามคำถามสามข้อ: เสียงจะเดินทางไปที่ไหน คุณประมวลผลกี่ชั่วโมงต่อเดือน และใครจะเป็นผู้ดูแลบริการนี้ ขั้นตอนข้อความที่อธิบายด้านล่างทำงานเหมือนกันไม่ว่าจะใช้วิธีใดในสามวิธีนี้
ตำแหน่งที่ API LLM ข้อความเข้ามามีบทบาทหลังการถอดเสียง
ข้อความถอดเสียงดิบจาก Whisper คือกำแพงข้อความ มันมีเส้นแบ่งย่อหน้าไม่มาก ชื่อผู้พูดหายไปเว้นแต่คุณเพิ่มการแยกเสียงพูด (diarization) แยกต่างหาก และคำฟุ่มเฟือยยังคงอยู่ Whisper ยังทำผิดพลาดกับชื่อยี่ห้อสินค้า ศัพท์เฉพาะ และคำเฉพาะ แทบทุกโปรเจกต์จริงเพิ่มขั้นตอนที่สองที่ทำงานบนข้อความ
งานขั้นตอนที่สองทั่วไป:
- แก้ไขเครื่องหมายวรรคตอน แยกเป็นย่อหน้า ลบจุดเริ่มต้นที่ผิดพลาด
- สรุปการโทรหรือการบรรยายเป็นหัวข้อย่อยไม่กี่ข้อ
- ดึงข้อมูลที่มีโครงสร้างเช่น การตัดสินใจ ชื่อ และวันที่ เป็น JSON
- แปลงเนื้อหาที่พูดออกมาเป็นบทความ, บทสคริปต์ หรือโน้ตแสดงรายการ
- แปลหรือปรับเนื้อหาข้อความที่ทำความสะอาดแล้ว
นั่นคือจุดที่บริการนี้เข้ามามีบทบาท มันคือ API ข้อความที่เข้ากันได้กับ OpenAI โดยมีโมเดลหนึ่งตัว uncensored หน้าต่างบริบท 100,000 โทเคน และการสตรีมมิง ข้อความถอดเสียงสัมภาษณ์สองชั่วโมงมักพอดีกับคำขอเดียว ดังนั้นคุณสามารถข้ามตรรกะการแบ่งส่วนที่หน้าต่างบริบทขนาดเล็กบังคับให้คุณทำ สำหรับเนื้อหาที่ยาวกว่า ดู quickstart docs สำหรับรายละเอียดคำขอ
โมเดลนี้ถูกปรับแต่งให้ตอบโดยไม่มีการปฏิเสธเนื้อหาสำหรับการใช้งานผู้ใหญ่ที่ถูกต้องตามกฎหมาย สิ่งนี้สำคัญสำหรับเพย์ปไลน์การถอดเสียงเพราะเสียงต้นทางคาดเดาไม่ได้: การสัมภาษณ์, พอดแคสต์, การอ่านนิยาย และการโทรสนับสนุน มีภาษาที่รุนแรงและหัวข้อที่ยาก โมเดลที่ปฏิเสธที่จะทำความสะอาดข้อความถอดเสียงเพราะผู้พูดใช้คำหยาบจะเสียการรันการถอดเสียงที่เสียเงิน ขีดจำกัดเดียวที่ชัดเจนคือไม่ยอมรับเนื้อหาที่เกี่ยวข้องกับเนื้อหาทางเพศที่มีผู้เยาว์
สายการประมวลผลสองขั้นตอนที่ใช้งานได้
Python SDK ของ OpenAI ช่วยให้คุณสร้างไคลเอนต์สองตัวด้วย Base URL ที่ต่างกัน ตัวหนึ่งชี้ไปที่เซิร์ฟเวอร์ Whisper ของคุณ อีกตัวหนึ่งชี้ไปที่ API นี้ ตั้งค่าตัวแปรสภาพแวดล้อมสำหรับบริการถอดเสียงของคุณเอง ไคลเอนต์ตัวที่สองใช้ Base URL สำหรับเว็บไซต์นี้
import os
from openai import OpenAI
# Stage 1: any Whisper-compatible transcription server you run or rent.
stt = OpenAI(base_url=os.environ["STT_BASE_URL"], api_key=os.environ["STT_KEY"])
# Stage 2: the text model.
llm = OpenAI(base_url="https://api.whisperapis.com/v1", api_key=os.environ["LLM_KEY"])
with open("call.mp3", "rb") as f:
transcript = stt.audio.transcriptions.create(
model=os.environ["STT_MODEL"], # the model name your server expects
file=f,
)
resp = llm.chat.completions.create(
model="uncensored",
messages=[
{"role": "system", "content": "Clean up this transcript: fix punctuation, keep every statement, no commentary."},
{"role": "user", "content": transcript.text},
],
temperature=0.2,
)
print(resp.choices[0].message.content)รายละเอียดสองจุดที่เข้าใจผิดได้ง่าย ประการแรก ชื่อโมเดลถอดเสียงคือชื่อwhatever เซิร์ฟเวอร์ของคุณคาดหวัง ซึ่งจึงเป็นเหตุผลว่าทำไมมันจึงมาจากตัวแปรสภาพแวดล้อมในที่นี้ ประการที่สอง คีย์สำหรับ API ข้อความนั้นแยกจากคีย์ใดๆ ที่คุณมีสำหรับบริการเสียง; แต่ละคีย์จะตรวจสอบสิทธิ์เฉพาะโฮสต์ของมันเอง
หากคุณชอบใช้ shell ขั้นตอนข้อความคือคำขอการเสร็จสิ้นการแชทธรรมดา:
curl https://api.whisperapis.com/v1/chat/completions \
-H "Authorization: Bearer $LLM_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [
{"role": "user", "content": "Summarize this transcript in five bullet points: ..."}
]
}'การตรวจสอบสิทธิ์ใช้คีย์ Bearer ใน header Authorization และเอนด์พอยต์คือ POST /v1/chat/completions และ GET /v1/models คุณสามารถรับคีย์จาก API key page; บัญชีใหม่สามารถรับเครดิตทดลองใช้ $0.50 ได้เพียงคลิกเดียว มีอายุ 7 วัน และไม่จำเป็นต้องใช้บัตรเครดิต
สิ่งที่มักเกิดปัญหาในทางปฏิบัติ
ไฟล์เสียงขนาดใหญ่
เซิร์ฟเวอร์ Whisper หลายแห่งจำกัดขนาดไฟล์ที่อัปโหลด และการบันทึกเสียงยาวอาจหมดเวลาในระหว่างคำขอ แบ่งไฟล์เสียงออกเป็นช่วงๆ ยาว 10 ถึง 30 นาทีด้วยเครื่องมือเช่น ffmpeg แล้วถอดเสียงแต่ละส่วน จากนั้นนำข้อความมารวมกัน เนื่องจาก API ข้อความรองรับได้สูงสุด 100,000 โทเคน คุณสามารถนำข้อความมารวมกันแล้วส่งเป็นพรอมต์เดียวได้ ขนาดสูงสุดของ body ในคำขอของ API นี้คือ 8 MB ซึ่งมากกว่าที่การถอดเสียงใดๆ ต้องการ
ขีดจำกัดอัตราและคำขอพร้อมกัน
คีย์แบบเต็มอนุญาตให้ทำคำขอพร้อมกัน 8 คำขอ และ 300 คำขอต่อนาที; คีย์ทดลองอนุญาตให้ทำคำขอพร้อมกัน 2 คำขอ และ 60 คำขอต่อนาที หากคุณใช้คิวที่มี worker หลายตัว ให้จำกัดจำนวนให้ไม่เกินขีดจำกัดคำขอพร้อมกันของคีย์ของคุณ การทำเกินจะส่ง HTTP 429 พร้อมโค้ด rate_limited สำหรับคำขอต่อนาที หรือ concurrency สำหรับคำขอพร้อมกันมากเกินไป คำขอแบบสตรีมมิงจะสงวนตำแหน่งไว้จนกว่าสตรีมจะเสร็จสิ้น ดังนั้นไคลเอนต์ที่ค้างอยู่อาจบล็อกตำแหน่งได้นานกว่าที่คุณคาดไว้ ให้ถอยออกและลองใหม่; หากการตอบสนองมี header Retry-After: 5 ให้รอตามเวลาที่ระบุ
ข้อผิดพลาดในการถอดเสียงที่ LLM ไม่สามารถมองเห็นได้
หาก Whisper ฟังผิดคำ โมเดลข้อความจะเห็นเพียงคำที่ผิดไป โมเดลอาจพยายามทำให้ข้อผิดพลาดดูเป็นเจตนาได้ ใส่กิลลารีของชื่อและศัพท์เฉพาะลงในระบบพรอมต์ และบอกให้โมเดลทำเครื่องหมายส่วนที่ไม่แน่ใจแทนการเดา สำหรับข้อมูลสำคัญ ให้เก็บต้นฉบับการถอดเสียงไว้ข้างๆ เวอร์ชันที่แก้ไขแล้ว
คำฟุ่มเฟือยที่โมเดลแต่งขึ้น
Whisper บางครั้งสร้างข้อความที่ประดิษฐ์ขึ้นในช่วงเงียบหรือดนตรี ตัดช่วงเงียบออกก่อนส่ง และขอให้ขั้นตอนที่สองทำเครื่องหมายประโยคที่ดูไม่สอดคล้องกัน ใช้ temperature ต่ำ เช่น 0.2 จะช่วยให้การทำความสะอาดข้อความใกล้เคียงกับต้นฉบับ
สิ่งที่ API นี้ไม่ทำ
API นี้ไม่ถอดเสียงเสียง ไม่มีอินพุตเสียง ไม่มีเอาต์พุตเสียง ไม่มีการสร้างภาพหรือวิดีโอ ไม่มีการสร้าง embeddings และไม่มีการปรับแต่งโมเดล นี่คือโมเดลข้อความแบบโฮสต์ที่อยู่หลังเอนด์พอยต์ chat completions ซึ่งให้บริการโดยผู้ให้บริการอิสระ และไม่ใช่ API ทางการของ OpenAI หรือผู้ขายโมเดลรายอื่น หากโปรเจกต์ของคุณต้องการทั้งสองส่วน คุณต้องการเซิร์ฟเวอร์เสียงสำหรับขั้นตอนแรก และบริการนี้สำหรับขั้นตอนที่สอง
พรอมต์ไม่ถูกนำไปใช้ในการฝึกโมเดล ซึ่งแยกจากสิ่งที่ผู้ให้บริการเสียงของคุณทำกับไฟล์เสียง ดังนั้นโปรดอ่านข้อกำหนดของผู้ให้บริการนั้นๆ แยกต่างหาก
สำหรับการวางแผนต้นทุน ด้านข้อความจะคิดค่าบริการต่อโทเคนที่ $0.15 ต่อล้านโทเคนอินพุต และ $0.50 ต่อล้านโทเคนเอาต์พุต โดยหักจากเครดิตแบบเติมเงินล่วงหน้าที่ไม่หมดอายุ pricing page แสดงขนาดการเติมเงินและโบนัส คำขอที่ล้มเหลวหรือถูกปฏิเสธจะไม่ถูกเรียกเก็บเงิน ซึ่งช่วยป้องกันไม่ให้ลูปการลองใหม่ทำให้คุณเสียเงิน
วิธีเริ่มต้นที่สมเหตุสมผล
- ตั้งค่าเซิร์ฟเวอร์ที่เข้ากันได้กับ Whisper ให้ทำงาน ทั้งแบบโฮสต์หรือในเครื่อง และยืนยันว่ามันให้ข้อความสำหรับไฟล์หนึ่งนาที
- สร้างบัญชี รับเครดิตทดลองใช้ และรันคำสั่ง curl ด้านบนพร้อมข้อความถอดเสียงสั้นๆ
- เชื่อมต่อไคลเอนต์ทั้งสองเข้าด้วยกันด้วยสคริปต์ Python โดยใช้ระบบพรอมต์ของคุณเองสำหรับรูปแบบการทำความสะอาดที่คุณต้องการ
- เพิ่มคิวเฉพาะเมื่อการไหลของไฟล์เดียวทำงานได้แล้ว และกำหนดขนาดให้ตรงกับความพร้อมใช้งานของคีย์ของคุณ
ส่วนสำคัญของงานอยู่ที่พรอมต์และการจัดการไฟล์เสียง ไม่ใช่โค้ดที่เชื่อมต่อ เริ่มด้วยไฟล์บันทึกเสียงที่คุณคุ้นเคย เปรียบเทียบผลลัพธ์กับสิ่งที่คุณได้ยิน แล้วปรับคำแนะนำก่อนจะขยายขนาด
คู่มือเพิ่มเติม
ถาม-ตอบ
เซิร์ฟเวอร์ Whisper API เหมือนกับ API ของ OpenAI หรือไม่?
ไม่ Whisper เป็นโมเดล และเซิร์ฟเวอร์คือโปรแกรมใดๆ ที่เปิดเผยโมเดลผ่าน HTTP OpenAI มีเวอร์ชันที่โฮสต์ไว้ และหลายคนใช้เครื่องมือโอเพนซอร์สที่คัดลอกเส้นทางการถอดเสียงแบบเดียวกันเพื่อรันเซิร์ฟเวอร์ของตนเอง
API นี้สามารถถอดเสียงไฟล์เสียงได้หรือไม่?
ไม่ API นี้รับเฉพาะข้อความเท่านั้น ให้ใช้บริการเสียงหรือเซิร์ฟเวอร์ Whisper ของคุณเองสำหรับขั้นตอนการแปลงเสียง แล้วส่งข้อความที่ถอดแล้วมาที่นี่
ฉันควรใช้ชื่อโมเดลใดสำหรับขั้นตอนข้อความ?
ใช้ uncensored เป็น ID โมเดล พร้อม base URL https://api.whisperapis.com/v1 และคีย์ของคุณเป็นโทเคน Bearer
ฉันสามารถส่งข้อความถอดเสียงความยาวเท่าใดได้?
หน้าต่างบริบทรองรับ 100,000 โทเคน ซึ่งครอบคลุมทั้งพรอมต์และผลลัพธ์รวมกัน ซึ่งเพียงพอสำหรับบันทึกเสียงหลายชั่วโมงในคำขอเดียว
ฉันต้องใช้บัตรเพื่อลองใช้หรือไม่?
ไม่ ผู้ใช้ใหม่สามารถรับเครดิตทดลองใช้มูลค่า $0.50 ได้เพียงคลิกเดียวที่หน้าคีย์ API หลังจากเข้าสู่ระบบ โดยไม่ต้องใช้บัตร
คีย์ของคุณอยู่ห่างแค่แบบฟอร์มเดียว
สร้างบัญชี คัดลอกคีย์ และเปลี่ยน base URL นั่นคือการตั้งค่าทั้งหมด