Роль: Ты — Principal Software Engineer, и тебе поручено спроектировать и реализовать с нуля data-пайплайн для анализа аудиозаписей. Ты обладаешь глубокими знаниями в области data-инжиниринга, асинхронного программирования и лучших практик безопасности. Твоя задача — создать систему, которая будет не только функциональной, но и производительной, надежной и готовой к масштабированию.
Проект: "Анализ Звонков"
Высокоуровневая цель: Разработать автоматизированный Python-пайплайн, который принимает на вход Excel-файл со ссылками на аудиозаписи звонков, обрабатывает их и возвращает тот же файл, обогащенный результатами транскрибации и анализа с помощью большой языковой модели (LLM).
Функциональные требования (Шаги пайплайна):
Входные данные: Пайплайн должен принимать путь к Excel-файлу. В файле есть как минимум колонка с URL-адресами аудиофайлов и колонки с персональными данными клиентов (PII), например, 'Название контакта', 'ИНН'.
Обработка аудио:
Для каждой строки в файле скачать аудиофайл по URL.
Транскрибировать скачанный аудиофайл с помощью openai-whisper.
Сохранить полученный текст в новую колонку Transcription_Text.
Очистка текста: Перед анализом текст транскрипции должен проходить базовую очистку: приведение к нижнему регистру, удаление спецсимволов и лишних пробелов.
Анализ текста с помощью YandexGPT:
Используя API YandexGPT, для каждой транскрипции определить:
Настроение клиента (например, 'Позитивное', 'Нейтральное', 'Негативное').
Ключевые "боли" клиента (проблемы, возражения).
Основные темы разговора (например, 'Оплата', 'Доставка', 'Техподдержка').
Портрет клиента (краткое саммари на 3-4 предложения, описывающее цель и манеру общения клиента).
Результаты каждого анализа сохранить в отдельные новые колонки.
Обеспечение безопасности:
Во время всего процесса обработки персональные данные клиентов (PII) в DataFrame должны быть зашифрованы.
Перед сохранением итогового файла PII-данные должны быть расшифрованы обратно в читаемый вид.
Выходные данные: Пайплайн должен сохранить итоговый DataFrame в новый Excel-файл, содержащий все исходные колонки, а также новые колонки с транскрипцией и результатами анализа.
Нефункциональные требования (Критерии качества):
Архитектура и Дизайн:
Спроектируй решение как единый, целостный модуль, предпочтительно в виде класса (например, CallAnalysisPipeline), который инкапсулирует всю логику.
Минимизируй операции чтения/записи на диск. Все промежуточные трансформации должны происходить в памяти с pandas.DataFrame.
Производительность:
Запросы к API YandexGPT являются наиболее вероятным узким местом. Ты обязан реализовать эту часть с использованием асинхронного подхода (asyncio, aiohttp) для обеспечения высокого параллелизма запросов (concurrent requests).
Надежность и Отказоустойчивость:
Пайплайн должен быть перезапускаемым (resumable). Если процесс прервется, при следующем запуске он должен автоматически определять уже обработанные строки и продолжать с места остановки. Реализуй механизм чекпоинтов (сохранение промежуточного результата каждые N строк).
Система должна быть устойчива к сбоям. Ошибка при обработке одной строки (например, неверный URL или сбой API) не должна останавливать весь пайплайн. Такие ошибки должны корректно логироваться.
Все сетевые операции (скачивание, API-запросы) должны иметь механизм повторных попыток с экспоненциальной задержкой.
Безопасность:
Для шифрования персональных данных используй криптографически стойкий симметричный алгоритм, предназначенный для долговременного хранения, например, AES в режиме GCM. Категорически запрещается использовать алгоритмы, токены которых имеют короткое время жизни по умолчанию (например, cryptography.fernet).
Конфигурируемость и Поддерживаемость:
Вынеси все настраиваемые параметры (пути к файлам, ключи API, параметры моделей, названия колонок) в единый конфигурационный объект (например, dataclass).
Реализуй исчерпывающее логирование с указанием этапов работы, времени выполнения ключевых операций и возникающих ошибок. Используй декоратор для логирования времени выполнения функций.
Формат вывода:
Один Python-скрипт, содержащий полную реализацию пайплайна.
Команда pip install ... для установки всех необходимых зависимостей.
Четкие комментарии в коде, объясняющие важные архитектурные решения.
Опционально: Включи функцию для оценки качества транскрипции по метрике WER.