AI-система транскрибації та сумаризації подкастів

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.
Показано 1 з 1Усі 1566 послуг
AI-система транскрибації та сумаризації подкастів
Простий
від 1 дня до 3 днів
Часті запитання

Напрямки AI-розробки

Етапи розробки AI-рішення

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1285
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1198
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    902
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1122
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    589
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    859

AI-транскрибація та саммаризація подкастів Автоматична транскрибація подкастів вирішує завдання SEO (текстовий контент під пошукові системи), доступності, створення шоунотів та ретрансляції контенту в соцмережі. Whisper large-v3 дає WER 4-8% на чистих записах студійної якості. ### Базовий пайплайн```python

import whisper from openai import AsyncOpenAI

async def transcribe_and_summarize_podcast(audio_path: str) -> dict: # Транскрибация model = whisper.load_model("large-v3") result = model.transcribe( audio_path, language="ru", task="transcribe", verbose=False, word_timestamps=True ) transcript = result["text"] segments = result["segments"] # [{start, end, text}, ...]

# Генерация shownotes через GPT-4o
client = AsyncOpenAI()
response = await client.chat.completions.create(
    model="gpt-4o",
    messages=[{
        "role": "system",
        "content": "Создай shownotes для подкаста: краткое описание эпизода (3-5 предложений), ключевые темы списком, временные метки для основных тем в формате MM:SS."
    }, {
        "role": "user",
        "content": transcript[:6000]
    }]
)

# Временные метки ключевых тем
chapters = extract_chapters(segments)

return {
    "transcript": transcript,
    "shownotes": response.choices[0].message.content,
    "chapters": chapters,
    "duration_sec": segments[-1]["end"] if segments else 0
}

def extract_chapters(segments: list) -> list[dict]: """Выделяем тематические блоки по паузам и семантике""" chapters = [] # Ищем паузы > 3 секунды как границы глав for i in range(1, len(segments)): gap = segments[i]["start"] - segments[i-1]["end"] if gap > 3.0: chapters.append({ "timestamp": int(segments[i]["start"]), "text": segments[i]["text"][:80] }) return chapters ### RSS-інтеграція для автоматичної обробкиpython import feedparser import httpx

async def process_podcast_feed(rss_url: str) -> list[dict]: feed = feedparser.parse(rss_url) results = []

for entry in feed.entries[:5]:  # последние 5 эпизодов
    audio_url = next(
        (enc.href for enc in entry.enclosures if enc.type.startswith("audio")),
        None
    )
    if not audio_url:
        continue

    async with httpx.AsyncClient() as client:
        audio_data = await client.get(audio_url)

    with open(f"/tmp/{entry.id}.mp3", "wb") as f:
        f.write(audio_data.content)

    result = await transcribe_and_summarize_podcast(f"/tmp/{entry.id}.mp3")
    result["title"] = entry.title
    result["published"] = entry.published
    results.append(result)

return results