Whisper: промптинг для улучшения транскрипции
Используем необязательный параметр prompt API Whisper для управления стилем вывода и правильного написания имён, брендов и терминов. Разбираем, как GPT может генерировать фиктивные промпты для Whisper.
Параметр prompt в Whisper API
Whisper принимает необязательный параметр prompt — короткий текст, задающий стиль транскрипции и словарный запас. Модель не следует инструкциям из промпта: она просто подражает его стилю.
Ограничения: промпт усекается до 224 токенов; инструкции вроде "используй Markdown" игнорируются.
Базовая транскрипция с промптом
from openai import OpenAI
import os
client = OpenAI()
def transcribe(audio_filepath, prompt: str = "") -> str:
transcript = client.audio.transcriptions.create(
file=open(audio_filepath, "rb"),
model="whisper-1",
prompt=prompt,
)
return transcript.text
# Без промпта — базовый результат
baseline = transcribe("meeting.wav", prompt="")
# Глоссарий для правильного написания имён
result = transcribe("meeting.wav", prompt="Attendees: Aimee, Shawn. Product: QuirkQuid Quill")
Длинные промпты эффективнее коротких
# Короткий промпт — менее надёжен
transcribe(audio, prompt="president biden.")
# Длинный промпт задаёт устойчивый паттерн
long_prompt = (
"i want to share some thoughts on this topic. "
"multiple sentences help establish a clear pattern. "
"the more text you provide, the more reliably the model follows."
)
transcribe(audio, prompt=long_prompt)
Генерация фиктивных промптов через GPT
def fictitious_prompt_from_instruction(instruction: str) -> str:
response = client.chat.completions.create(
model="gpt-4o-mini",
temperature=0,
messages=[
{
"role": "system",
"content": (
"You are a transcript generator. Create one long paragraph "
"of fictional conversation. Never diarize speakers."
),
},
{"role": "user", "content": instruction},
],
)
return response.choices[0].message.content
# Пример: промпт для транскрипции с многоточиями
prompt = fictitious_prompt_from_instruction(
"Instead of periods, end every sentence with ellipses."
)
transcribe(audio, prompt=prompt)
Промпты Whisper особенно полезны для: глоссариев брендов и имён, нормализации пунктуации, фиксации стиля (строчные/прописные).
Запишите или скачайте аудио с несколькими нестандартными именами или продуктовыми названиями. Транскрибируйте без промпта и с глоссарием в промпте. Сравните точность написания в обоих вариантах.
Скопируйте и адаптируйте под свой контекст. Текст в треугольных скобках — то, что нужно заменить.
from openai import OpenAI
client = OpenAI()
def transcribe(path: str, prompt: str = "") -> str:
with open(path, "rb") as f:
return client.audio.transcriptions.create(
file=f, model="whisper-1", prompt=prompt
).text
def build_glossary_prompt(*terms) -> str:
# Достаточно длинный контекст для устойчивого следования паттерну
joined = ", ".join(terms)
return (
f"Glossary of proper nouns and product names: {joined}. "
"Please ensure these terms are spelled correctly in the transcript."
)
# Использование
no_prompt = transcribe("audio.wav")
with_glossary = transcribe(
"audio.wav",
prompt=build_glossary_prompt("QuirkQuid", "GPT-4o", "Aimee", "Shawn"),
)
print("Without prompt:", no_prompt[:200])
print("With glossary: ", with_glossary[:200])Писать инструкции в промпте («используй заглавные буквы для имён») — Whisper игнорирует инструкции, только имитирует стиль. Использовать промпт длиннее 224 токенов — лишнее усекается молча.
Подача нескольких предложений вместо одного слова делает стиль гораздо более устойчивым. GPT-4o-mini — отличный генератор фиктивных транскриптов для нестандартных стилей.
Транскрипция интервью с нестандартными именами, записи продуктовых демо с брендами, подкасты с повторяющимися терминами.
Когда нужно полностью изменить язык или стиль транскрипции — промпт не переопределяет понимание аудио моделью.