Whisper-1 API: תמלול השמע הראשון שלך
שלח הקלטה ל-Whisper-1, שמור את מזהה המשימה והורד טקסט או כתוביות. עקוב אחר דוגמת Python עם בדיקות קבצים, חותמות זמן ומחירים עדכניים.
קריאה כ-Markdownבקשת Whisper-1 API ראשונה דורשת קובץ שמע, מזהה מודל מפורש ופורמט פלט. ב-SeedRouter מעלים את ההקלטה, שומרים את מזהה המשימה שהוחזר ואז מורידים את התמליל כשהמשימה מושלמת. התחל בהקלטה קצרה שאת מילותיה אתה כבר מכיר: כך קל יותר להבחין במילים חסרות ובאיות חריג.
מדריך זה פועל לפי החוזה האסינכרוני של SeedRouter. הוא אינו דוגמה סינכרונית של OpenAI SDK שניתן להשתמש בה ללא התאמה. דף המודל Whisper-1 כולל את ה-Playground ואת המחיר העדכני; מדריך ה-API מפרט כל שדה ואת בדיקות התאימות שטרם הושלמו. [1]
הכן הקלטה אחת
השתמש בדיבור שיש לך רשות לעבד. קובץ WAV או MP3 קצר הוא נקודת התחלה טובה. מגבלת ההעלאה הנוכחית היא 26,214,400 בתים; הקובץ חייב להכיל שמע קריא עם משך שניתן למדוד. סיומת .mp3 אינה הופכת קובץ טקסט ששמו שונה לשמע תקין. המדריך מבחין בין תשעת פורמטי הקלט המתועדים לבין אלה שעברו בדיקות בפועל. [1]
ההקלטה הבאה היא דיבור סינתטי מקורי באנגלית, שנוצר למדריך זה. צורת הגל שלה מופיעה בתמונת השער. המשפט המצוטט על השער לקוח מתסריט ההקלטה, ואינו טענה לגבי דיוק.
הורד את הדוגמה באורך 10.31 שניות. בתסריט נאמר: “This is a sample recording for an audio transcription tutorial. Our meeting starts at nine thirty on Monday. Please bring the project notes and review the final checklist before we begin.”
שמור מפתח API במשתנה סביבה בצד השרת. אל תכניס אותו לדף ציבורי, לחבילת יישום לנייד או לצילום מסך משותף. דוגמת Python שלהלן משתמשת ב-requests וקוראת את SEEDROUTER_API_KEY מהסביבה.
שלח את בקשת Whisper-1 API פעם אחת
בחר json לבקשה הראשונה. לאחר מכן תוכל לקרוא את שדה text בקובץ שהורד, בלי לטפל בקודי זמן של כתוביות. חלק ה-multipart בשם file חייב להכיל בתים ממשיים; כתובת URL כערך אינה שקולה להעלאת הקובץ. אפשר ללקוח להגדיר את סוג התוכן ואת מפריד ה-multipart. [1]
שמור זאת בשם transcribe.py. הסקריפט כותב סמן שליחה לפני ה-POST ושומר את מזהה המשימה שהתקבלה אחריו. הרצה נוספת קוראת את המשימה הקיימת. אם תוצאת ה-POST אינה ודאית, הסמן מונע מהסקריפט ליצור כפילות בשוגג.
import json
import os
from pathlib import Path
import requests
base = "https://api.seedrouter.ai/v1"
headers = {"Authorization": f"Bearer {os.environ['SEEDROUTER_API_KEY']}"}
state = Path("whisper-task.json")
audio = Path("recording.wav")
if not state.exists():
if not 0 < audio.stat().st_size <= 26_214_400:
raise ValueError("Choose a nonempty recording within the upload limit")
with state.open("x") as marker:
json.dump({"status": "submission_unconfirmed"}, marker)
with audio.open("rb") as recording:
response = requests.post(
f"{base}/audio/transcriptions",
headers=headers,
files={"file": (audio.name, recording, "audio/wav")},
data={"model": "whisper-1", "response_format": "json"},
timeout=180,
allow_redirects=False,
)
response.raise_for_status()
accepted = response.json()
task_id = accepted.get("id")
if not isinstance(task_id, str) or not task_id.startswith("task_"):
raise RuntimeError("Submission could not be confirmed; check task history")
state.write_text(json.dumps({"id": task_id}), encoding="utf-8")
saved = json.loads(state.read_text(encoding="utf-8"))
if "id" not in saved:
raise RuntimeError("Check task history before submitting another recording")
response = requests.get(
f"{base}/tasks/{saved['id']}", headers=headers, timeout=30,
allow_redirects=False,
)
response.raise_for_status()
task = response.json()
print(task["status"])
if task["status"] == "completed":
result = requests.get(task["output"]["url"], timeout=60)
result.raise_for_status()
print(result.json()["text"])
elif task["status"] == "failed":
print(task["error"])הרץ python transcribe.py. אם מתקבל processing, המתן כמה שניות והרץ שוב את אותה פקודה. היא תקרא את המזהה השמור במקום להעלות שוב. שמור קובץ מצב נפרד לכל הקלטה חדשה שאתה שולח בכוונה. פקיעת זמן ההמתנה בצד הלקוח לבדה אינה מוכיחה כישלון של המשימה.
קרא את התמליל שהושלם
תגובת הקבלה מכילה id, model, status ו-created_at. ההשלמה מוסיפה output.url ו-output.format. הכתובת מצביעה לקובץ התוצאה; היא אינה משימת יצירת מדיה הדורשת בקשה נוספת בתשלום. בקשת GET מורידה את הקובץ. [1]
קרא את המילים תוך האזנה להקלטה. בדוק שמות, מספרים וגבולות משפטים לפני שימוש בטקסט ככתוביות או כציטוט מדויק. תמליל הוא טיוטה של הדברים שנאמרו, וחותמות זמן אינן מבטלות את הצורך לבדוק אותו.
בדיקות מקומיות מקצה לקצה ב-19 באוקטובר 2026 השלימו את כל חמשת פורמטי התמלול ותרגום עם קלט באנגלית. הבדיקות מאמתות את אופן המסירה והחיוב עבור ההקלטות שנבדקו. הן אינן קובעות אחוז דיוק או איכות תרגום בין שפות.
בחר טקסט, חותמות זמן או כתוביות
| השלב הבא שלך | בחר | קרא את הקובץ שהורד כ- |
|---|---|---|
| שילוב המילים ביישום | json | JSON; התחל ב-text |
| עריכת תמליל רגיל | text | טקסט רגיל |
| ייבוא כתוביות לעורך | srt או vtt | טקסט כתוביות |
| יישור מילים או מקטעים בודדים | verbose_json | JSON עם חותמות הזמן שהתבקשו |
לחותמות זמן למילים, שלח response_format=verbose_json ושדה multipart חוזר בשם timestamp_granularities[] עם הערך word. הוסף חלק נוסף עם הערך segment אם אתה צריך את שניהם. ב-requests של Python, השתמש ברשימת זוגות (name, value) לשדות חוזרים. כל חותמת זמן נמדדת בשניות. [2]
חותמות זמן למילים ותוויות דוברים הן סוגי פלט שונים. Whisper-1 אינו הופך פגישה לתמליל עם תוויות דוברים רק מפני שביקשת מקטעים. הוא גם אינו מזרים טקסט חלקי: המודל מתעלם מ-stream. השאר את chunking_strategy מושמט למסלול המאומת; בחירה מפורשת ב-auto לא עברה את בדיקת התאימות בפועל. [1]
הוסף הקשר לשפה ולאיות בעת הצורך
language=en האופציונלי מציין לבקשת התמלול שהקלט באנגלית. השמט אותו כשנדרש זיהוי אוטומטי. אם קל לטעות בשמיעת שם מוצר, הכנס את האיות הנכון שלו ל-prompt, באותה שפה של השמע. פרומפט ב-Whisper מספק הקשר; הוא אינו מתנהג כהוראת צ'אט שיכולה להבטיח סידור מסוים. [3]
שמור על הקשר רלוונטי לקטע. Whisper מתחשב רק ב-224 הטוקנים האחרונים לפי מפצל הטוקנים שלו. שליחת מסמך ארוך אינה מעניקה להקלטה מילון מונחים בלתי מוגבל, וספירת תווים אינה תחליף אמין לכלל הטוקנים הזה.
לתרגום לאנגלית, שנה את נקודת הקצה ל-/audio/translations. חמשת שדות הבקשה שלה הם file, model, prompt, response_format ו-temperature. התרגום מפיק אנגלית; אין בורר לשפת יעד. השתמש בפרומפט באנגלית אם אתה מספק כזה. [4]
בדוק עלות לפני הרחבת התהליך
הטבלה העדכנית שלהלן משתמשת במשך השמע שנמדד. תמליל ארוך יותר אינו מגדיל את החיוב לפי משך עבור אותה הקלטה. משך כל קובץ מעוגל כלפי מעלה לשניות שלמות ואז מומר ליחידות מדידת שמע. מדריך ה-API כולל את החישוב המדויק, וה-Playground מציג הערכה לאחר שהוא מצליח לקרוא את משך ההקלטה. בקשות שנכשלו אינן מחויבות.
| Model | USD per minute | USD per million audio metering units |
|---|---|---|
| whisper-1 | $0.036 | $36 |
For each recording: units = round(ceil(duration in seconds) × 1000 / 60). Multiply these audio units by the live unit rate. These are duration units, not transcript tokens. Both transcription and English translation use this rule. Failed requests are not charged.
לפני עיבוד קבצים רבים, בדוק הקלטה מייצגת אחת ועיין בתוצאה. שמור את מזהה המשימה של כל הקלטה כדי להתאושש מניתוק באמצעות קריאת המצב הקיים שלה. עיין במדריך הפרמטרים המלא לפני הוספת כתוביות או שילובי פורמטים שנבדקו פחות.
שאלות מהשילוב הראשון
האם אפשר להשתמש בדוגמת OpenAI Python SDK ללא שינוי?
לא. שדות הקלט של multipart מוכרים, אבל SeedRouter מחזיר מזהה משימה אסינכרונית. לקוח סינכרוני שמצפה ששדה text יופיע בתגובת POST דורש התאמה. הדוגמה כאן מציגה במפורש את השליחה ואת קריאת התוצאה.
למה אין חותמות זמן למילים בתוצאת ה-JSON שלי?
פורמט ברירת המחדל json הוא תגובה הממוקדת בטקסט. בקש יחד את verbose_json ואת רמת הפירוט word של חותמות הזמן. תזמון מקטעים לבדו אינו יוצר רשומה לכל מילה.
האם לשלוח POST נוסף אחרי פקיעת זמן ההמתנה?
בדוק תחילה את מזהה המשימה שנשמר או את היסטוריית המשימות. ייתכן שהתגובה אבדה לאחר הקבלה. קריאת משימה קיימת מונעת יצירת בקשה נוספת עבור אותה הקלטה.
האם Whisper-1 יוצא משימוש?
OpenAI הודיעה על תאריך כיבוי של Whisper ב-API שלה ב-26 בפברואר 2027. ההודעה אינה קובעת תאריך כיבוי לשירות הזה. כלול הודעות על מחזור החיים ברשימת התחזוקה בעת בניית שילוב חדש. [5]
מקורות
[1] מדריך SeedRouter Whisper-1 API ומצב האימות, נבדק ב-19 באוקטובר 2026.



