Sebastien Rousseau

ÀKÀNDÉ

Àkàndé: Φωνητικός βοηθός με GPT για στελέχη

Αρχιτεκτονική ενός φωνητικού βοηθού Python ανοικτού κώδικα: Whisper, GPT-4, cache SQLite και fpdf2

7 min read
Banner for: Àkàndé: Φωνητικός βοηθός με GPT για στελέχη

Σύνοψη για στελέχη / Βασικά σημεία

  • Το Àkàndé ⧉ είναι ένας φωνητικός βοηθός Python ανοικτού κώδικα που συνδέει την μετατροπή ομιλίας σε κείμενο OpenAI Whisper, τις συνομιλίες GPT-4 (chat completions), μια τοπική cache απαντήσεων SQLite και την εξαγωγή PDF μέσω fpdf2 σε μια ενιαία φωνητικά καθοδηγούμενη ροή εργασίας, χωρίς να απαιτεί αποθήκευση στο cloud ούτε τοπικά βάρη μοντέλου AI.
  • Η cache SQLite αποθηκεύει κατακερματισμούς SHA-256 κανονικοποιημένων συμβολοσειρών ερωτημάτων, αντιστοιχισμένους με το ακατέργαστο κείμενο απάντησης του API· τα ευρέσεις στην cache (cache hits) κοστίζουν μηδέν tokens και επιστρέφουν σε λιγότερο από 10 ms, καθιστώντας τα επαναλαμβανόμενα ερωτήματα (όπως η ανασκόπηση μιας απόφασης από νωρίτερα σε μια συνάντηση) ουσιαστικά δωρεάν.
  • Η συνομιλία πολλαπλών γύρων διατηρείται με τη δόμηση της λίστας messages στη μνήμη και τη μετάδοσή της σε κάθε κλήση του Chat Completions API· το μοντέλο λαμβάνει το πλήρες ιστορικό της συνεδρίας ώστε να μπορεί να αναφέρεται σε προηγούμενες ανταλλαγές, με κόστος τη σταδιακά αυξανόμενη χρήση tokens ανά γύρο.
  • Η δημιουργία περίληψης PDF μετατρέπει σε σειρά (serialises) τη λίστα messages της συνεδρίας σε ένα μορφοποιημένο έγγραφο fpdf2: οι γύροι του χρήστη και του βοηθού επισημαίνονται, εισάγονται χρονοσφραγίδες και η αυτόματη σελιδοποίηση διαχειρίζεται συνεδρίες οποιουδήποτε μήκους· το αρχείο εγγράφεται στο τοπικό σύστημα αρχείων, δεν μεταφορτώνεται.
  • Όριο απορρήτου: μόνο το ζωντανό ερώτημα (και το ιστορικό της συνεδρίας έως το όριο του παραθύρου συμφραζομένων) εγκαταλείπει τη συσκευή· καμία ηχογράφηση, κανένα απομαγνητοφωνημένο κείμενο και καμία αποθηκευμένη απάντηση δεν αποστέλλεται σε οποιαδήποτε απομακρυσμένη υπηρεσία πέραν του API της OpenAI.

Το Àkàndé ⧉ είναι ένας φωνητικός βοηθός Python ανοικτού κώδικα, δομημένος γύρω από τρία συνθέσιμα στοιχεία: το OpenAI Whisper για την αναγνώριση ομιλίας, το GPT-4 Chat Completions API για την κατανόηση και την παραγωγή γλώσσας, και μια τοπική βάση δεδομένων SQLite για την cache απαντήσεων και τη διατήρηση της συνεδρίας. Το αποτέλεσμα είναι μια φωνητικά καθοδηγούμενη ροή εργασίας που μπορεί να εκτελεστεί σε έναν φορητό υπολογιστή χωρίς τοπικά βάρη μοντέλου, χωρίς υποδομή αποθήκευσης εκτός σύνδεσης και χωρίς στοίβα container.

Αυτό το άρθρο περιγράφει την τεχνική αρχιτεκτονική κάθε στοιχείου, τις σχεδιαστικές αποφάσεις γύρω από την cache και τα συμφραζόμενα πολλαπλών γύρων, καθώς και τη ροή εξαγωγής PDF.

Επισκόπηση της ροής

Μια μεμονωμένη αλληλεπίδραση με το Àkàndé ακολουθεί αυτή τη σειρά:

  1. Λήψη ήχου — ο χρήστης μιλά· η εφαρμογή ηχογραφεί τον ήχο σε ένα προσωρινό αρχείο WAV χρησιμοποιώντας το sounddevice ή μια συμβατή βιβλιοθήκη ήχου.
  2. Μετατροπή ομιλίας σε κείμενο — το αρχείο WAV υποβάλλεται στο openai.audio.transcriptions.create() (Whisper API)· το απομαγνητοφωνημένο κείμενο επιστρέφεται ως απλή συμβολοσειρά.
  3. Αναζήτηση στην cache — το κείμενο κανονικοποιείται (πεζά, σύμπτυξη κενών) και κατακερματίζεται με SHA-256· ο κατακερματισμός αναζητείται στον τοπικό πίνακα SQLite response_cache.
  4. Κλήση API ή εύρεση στην cache — σε περίπτωση αστοχίας (miss), το κείμενο προσαρτάται στη λίστα messages της συνεδρίας και αποστέλλεται στο openai.chat.completions.create()· το κείμενο της απάντησης αποθηκεύεται στην cache.
  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 ανταλλάσσει τη δημιουργική διακύμανση με τον ντετερμινισμό, κάτι σημαντικό για πραγματολογικά ερωτήματα, όπως η ανάκληση μιας απόφασης από νωρίτερα στη συνεδρία.

Cache απαντήσεων SQLite

Το σχήμα της cache είναι ελάχιστο:

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.

Επίδοση εύρεσης στην cache: μια αναζήτηση SQLite σε τοπικό SSD επιστρέφει σε λιγότερο από 1 ms για πίνακες έως ~100.000 εγγραφές. Η καθυστέρηση μετ' επιστροφής για μια ζωντανή κλήση GPT-4 API είναι τυπικά 600–900 ms για σύντομες απαντήσεις. Για μια καθημερινή ενημέρωση με μια δράκα επαναλαμβανόμενων ερωτημάτων, η cache εξαλείφει τις περισσότερες κλήσεις 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 βρίσκονται εξ ολοκλήρου στο τοπικό σύστημα αρχείων· δεν πραγματοποιείται κανένας συγχρονισμός στο παρασκήνιο προς οποιαδήποτε υπηρεσία cloud.

Για περιπτώσεις χρήσης από στελέχη που αφορούν ευαίσθητα θέματα, όπως συζητήσεις για συγχωνεύσεις και εξαγορές, θέματα προσωπικού ή ρυθμιστική στρατηγική, το ιστορικό της συνεδρίας που μεταδίδεται στο API θα πρέπει να ελέγχεται έναντι της πολιτικής χρήσης AI του οργανισμού πριν από την ανάπτυξη. Το όριο max_tokens στο system prompt μπορεί να χρησιμοποιηθεί για την αποτροπή ακούσιας μετάδοσης συμφραζομένων που υπερβαίνουν το επιδιωκόμενο εύρος γνωστοποίησης.

Συχνές ερωτήσεις

Διατηρεί το Àkàndé το ιστορικό συνομιλίας μετά τη λήξη της συνεδρίας; Η λίστα messages που βρίσκεται στη μνήμη απορρίπτεται όταν τερματίζεται η διεργασία. Το ιστορικό συνομιλίας διατηρείται μόνο αν ο χρήστης ενεργοποιήσει μια εξαγωγή PDF ή αν προστεθεί ένα προσαρμοσμένο επίπεδο διατήρησης. Η cache SQLite αποθηκεύει κατακερματισμούς ερωτημάτων και κείμενο απαντήσεων, όχι το πλήρες πλαίσιο της συνομιλίας.

Πώς διαχειρίζεται η cache ερωτήματα που είναι παρόμοια αλλά όχι πανομοιότυπα; Η cache χρησιμοποιεί κατακερματισμό ακριβούς αντιστοίχισης στην κανονικοποιημένη συμβολοσειρά του ερωτήματος. Δύο ερωτήματα που διαφέρουν κατά μία μόνο λέξη θα παραγάγουν διαφορετικούς κατακερματισμούς και θα οδηγήσουν σε ξεχωριστές κλήσεις API. Η σημασιολογική cache (χρησιμοποιώντας ομοιότητα embeddings για την αντιστοίχιση σχεδόν διπλότυπων ερωτημάτων) θα απαιτούσε ένα επιπλέον βήμα αναζήτησης διανυσμάτων και δεν αποτελεί μέρος της βασικής υλοποίησης.

Ποιο μοντέλο GPT χρησιμοποιεί το Àkàndé από προεπιλογή; Η προεπιλογή είναι το gpt-4-turbo-preview όπως ίσχυε τον Φεβρουάριο του 2024. Το όνομα του μοντέλου είναι μια παράμετρος διαμόρφωσης, οπότε οποιοδήποτε μοντέλο chat completion της OpenAI μπορεί να αντικατασταθεί. Η μετάβαση στο gpt-3.5-turbo μειώνει το κόστος του API κατά περίπου 20 φορές ανά token, αλλά μειώνει την ποιότητα συλλογισμού για σύνθετα ερωτήματα πολλαπλών βημάτων.

Μπορεί να προσαρμοστεί η μορφή εξαγωγής PDF; Ναι. Η συνάρτηση εξαγωγής fpdf2 δέχεται τη λίστα messages ως τη μόνη απαιτούμενη είσοδό της, οπότε η γραμματοσειρά, τα περιθώρια, το μέγεθος σελίδας, το περιεχόμενο της κεφαλίδας και η επισήμανση μπορούν όλα να αλλάξουν με την επεξεργασία της συνάρτησης εξαγωγής. Το fpdf2 υποστηρίζει επίσης την προσθήκη εικόνων, πινάκων και γραμματοσειρών Unicode, επιτρέποντας πλουσιότερες διατάξεις εγγράφων για οργανισμούς με συγκεκριμένες απαιτήσεις εταιρικής ταυτότητας.

Αναφορές

  1. OpenAI. Audio Transcriptions — Whisper API. OpenAI Platform Documentation, 2024. https://platform.openai.com/docs/api-reference/audio/createTranscription
  2. OpenAI. Chat Completions API. OpenAI Platform Documentation, 2024. https://platform.openai.com/docs/api-reference/chat/create
  3. Voss, J. et al. 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/el/2024-02-12-akande-voice-assistant-revolutionising-personal-and-executive-assistance/](https://sebastienrousseau.com/el/2024-02-12-akande-voice-assistant-revolutionising-personal-and-executive-assistance/)

Το Àkàndé είναι ένας φωνητικός βοηθός Python ανοικτού κώδικα που συνδέει την αναγνώριση ομιλίας OpenAI Whisper, τις συνομιλίες GPT-4 (chat completions) και μια τοπική cache απαντήσεων SQLite σε μια φωνητικά καθοδηγούμενη ροή εργασίας: παράγει περιλήψεις PDF από το ιστορικό συνομιλίας και διατηρεί όλα τα αποθηκευμένα δεδομένα τοπικά.

Read the full article on sebastienrousseau.com: https://sebastienrousseau.com/el/2024-02-12-akande-voice-assistant-revolutionising-personal-and-executive-assistance/

Αντιγραφή διαμορφωμένου για Mastodon

Àkàndé: Φωνητικός βοηθός με GPT για στελέχη — Sebastien Rousseau

Το Àkàndé είναι ένας φωνητικός βοηθός Python ανοικτού κώδικα που συνδέει την αναγνώριση ομιλίας OpenAI Whisper, τις συνομιλίες GPT-4 (chat completions) και μια τοπική cache απαντήσεων SQLite σε μια φωνητικά καθοδηγούμενη ροή εργασίας: παράγει περιλήψεις PDF από το ιστορικό συνομιλίας και διατηρεί όλ…

https://sebastienrousseau.com/el/2024-02-12-akande-voice-assistant-revolutionising-personal-and-executive-assistance/

Αντιγραφή διαμορφωμένου για LinkedIn

Àkàndé: Φωνητικός βοηθός με GPT για στελέχη — Sebastien Rousseau

Το Àkàndé είναι ένας φωνητικός βοηθός Python ανοικτού κώδικα που συνδέει την αναγνώριση ομιλίας OpenAI Whisper, τις συνομιλίες GPT-4 (chat completions) και μια τοπική cache απαντήσεων SQLite σε μια φωνητικά καθοδηγούμενη ροή εργασίας: παράγει περιλήψεις PDF από το ιστορικό συνομιλίας και διατηρεί όλα τα αποθηκευμένα δεδομένα τοπικά.

Ακολουθούν τα βασικά στρατηγικά συμπεράσματα:

- Επισκόπηση της ροής. Μια μεμονωμένη αλληλεπίδραση με το Àkàndé ακολουθεί αυτή τη σειρά:.
- Ενσωμάτωση OpenAI: Chat Completions και Whisper. Το Àkàndé χρησιμοποιεί το openai Python SDK τόσο για την αναγνώριση ομιλίας όσο και για την παραγωγή κειμένου.
- Cache απαντήσεων SQLite. Το σχήμα της cache είναι ελάχιστο:.
- Δημιουργία περίληψης PDF. Η εξαγωγή PDF χρησιμοποιεί το fpdf2, μια συντηρούμενη βιβλιοθήκη PDF για Python χωρίς δυαδικές εξαρτήσεις:.

Ποια είναι η προσέγγιση του οργανισμού σας στις προκλήσεις που περιγράφονται σε αυτό το άρθρο;

→ https://sebastienrousseau.com/el/2024-02-12-akande-voice-assistant-revolutionising-personal-and-executive-assistance/

#Àkàndé #OpenaiGpt4 #WhisperStt #SqliteCaching #Fpdf2

Sebastien Rousseau | CC-BY-4.0
Παραπομπή σε αυτό το άρθρο

Àkàndé: Φωνητικός βοηθός με GPT για στελέχη — Sebastien Rousseau

Το Àkàndé είναι ένας φωνητικός βοηθός Python ανοικτού κώδικα που συνδέει την αναγνώριση ομιλίας OpenAI Whisper, τις συνομιλίες GPT-4 (chat completions) και μια τοπική cache απαντήσεων SQLite σε μια φωνητικά καθοδηγούμενη ροή εργασίας: παράγει περιλήψεις PDF από το ιστορικό συνομιλίας και διατηρεί όλα τα αποθηκευμένα δεδομένα τοπικά.

BibTeX

@online{rousseau2024àkàndé,
  author  = {Rousseau, Sebastien},
  title   = {{Àkàndé: Φωνητικός βοηθός με GPT για στελέχη — Sebastien Rousseau}},
  year    = {2024},
  url     = {https://sebastienrousseau.com/el/2024-02-12-akande-voice-assistant-revolutionising-personal-and-executive-assistance/},
  urldate = {2024}
}

RIS

TY  - GEN
AU  - Rousseau, Sebastien
TI  - Àkàndé: Φωνητικός βοηθός με GPT για στελέχη — Sebastien Rousseau
PY  - 2024
UR  - https://sebastienrousseau.com/el/2024-02-12-akande-voice-assistant-revolutionising-personal-and-executive-assistance/
ER  -

Vancouver

Rousseau S. Àkàndé: Φωνητικός βοηθός με GPT για στελέχη — Sebastien Rousseau. sebastienrousseau.com. 2024 Feb 12. Available from: https://sebastienrousseau.com/el/2024-02-12-akande-voice-assistant-revolutionising-personal-and-executive-assistance/

Chicago

Rousseau, Sebastien. "Àkàndé: Φωνητικός βοηθός με GPT για στελέχη — Sebastien Rousseau." sebastienrousseau.com. February 12, 2024. https://sebastienrousseau.com/el/2024-02-12-akande-voice-assistant-revolutionising-personal-and-executive-assistance/.

APA

Rousseau, S. (2024, February 12). Àkàndé: Φωνητικός βοηθός με GPT για στελέχη — Sebastien Rousseau. sebastienrousseau.com. https://sebastienrousseau.com/el/2024-02-12-akande-voice-assistant-revolutionising-personal-and-executive-assistance/

Αναδημοσίευση αυτού του άρθρου

Àkàndé: Φωνητικός βοηθός με GPT για στελέχη — Sebastien Rousseau

Το Àkàndé είναι ένας φωνητικός βοηθός Python ανοικτού κώδικα που συνδέει την αναγνώριση ομιλίας OpenAI Whisper, τις συνομιλίες GPT-4 (chat completions) και μια τοπική cache απαντήσεων SQLite σε μια φωνητικά καθοδηγούμενη ροή εργασίας: παράγει περιλήψεις PDF από το ιστορικό συνομιλίας και διατηρεί όλα τα αποθηκευμένα δεδομένα τοπικά.

Αυτό το άρθρο διατίθεται με άδεια Creative Commons Attribution 4.0 International. Η αναδημοσίευση απαιτεί αναφορά στην κανονική διεύθυνση URL.

Àkàndé: Φωνητικός βοηθός με GPT για στελέχη — Sebastien Rousseau

Το Àkàndé είναι ένας φωνητικός βοηθός Python ανοικτού κώδικα που συνδέει την αναγνώριση ομιλίας OpenAI Whisper, τις συνομιλίες GPT-4 (chat completions) και μια τοπική cache απαντήσεων SQLite σε μια φωνητικά καθοδηγούμενη ροή εργασίας: παράγει περιλήψεις PDF από το ιστορικό συνομιλίας και διατηρεί όλα τα αποθηκευμένα δεδομένα τοπικά.

Originally published at https://sebastienrousseau.com/el/2024-02-12-akande-voice-assistant-revolutionising-personal-and-executive-assistance/ by Sebastien Rousseau.
Licensed under CC-BY-4.0.