Пишем небольшое приложение на Python для повышения продуктивности с помощью ИИ и BotHub API

в 14:31, , рубрики: python

Всем знакома ситуация: прошла важная онлайн-встреча, задачи распределены, идеи обсуждены, а кто что сказал — уже никто и не вспомнит. Кажется, что чтобы ничего не упустить, нужен отдельный человек, который записывает все за всеми и делает отчеты. А что, если это может делать приложение? Да еще и делать это быстро, точно, и на нескольких языках?

Пишем небольшое приложение на Python для повышения продуктивности с помощью ИИ и BotHub API - 1

В этом туториале я покажу, как создать приложение для автоматического анализа встреч и составления отчетов с использованием API BotHub. Это приложение распознает речь с аудиозаписей, выделяет ключевые моменты — кто что пообещал и какие задачи обсудили — и составляет удобный отчет. К тому же оно дружит с календарями, видеоконференциями и мессенджерами, так что можно легко подключить к привычным рабочим инструментам.

Разберем всё по шагам: от распознавания речи до генерации отчета, — чтобы к концу у вас было готовое приложение, которое сможет стать идеальным помощником для всех тех, кто устал вручную вести записи с совещаний.

Установка зависимостей и настройка проекта

Прежде чем начать, убедимся, что у нас установлены все нужные компоненты, такие как Python и библиотеки для работы с API и аудиофайлами. Мы установим следующие библиотеки:

  • os и pathlib.Path: для работы с переменными окружения и файловыми путями.

  • dotenv: для загрузки конфиденциальных данных из .env файла.

  • fpdf: для генерации PDF-файлов.

  • openai: для работы с API, предоставленным BotHub.

pip install python-dotenv fpdf openai

И импортируем их:

import os
from pathlib import Path
from dotenv import load_dotenv
from fpdf import FPDF
from openai import OpenAI
import logging

Также нам понадобится logging для логирования процесса выполнения программы. Логирование поможет нам отслеживать процесс выполнения программы, а также фиксировать любые ошибки или важные сообщения. Мы настроим базовое логирование на уровне INFO.

logging.basicConfig(level=logging.INFO) 
logger = logging.getLogger(name)

Настройка доступа к BotHub API

Чтобы взаимодействовать с BotHub API, необходимо сначала зарегистрироваться на платформе BotHub и получить API-ключ. Этот ключ служит для аутентификации запросов, которые мы будем отправлять.

Пишем небольшое приложение на Python для повышения продуктивности с помощью ИИ и BotHub API - 2

После получения ключа для обеспечения безопасности хранения, мы создаем файл .env в корневой папке нашего проекта и помещаем туда API-ключ, который мы сгенерировали.

BOTHUB_API_KEY=наш_ключ

Далее, используя библиотеку dotenv, с помощью load_dotenv()загружаем данные из .env, чтобы сделать их доступными для нашего кода.

load_dotenv()

Для работы с API BotHub создаем экземпляр OpenAI, в который передаем api_key и base_url для сервиса BotHub. API-ключ подгружается из окружения, используя os.getenv('BOTHUB_API_KEY')

client = OpenAI(

    api_key=os.getenv('BOTHUB_API_KEY'),

    base_url='https://bothub.chat/api/v2/openai/v1'

)

Основная функция для обработки аудио

На этом этапе мы создаем функцию, которая выполняет транскрипцию аудиофайла в текст. Используем BotHub API и Whisper-1 для распознавания речи. Открываем аудиофайл в режиме rb (чтение в бинарном режиме), затем используем метод client.audio.transcriptions.create для отправки аудиофайла на сервер для обработки. В ответ мы получаем текстовую транскрипцию. Если транскрипция проходит успешно, выводится сообщение Транскрипция завершена, и текст возвращается для дальнейшей обработки. В случае ошибки логируем сообщение об ошибке.

def transcribe_audio(audio_file_path):
    try:
        with open(audio_file_path, "rb") as audio_file:
            transcript = client.audio.transcriptions.create(
                model="whisper-1",
                file=audio_file
            )
        logger.info("Транскрипция завершена.")
        return transcript.text
    except Exception as e:
        logger.error(f"Ошибка при транскрипции аудио: {e}")
        return None

Извлечение ключевых моментов

После транскрипции у нас есть текст нашей встречи. Теперь наша цель — выделить ключевые моменты, такие как обсуждаемые задачи, принятые решения и проблемы. С помощью client.chat.completions.create создаем запрос на выделение ключевых моментов, указывая модель, текст встречи, и запрос в формате messages, где описано, что необходимо выделить основные задачи и проблемы. Функция возвращает список ключевых моментов в случае успешного выполнения.

def extract_key_points(meeting_text):
    try:
        response = client.chat.completions.create(
            model="claude-3.5-sonnet",
            messages=[
                {
                    "role": "user",
                    "content": f"Проанализируй текст встречи и выдели ключевые моменты, такие как задачи, решения и обсуждаемые проблемы:nn{meeting_text}"
                }
            ]
        )
        logger.info("Извлечение ключевых моментов завершено.")
        return response.choices[0].message.content
    except Exception as e:
        logger.error(f"Ошибка при извлечении ключевых моментов: {e}")
        return None

Тональность

Мы также можем проанализирвоать тональность текста встречи, также, как и в extract_key_points, используется client.chat.completions.create, где мы запрашиваем анализ тональности переданного текста. Функция возвращает результат тонального анализа или сообщение об ошибке.

def analyze_sentiment(meeting_text):
    try:
        response = client.chat.completions.create(
            model="claude-3.5-sonnet",
            messages=[
                {
                    "role": "user",
                    "content": f"Проанализируй тональность текста:nn{meeting_text}"
                }
            ]
        )
        logger.info("Анализ тональности завершен.")
        return response.choices[0].message.content
    except Exception as e:
        logger.error(f"Ошибка при анализе тональности: {e}")
        return None

Генерация отчета

Когда ключевые моменты выделены и проведен анализ тональности, нам нужно собрать из них отчет. Этот отчет должен быть логичным, последовательным и кратким. Используется client.chat.completions.create, куда передаем запрос с перечисленными ключевыми моментами и анализом тональности, чтобы API сгенерировало готовый текст отчета. В случае успешного завершения функция возвращает текст отчета.

def generate_report(key_points, sentiment):
    """Создание отчета на основе ключевых моментов и тональности"""
    try:
        content = f"Составь отчет по встрече с учетом следующих ключевых моментов и анализа тональности:nnКлючевые моменты:n{key_points}nnТональность:n{sentiment}"
        report = client.chat.completions.create(
            model="claude-3.5-sonnet",
            messages=[
                {
                    "role": "user",
                    "content": content
                }
            ]
        )
        logger.info("Генерация отчета завершена.")
        return report.choices[0].message.content
    except Exception as e:
        logger.error(f"Ошибка при генерации отчета: {e}")
        return None

Чтобы отчет было удобно хранить и пересылать, сохраняем его в формате PDF. Для создания PDF используется библиотека FPDF. Мы добавляем страницу, устанавливаем автоматический перенос текста по строкам (multi_cell). Добавляем шрифт, который поддерживает кириллицу, если это необходимо (в примере используется DejaVu Sans), и устанавливаем размер шрифта для основного текста. После создания страницы и заполнения ее текстом сохраняем отчет с помощью output(file_path).

def save_report_as_pdf(report_text, file_path="meeting_report.pdf"):
    pdf = FPDF()
    pdf.add_page()
    pdf.set_auto_page_break(auto=True, margin=15)
    pdf.add_font("DejaVu", "", "/Users/veseluhha/Library/Fonts/DejaVuSans.ttf", uni=True)
    pdf.set_font("DejaVu", size=12)
    pdf.multi_cell(0, 10, report_text)
    pdf.output(file_path)
    logger.info(f"Отчет сохранен как {file_path}")

Основная функция

Эта функция объединяет все предыдущие шаги. В начале выполняется транскрипция аудио: если она завершилась неудачно, выводится сообщение об ошибке, и функция завершает выполнение. Затем запускается функция для выделения ключевых моментов. При возникновении ошибки она также возвращает соответствующее сообщение. Аналогично выполняется анализ тональности и, в случае успеха, генерация текста отчета. Если все шаги успешно завершены, вызывается save_report_as_pdf для сохранения отчета в формате PDF. В конце функция возвращает текст отчета.

def analyze_meeting(audio_file_path):
    meeting_text = transcribe_audio(audio_file_path)
    if not meeting_text:
        return "Ошибка при транскрипции аудио."

    key_points = extract_key_points(meeting_text)
    if not key_points:
        return "Ошибка при извлечении ключевых моментов."

    sentiment = analyze_sentiment(meeting_text)
    if not sentiment:
        return "Ошибка при анализе тональности."

    report_text = generate_report(key_points, sentiment)
    if not report_text:
        return "Ошибка при генерации отчета."

    save_report_as_pdf(report_text)
    return report_text

Итого, вместе с вами мы сделали небольшое приложение, которое способно сделать ваши дни более продуктивными и помочь управлять своим временем более эффективно. Мы реализовали с вами порядок основных функций, а именно транскрипцию аудио, выделение ключевых моментов, составление отчета и его сохранение в формате PDF. Такой инструмент позволит не терять важные идеи и задачи, экономя время и усилия.

Автор: veseluha

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js