Sebastien Rousseau

ÀKÀNDÉ

Àkàndé: голосовий асистент на базі GPT для керівників

Архітектура голосового асистента Python із відкритим вихідним кодом: Whisper, GPT-4, кеш SQLite та fpdf2

7 min read
Banner for: Àkàndé: голосовий асистент на базі GPT для керівників

Основні висновки / Стислий звіт

  • Àkàndé ⧉ — це голосовий асистент Python із відкритим вихідним кодом, який об'єднує розпізнавання мовлення OpenAI Whisper (speech-to-text), генерацію відповідей GPT-4 (chat completions), локальний кеш відповідей SQLite та експорт у PDF за допомогою fpdf2 в єдиний керований голосом робочий процес, що не потребує хмарного сховища та локальних ваг моделей ШІ.
  • Кеш SQLite зберігає хеші SHA-256 нормалізованих рядків запитів, зіставлені з необробленим текстом відповідей API; потрапляння в кеш (cache hits) коштують нуль токенів і повертаються менш ніж за 10 мс, що робить повторні запити (наприклад, перегляд рішення, прийнятого раніше під час зустрічі) фактично безкоштовними.
  • Багатокроковий діалог підтримується шляхом побудови списку messages у пам'яті та його передачі під час кожного виклику Chat Completions API — модель отримує повну історію сесії, тому може посилатися на попередні репліки, ціною чого є поступове збільшення використання токенів із кожним кроком.
  • Генерація резюме PDF серіалізує список messages сесії у відформатований документ fpdf2: репліки користувача та асистента маркуються, додаються мітки часу, а автоматичне розбиття на сторінки підтримує сесії будь-якої тривалості; файл записується у локальну файлову систему, а не завантажується у хмару.
  • Межа приватності: пристрій залишає лише активний запит (і історія сесії в межах вікна контексту) — жодні аудіозаписи, транскрипти чи кешовані відповіді не надсилаються до жодних сторонніх сервісів, окрім API OpenAI.

Àkàndé ⧉ — це голосовий асистент Python із відкритим вихідним кодом, побудований на базі трьох компонованих елементів: OpenAI Whisper для розпізнавання мовлення, GPT-4 Chat Completions API для розуміння та генерації мови, а також локальної бази даних SQLite для кешування відповідей і збереження сесій. Результатом є керований голосом робочий процес, який можна запустити на ноутбуці без локальних ваг моделей, інфраструктури автономного зберігання або стеку контейнерів.

У цій статті описано технічну архітектуру кожного компонента, конструктивні рішення щодо кешування та багатокрокового контексту, а також конвеєр експорту в PDF.

Огляд конвеєра

Кожна окрема взаємодія з Àkàndé виконується за такою послідовністю:.

  1. Захоплення аудіо — користувач говорить; застосунок записує аудіо в тимчасовий файл WAV за допомогою sounddevice або сумісної аудіобібліотеки.
  2. Перетворення мовлення на текст — файл WAV надсилається до openai.audio.transcriptions.create() (Whisper API); транскрипт повертається у вигляді звичайного рядка.
  3. Пошук у кеші — транскрипт нормалізується (переводиться в нижній регістр, зайві пробіли видаляються) і хешується за алгоритмом SHA-256; отриманий хеш шукається в локальній таблиці SQLite response_cache.
  4. Виклик API або потрапляння в кеш — у разі промаху транскрипт додається до списку messages сесії та надсилається до openai.chat.completions.create(); текст відповіді зберігається в кеші.
  5. Перетворення тексту на мовлення — текст відповіді перетворюється на аудіо за допомогою кінцевої точки openai.audio.speech.create() (TTS) або локальної бібліотеки TTS і відтворюється.
  6. Експорт у PDF (за запитом) — повний список messages серіалізується у відформатований документ fpdf2 і записується на диск.

Інтеграція з OpenAI: Chat Completions та Whisper

Àkàndé використовує openai Python SDK як для розпізнавання мовлення, так і для генерації тексту. Виклик транскрипції Whisper:

with open(audio_file_path, "rb") as f:
    transcript = openai.audio.transcriptions.create(
        model="whisper-1",
        file=f,
        language=None  # auto-detect
    )
user_text = transcript.text

Виклик Chat Completions підтримує список messages у межах сесії:

messages.append({"role": "user", "content": user_text})

response = openai.chat.completions.create(
    model="gpt-4-turbo-preview",
    messages=messages,
    temperature=0.2,
    max_tokens=1024
)

assistant_text = response.choices[0].message.content
messages.append({"role": "assistant", "content": assistant_text})

Системна підказка (system prompt) додається на початку сесії та визначає роль Àkàndé, формат виведення та будь-які обмеження для конкретної предметної області:

messages = [
    {
        "role": "system",
        "content": (
            "You are Àkàndé, a concise executive assistant. "
            "Respond in plain prose. Do not use markdown. "
            "If asked to summarise, produce three bullet points maximum."
        )
    }
]

Встановлення значення temperature=0.2 зменшує творчу варіативність на користь детермінізму — це важливо для фактологічних запитів, наприклад, для згадування рішення, прийнятого раніше під час сесії.

Кеш відповідей SQLite

Схема кешу є мінімальною:.

CREATE TABLE IF NOT EXISTS response_cache (
    query_hash  TEXT PRIMARY KEY,
    response    TEXT NOT NULL,
    created_at  INTEGER NOT NULL  -- Unix timestamp
);

Шлях пошуку та запису:

import hashlib, sqlite3, time

def _normalise(text: str) -> str:
    return " ".join(text.lower().split())

def cache_get(conn: sqlite3.Connection, query: str) -> str | None:
    h = hashlib.sha256(_normalise(query).encode()).hexdigest()
    row = conn.execute(
        "SELECT response FROM response_cache WHERE query_hash = ?", (h,)
    ).fetchone()
    return row[0] if row else None

def cache_set(conn: sqlite3.Connection, query: str, response: str) -> None:
    h = hashlib.sha256(_normalise(query).encode()).hexdigest()
    conn.execute(
        "INSERT OR REPLACE INTO response_cache VALUES (?, ?, ?)",
        (h, response, int(time.time()))
    )
    conn.commit()

Вираз INSERT OR REPLACE гарантує оновлення кешованої відповіді, якщо той самий запит буде надіслано після оновлення моделі. Для обмеження розміру кешу під час запуску можна запланувати оновлення на основі часу життя (TTL) (DELETE WHERE created_at < ?).

Продуктивність при потраплянні в кеш (cache hit): пошук у SQLite на локальному SSD виконується менш ніж за 1 мс для таблиць розміром до ~100 000 рядків. Затримка повного циклу для «живого» виклику API GPT-4 зазвичай становить 600–900 мс для коротких відповідей. Для щоденних брифінгів із невеликою кількістю повторюваних запитів кеш усуває більшість викликів API після першої сесії.

Генерація резюме PDF

Для експорту в PDF використовується fpdf2 — підтримувана бібліотека PDF для Python, яка не має бінарних залежностей:.

from fpdf import FPDF
from datetime import datetime

def export_session_pdf(messages: list[dict], output_path: str) -> None:
    pdf = FPDF()
    pdf.add_page()
    pdf.set_font("Helvetica", size=11)
    pdf.set_margins(20, 20, 20)

    pdf.set_font("Helvetica", "B", 14)
    pdf.cell(0, 10, f"Àkàndé Session — {datetime.now():%Y-%m-%d %H:%M}", ln=True)
    pdf.ln(4)

    for msg in messages:
        if msg["role"] == "system":
            continue
        label = "You" if msg["role"] == "user" else "Àkàndé"
        pdf.set_font("Helvetica", "B", 10)
        pdf.cell(0, 6, label, ln=True)
        pdf.set_font("Helvetica", size=10)
        pdf.multi_cell(0, 5, msg["content"])
        pdf.ln(3)

    pdf.output(output_path)

Метод multi_cell() обробляє перенесення рядків та автоматичний розрив сторінок, тому сесії будь-якої тривалості дозволяють отримати добре відформатований документ без потреби в ручній логіці розбиття на сторінки. Результатом є PDF/A-сумісний файл без вбудованих шрифтів, крім стандартних метрик Helvetica.

Модель приватності

Межа приватності в Àkàndé визначається трьома фактами:

  1. Аудіо надсилається до Whisper API через HTTPS і не зберігається OpenAI після виконання виклику API (відповідно до політики використання даних API OpenAI станом на лютий 2024 року).
  2. Виклики Chat Completions API передають список messages сесії, який може містити повну історію розмови для багатокрокових сесій.
  3. База даних SQLite та PDF-файли зберігаються виключно в локальній файловій системі; фонова синхронізація з будь-яким хмарним сервісом не виконується.

Для бізнес-сценаріїв керівного рівня, які стосуються чутливих тем — обговорення злиттів та поглинань (M&A), кадрових питань, регуляторної стратегії — перед розгортанням слід перевірити історію сесії, що передається до API, на відповідність політиці використання ШІ в організації. Обмеження max_tokens у системній підказці можна використовувати для запобігання ненавмисній передачі контексту, що виходить за межі запланованого розкриття інформації.

Часті запитання

Чи зберігає Àkàndé історію розмов після завершення сесії? Список messages, що знаходиться в пам'яті, видаляється після завершення процесу. Історія розмов зберігається лише в тому разі, якщо користувач запускає експорт у PDF або якщо додано кастомний шар стійкого зберігання даних. Кеш SQLite зберігає хеші запитів і текст відповідей, а не повний контекст розмови.

Як кеш обробляє схожі, але не ідентичні запити? Кеш використовує хешування точної відповідності для нормалізованого рядка запиту. Два запити, які відрізняються навіть на одне слово, створять різні хеші й призведуть до окремих викликів API. Семантичне кешування (використання схожості вбудовувань для порівняння майже дубльованих запитів) вимагало б додаткового кроку пошуку векторів і не є частиною базової реалізації.

Яку модель GPT Àkàndé використовує за замовчуванням? За замовчуванням використовується gpt-4-turbo-preview станом на лютий 2024 року. Назва моделі є параметром конфігурації, тому її можна замінити на будь-яку модель chat completion від OpenAI. Перехід на gpt-3.5-turbo знижує вартість API приблизно у 20 разів на токен, але погіршує якість міркувань для складних багатокрокових запитів.

Чи можна налаштувати формат експорту в PDF? Так. Функція експорту fpdf2 приймає список messages як єдиний обов'язковий вхідний параметр, тому шрифт, поля, розмір сторінки, вміст заголовка та маркування можна змінити, відредагувавши функцію експорту. fpdf2 також підтримує додавання зображень, таблиць та шрифтів Unicode, що дозволяє створювати складніші макети документів для організацій із особливими вимогами до брендингу.

Джерела

  1. OpenAI. Audio Transcriptions — Whisper API. Документація платформи OpenAI, 2024. https://platform.openai.com/docs/api-reference/audio/createTranscription
  2. OpenAI. Chat Completions API. Документація платформи OpenAI, 2024. https://platform.openai.com/docs/api-reference/chat/create
  3. Voss, J. та ін. fpdf2: Modern PDF generation for Python. GitHub, 2024. https://github.com/py-pdf/fpdf2
  4. SQLite Consortium. SQLite Documentation. sqlite.org, 2024. https://www.sqlite.org/docs.html

Останній перегляд .

```

Останній перегляд .

Перепублікувати цю статтю

Скопіювати формат для Medium

# Àkàndé: голосовий асистент на базі GPT для керівників — Sebastien Rousseau

> Originally published at [https://sebastienrousseau.com/uk/2024-02-12-akande-holosovyy-asystent-osobyste-ta-vykonavche-asystyrovannia/](https://sebastienrousseau.com/uk/2024-02-12-akande-holosovyy-asystent-osobyste-ta-vykonavche-asystyrovannia/)

Àkàndé — це голосовий асистент Python із відкритим вихідним кодом, який об'єднує розпізнавання мовлення OpenAI Whisper, генерацію відповідей GPT-4 та локальний кеш відповідей SQLite у робочий процес, керований голосом — створюючи резюме PDF з історії розмов і зберігаючи всі дані локально.

Read the full article on sebastienrousseau.com: https://sebastienrousseau.com/uk/2024-02-12-akande-holosovyy-asystent-osobyste-ta-vykonavche-asystyrovannia/

Скопіювати формат для Mastodon

Àkàndé: голосовий асистент на базі GPT для керівників — Sebastien Rousseau

Àkàndé — це голосовий асистент Python із відкритим вихідним кодом, який об'єднує розпізнавання мовлення OpenAI Whisper, генерацію відповідей GPT-4 та локальний кеш відповідей SQLite у робочий процес, керований голосом — створюючи резюме PDF з історії розмов і зберігаючи всі дані локально.

https://sebastienrousseau.com/uk/2024-02-12-akande-holosovyy-asystent-osobyste-ta-vykonavche-asystyrovannia/

Копіювати відформатоване для LinkedIn

Àkàndé: голосовий асистент на базі GPT для керівників — Sebastien Rousseau

Àkàndé - це голосовий асистент Python із відкритим вихідним кодом, який об'єднує розпізнавання мовлення OpenAI Whisper, генерацію відповідей GPT-4 та локальний кеш відповідей SQLite у робочий процес, керований голосом - створюючи резюме PDF з історії розмов і зберігаючи всі дані локально.

Ось ключові стратегічні висновки:

- Огляд конвеєра. Кожна окрема взаємодія з Àkàndé виконується за такою послідовністю:.
- Інтеграція з OpenAI: Chat Completions та Whisper. Àkàndé використовує openai Python SDK як для розпізнавання мовлення, так і для генерації тексту.
- Кеш відповідей SQLite. Схема кешу є мінімальною:.
- Генерація резюме PDF. Для експорту в PDF використовується fpdf2 — підтримувана бібліотека PDF для Python, яка не має бінарних залежностей:.

Яким є підхід вашої організації до викликів, описаних у цій статті?

→ https://sebastienrousseau.com/uk/2024-02-12-akande-holosovyy-asystent-osobyste-ta-vykonavche-asystyrovannia/

#Àkàndé #OpenaiGpt4 #WhisperStt #КешуванняSqlite #Fpdf2

Sebastien Rousseau | CC-BY-4.0
Цитувати цю статтю

Àkàndé: голосовий асистент на базі GPT для керівників — Sebastien Rousseau

Àkàndé — це голосовий асистент Python із відкритим вихідним кодом, який об'єднує розпізнавання мовлення OpenAI Whisper, генерацію відповідей GPT-4 та локальний кеш відповідей SQLite у робочий процес, керований голосом — створюючи резюме PDF з історії розмов і зберігаючи всі дані локально.

BibTeX

@online{rousseau2024àkàndé,
  author  = {Rousseau, Sebastien},
  title   = {{Àkàndé: голосовий асистент на базі GPT для керівників — Sebastien Rousseau}},
  year    = {2024},
  url     = {https://sebastienrousseau.com/uk/2024-02-12-akande-holosovyy-asystent-osobyste-ta-vykonavche-asystyrovannia/},
  urldate = {2024}
}

RIS

TY  - GEN
AU  - Rousseau, Sebastien
TI  - Àkàndé: голосовий асистент на базі GPT для керівників — Sebastien Rousseau
PY  - 2024
UR  - https://sebastienrousseau.com/uk/2024-02-12-akande-holosovyy-asystent-osobyste-ta-vykonavche-asystyrovannia/
ER  -

Vancouver

Rousseau S. Àkàndé: голосовий асистент на базі GPT для керівників — Sebastien Rousseau. sebastienrousseau.com. 2024 Feb 12. Available from: https://sebastienrousseau.com/uk/2024-02-12-akande-holosovyy-asystent-osobyste-ta-vykonavche-asystyrovannia/

Chicago

Rousseau, Sebastien. "Àkàndé: голосовий асистент на базі GPT для керівників — Sebastien Rousseau." sebastienrousseau.com. February 12, 2024. https://sebastienrousseau.com/uk/2024-02-12-akande-holosovyy-asystent-osobyste-ta-vykonavche-asystyrovannia/.

APA

Rousseau, S. (2024, February 12). Àkàndé: голосовий асистент на базі GPT для керівників — Sebastien Rousseau. sebastienrousseau.com. https://sebastienrousseau.com/uk/2024-02-12-akande-holosovyy-asystent-osobyste-ta-vykonavche-asystyrovannia/

Перевидати цю статтю

Àkàndé: голосовий асистент на базі GPT для керівників — Sebastien Rousseau

Àkàndé — це голосовий асистент Python із відкритим вихідним кодом, який об'єднує розпізнавання мовлення OpenAI Whisper, генерацію відповідей GPT-4 та локальний кеш відповідей SQLite у робочий процес, керований голосом — створюючи резюме PDF з історії розмов і зберігаючи всі дані локально.

Ця стаття поширюється за ліцензією Creative Commons Attribution 4.0 International. Перевидання вимагає посилання на канонічну URL-адресу.

Àkàndé: голосовий асистент на базі GPT для керівників — Sebastien Rousseau

Àkàndé — це голосовий асистент Python із відкритим вихідним кодом, який об'єднує розпізнавання мовлення OpenAI Whisper, генерацію відповідей GPT-4 та локальний кеш відповідей SQLite у робочий процес, керований голосом — створюючи резюме PDF з історії розмов і зберігаючи всі дані локально.

Originally published at https://sebastienrousseau.com/uk/2024-02-12-akande-holosovyy-asystent-osobyste-ta-vykonavche-asystyrovannia/ by Sebastien Rousseau.
Licensed under CC-BY-4.0.