Lerne, wie du das Voxtral Mini 3B-Modell von Mistral mit vLLM betreibst, eine API einrichtest und eine Streamlit-basierte Audio-Zusammenfassungs- und Q&A-App erstellst.
Mistral hat kürzlich seine ersten Open-Source-Multimodal-Audiomodelle Voxtral Small und Voxtral Mini vorgestellt, die auf der Mistral 3B-Architektur basieren und speziell für Audioverstehens- und Transkriptionsaufgaben optimiert sind.
In diesem Blog geht's vor allem um den Voxtral Mini 3B, ein kompaktes Open-Source-Modell, das für Echtzeit-Audio-zu-Text-Aufgaben wie Transkription, Zusammenfassung und Q&A entwickelt wurde. Dank seiner effizienten Größe und der Unterstützung für kontextbezogene Schlussfolgerungen ist Voxtral Mini besonders leistungsstark, wenn es mit Inferenz-Frameworks mit hohem Durchsatz wie vLLM kombiniert wird. Damit eignet es sich ideal für die Entwicklung schneller Offline-Audioanwendungen.
In diesem Tutorial zeige ich dir, wie du:
Voxtral Mini 3B mit vLLM auf Colab Pro ausführen
Stell einen API-Endpunkt mit ngrok-Tunnel bereit, um von überall auf dein Modell zugreifen zu können.
Entwickle einen Streamlit-basierten Audio-Assistenten, der Transkription, Zusammenfassung und Fragen-Antworten anhand von rohen Audio-Eingaben macht.
Wir halten unsere Leser über die neuesten Entwicklungen im Bereich KI auf dem Laufenden, indem wir ihnen jeden Freitag unseren kostenlosen Newsletter„The Median “ schicken , der die wichtigsten Meldungen der Woche zusammenfasst. Abonniere unseren Newsletter und bleib in nur wenigen Minuten pro Woche auf dem Laufenden:
Was ist Voxtral von Mistral?
Voxtral ist Mistrals komplett offene Audio-Modellfamilie, die für super Sprachverständnis entwickelt wurde. Voxtral gibt's in zwei Modellgrößen:
Voxtral Small-: 24 B-Parameter, super für den Einsatz in der Produktion und in Unternehmen
Voxtral Mini-: 3 B-Parameter, optimiert für den lokalen Betrieb auf Edge-Geräten
Voxtral nimmt rohe Audio-Dateien (wie .wav oder .mp3) und kann Transkriptionen und Zusammenfassungen von gesprochenen Inhalten effizient erstellen. Voxtral ist eine kleinere Version, die für schnelle Schlussfolgerungen und den Offline-Einsatz optimiert ist.
Es folgt dem Modellformat von Mistral und ist mit Hochdurchsatz-Inferenz-Frameworks wie vLLM, was es super für Echtzeit-Transkriptionen oder einfache Sprachanwendungen macht.
So startest du Voxtral Mini 3B mit vLLM
In diesem Abschnitt zeige ich dir, wie du Voxtral Mini 3B mit vLLM auf einem Colab Pro mit aktivierter T4-GPU nutzen kannst. vLLM wurde wegen seiner hohen Durchsatzrate und niedrigen Latenz ausgewählt, die ideal für Modelle wie Voxtral sind, die schnelle Streaming-Antworten mit Audio-Unterstützung brauchen.
Außerdem werden wir PyNGrok , um den vLLM-Server über einen öffentlichen Endpunkt freizugeben, sodass er für Anwendungen auf deinem lokalen Rechner zugänglich ist.
Schritt 1: Abhängigkeiten installieren
Fangen wir damit an, die Abhängigkeiten in unserer Colab-Umgebung zu installieren. Führ den folgenden Befehl in der Colab-Zelle aus:
!uv pip install -U transformers accelerate "vllm[audio]"--torch-backend=auto --extra-index-url https://wheels.vllm.ai/nightlyBereitgestellt von
Zuerst installieren wir die benötigten Bibliotheken mit uv, einem schnelleren Python-Paketinstallationsprogramm. Das holt die nächtliche Version von vllm[audio], die experimentelle Unterstützung für Audio-Sprachmodelle wie Voxtral enthält. Wenn du „ uv “ nicht installiert hast, installiere zuerst „ uv “, indem du den folgenden Code ausführst:
Als Nächstes installieren wir das Paket „ mistral-common “, das wichtige Tools für die Interaktion mit Voxtral und anderen Modellen der Mistral-Familie enthält. Dieses Paket enthält Tokenizer, die mit offiziellen Implementierungen abgestimmt sind, sowie eine Pydantic-basierte Validierung für Nachrichtenstrukturen.
!pip install mistral-common --upgrade
!python -c "import mistral_common; print(mistral_common.__version__)"Bereitgestellt von
Das mistral-common-Paket hat Hilfsmodule für Voxtral und andere Modelle aus der Mistral-Familie. Es enthält Tokenizer, typisierte Nachrichten im Pydantic-Format und Audio-Hilfsfunktionen. Dieser Schritt sorgt dafür, dass alles mit der internen Verarbeitung von Audioeingaben und strukturierten Nachrichten bei Voxtral klappt.
Schritt 3: VLLM einrichten
Jetzt haben wir die grundlegenden Mistral-Abhängigkeiten fertig. Als Nächstes richten wir vLLM ein, indem wir es in sein Haupt-Repository klonen.
Schritt 3.1: Klon das vLLM-Repository
Wir klonen das offizielle vLLM-GitHub-Repository, das uns Zugriff auf integrierte Audiobeispiele gibt und als Basis für die Offline- oder gehostete Inferenz dient.
!git clone https://github.com/vllm-project/vllm && cd vllmBereitgestellt von
Schritt 3.2: Probier mal eine Audio-Inferenz aus.
Lass uns kurz checken, ob alles richtig eingerichtet ist.
!python vllm/examples/offline_inference/audio_language.py --num-audios 2--model-type voxtralBereitgestellt von
Ich hab das Offline-Beispiel „ audio_language.py ” ausprobiert, das mit dem Voxtral-Modell die Audio-Sprach-Inferenz an zwei vordefinierten Beispielen durchführt und checkt, ob die Audiodekodierung und -generierung richtig funktionieren.
Schritt 4: PyGrok einrichten
Nachdem vLLM jetzt eingerichtet ist, konfigurieren wir PyNGrok so, dass der vLLM-Server auf Colab über eine öffentlich zugängliche Internetadresse erreichbar ist.
Scroll runter unter dem Tab „Verbinden“, kopier den Authentifizierungs-Tag (im Bild unten versteckt) und speicher ihn als Geheimnis in den Colab-Geheimnissen.
Als Nächstes installieren wir PyNGrok in der Colab-Umgebung und setzen den Authentifizierungstoken mit dem zuvor kopierten NGROK-Token. Wenn du an einem Prototyp arbeitest, kannst du das Token hier direkt weitergeben.
!pip install pyngrok -q
from pyngrok import ngrok
ngrok.set_auth_token("NGROK_TOKEN")Bereitgestellt von
Schritt 5: Das Modell servieren
Das ist der wichtigste Schritt, wo wir das Voxtral Mini 3B-Modell über vLLM starten.
!vllm serve mistralai/Voxtral-Mini-3B-2507--tokenizer_mode mistral --config_format mistral --load_format mistral --max-model-len4864Bereitgestellt von
Der Code-Schnipsel hat ein paar wichtige Flags:
--tokenizer_mode mistral: Hier wird der Mistral-spezifische Tokenizer für eine genaue Tokenisierung verwendet.
--config_format mistral und --load_format mistral: Diese Flags sorgen dafür, dass sowohl die Modellkonfiguration als auch die Gewichte im benutzerdefinierten Format von Mistral geladen werden, sodass die Kompatibilität erhalten bleibt.
--max-model-len 4864: Diese Option legt die maximale Länge des Eingabekontexts auf 4864 Tokens fest.
Hinweis: Lass diese Zelle laufen, weil das ein aktiver Modellserver ist.
Schritt 6: Hol dir den öffentlichen Endpunkt von NGrok
Sobald dein vLLM-Server läuft, gib den folgenden Code Zeile für Zeile in einem Python-Terminal ein:
from pyngrok import ngrok
ngrok.set_auth_token(NGROK_TOKEN)
public_url = ngrok.connect(8000)print("Public endpoint:", public_url)Bereitgestellt von
Der obige Code macht das Modell über eine temporäre öffentliche URL wie die folgende im Internet verfügbar:
Speicher diese URL, die im lokalen „ config.py ” gebraucht wird, um eine Verbindung zum Remote-Modell herzustellen. Wenn der Lauf fertig ist, beende die Verbindung mit:
Erstellen einer Demo für die Transkription und Zusammenfassung von Audioaufnahmen
In diesem Abschnitt erstellen wir eine Streamlit-Benutzeroberfläche, die Folgendes kann:
Nimmt Audio als Input (vom Nutzer hochgeladen)
Schickt es über den vLLM-Server an das Modell.
Zeigt die Transkription und Zusammenfassung an und lässt den Benutzer Fragen stellen.
Schritt 1: Abhängigkeiten einrichten
Bevor wir die App erstellen, legen wir alle benötigten Abhängigkeiten in einer Datei namens „ requirements.txt “ fest. Das sorgt für einheitliche Umgebungen bei lokalen Läufen oder Colab-Notebooks.
streamlit>=1.28.0
openai>=1.0.0
mistral-common>=0.0.12
huggingface-hub>=0.19.0
pyngrok>=6.0.0
requests>=2.28.0
pydub>=0.25.1 Bereitgestellt von
Hier ist, warum wir jedes davon brauchen:
streamlit: Diese Bibliothek hilft beim Erstellen der interaktiven Audio-Schnittstelle.
openai: Es verbindet sich über das SDK von OpenAI mit dem Voxtral-kompatiblen vLLM-Server.
mistral-common: Es bietet Voxtral-spezifische Dienstprogramme wie „ AudioChunk “ und „ TextChunk “.
pyngrok: Dadurch wird unser lokaler vLLM-Server mit dem Internet verbunden, sodass die Streamlit-App drauf zugreifen kann.
Pydub: Diese Bibliothek hilft bei der Konvertierung von Audiodateien für die Inferenz.
huggingface-hub und Anfragen: Die werden zum Abrufen von Modellen und Konfigurationen benutzt (wenn nötig).
Schritt 2: Umgebungsvariable einrichten
Damit die Konfiguration übersichtlich und portabel bleibt, speichern wir API-Details als Umgebungsvariablen. Du kannst sie in einer Datei namens „ .env ” festlegen:
VOXTRAL_API_KEY=dummy-key
VOXTRAL_API_BASE=NGROK_TOKEN/v1
VOXTRAL_MODEL_NAME=mistralai/Voxtral-Mini-3B-2507Bereitgestellt von
VOXTRAL_API_BASE sollte auf deine laufende vLLM-Instanz zeigen, die localhost (http://localhost:8000) oder ein öffentlicher ngrok-Endpunkt sein kann, der so aussieht: https://80xxxxxxxxxx.ngrok-free.app.
Hinweis: Vergewissere dich, dass du „ /v1 “ am Ende der API-Basis hinzufügst, damit es mit OpenAI funktioniert.
Schritt 3: Die Konfigurationsdatei einrichten
Damit deine App modular, einfach anpassbar und produktionsbereit ist, legen wir eine zentrale Konfigurationsklasse in „ config.py “ fest. Diese Datei regelt die Modelleinstellungen, den API-Zugriff, die unterstützten Audioformate, Sprachen und UI-Einstellungen.
Schritt 3.1: Umgebungsvariablen laden
Bevor wir die Konfigurationsklasse definieren, laden wir alle Umgebungsvariablen, die in einer Datei namens „ .env “ gespeichert sind. So bleiben sensible Infos vom Code getrennt.
import os
from typing import Optional
from pathlib import Path
# Load environment variables from .env file
env_file = Path(".env")if env_file.exists():withopen(env_file,'r')as f:for line in f:if line.strip()andnot line.startswith('#'):
key, value = line.strip().split('=',1)
os.environ[key]= valueBereitgestellt von
Dieser Ausschnitt checkt, ob eine Datei namens „ .env ” im Stammverzeichnis vorhanden ist. Wenn es gefunden wird, liest es Schlüssel-Wert-Paare und legt sie als Umgebungsvariablen fest. Auf diese Werte kann jetzt über „ os.getenv() “ zugegriffen werden, sodass Geheimnisse nicht fest in die App eingebaut werden.
Schritt 3.2: Definiere die Klasse „Config“
Jetzt packen wir alle Einstellungen in eine übersichtliche Klasse „ Config “, damit man sie leicht finden und wiederverwenden kann.
Zusammen fungiert diese Klasse „ Config ” als zentrale Steuerungszentrale für deine Voxtral-basierte App. Egal, ob du Modellparameter konfigurierst, Audioformate verwaltest oder das App-Design anpasst – diese Einrichtung sorgt für eine klare Abstraktion, Wiederverwendbarkeit des Codes und einfache Wartung.
Der Kurs beinhaltet:
get_api_config() Methode: Diese Methode sammelt alle API-Zugangsdaten an einem Ort. Egal, wo deine App das Voxtral-Modell aufruft, kannst du einfach Config.get_api_config() ausführen, um alles Nötige auf einmal abzurufen.
validate_config() Methode: Bevor du mit der Inferenz startest, kannst du mit dieser Methode checken, ob wichtige Konfigurationswerte (wie die Basis-URL) richtig eingestellt sind. Wenn nicht, kannst du das Problem frühzeitig erkennen und den Benutzer darauf aufmerksam machen.
get_language_code() Methode: Mit dieser Methode kannst du ganz einfach mehrsprachige Fragen und Antworten machen, indem du benutzerfreundliche Sprachnamen aus der Benutzeroberfläche (z. B. „Französisch“) mit standardisierten ISO-Sprachcodes (z. B. „fr“) verknüpfst. Wenn eine nicht unterstützte Sprache übergeben wird, wird sicher None zurückgegeben.
Schritt 4: Erstell die Streamlit-App
Schauen wir uns mal die einzelnen Schritte an, die die App-Oberfläche und die Logik aufbauen.
Schritt 4.1: Layout und Design festlegen
In diesem Schritt starten wir das Streamlit-Frontend, laden Abhängigkeiten und richten den CSS-Stil ein. Das ist die optische und funktionale Basis der App.
Wir importieren wichtige Bibliotheken für die Benutzeroberfläche, die Dateiverwaltung und die Formatierung von Audio- und Textnachrichten mithilfe des Pakets „ mistral_common “ von Voxtral.
Dann machen wir das Layout der Streamlit-App fertig. Das ist eine Oberfläche mit zwei Fenstern und einer Seitenleiste, die standardmäßig aufgeklappt ist.
Zum Schluss fügen wir benutzerdefiniertes CSS ein, um verschiedene Teile der Benutzeroberfläche wie Kopfzeilen, Audioabschnitte, Chat-Blasen und Zusammenfassungsfelder optisch voneinander zu trennen. Das macht die App übersichtlicher, mit coolen Titeln, Infos und verschiedenen Chat-Blasen für Antworten vom Nutzer und vom Assistenten.
Schritt 4.2: Sitzung und Client starten
Als Nächstes stellen wir sicher, dass die App bei jedem Neustart gleich läuft, indem wir Sitzungsvariablen und den Client initialisieren.
definit_session_state():
defaults ={'transcription':"",'summary':"",'chat_history':[],'audio_file_path':None}for key, default_value in defaults.items():if key notin st.session_state:
st.session_state[key]= default_value
definitialize_client():
config = Config.get_api_config()
client = OpenAI(
api_key=config["api_key"],
base_url=config["base_url"],)# Test connectiontry:
models = client.models.list()return client
except Exception as e:
st.error(f"Failed to connect to Voxtral API: {str(e)}")
st.info("Make sure your ngrok tunnel is running in Google Colab")returnNoneBereitgestellt von
Dieser Code-Schnipsel richtet den internen Status der App ein und kümmert sich um die Verbindung zum Voxtral-API-Server. Es umfasst zwei wichtige Teile:
Sitzung starten: Es sorgt dafür, dass Nutzerdaten wie Transkriptionen, Zusammenfassungen und hochgeladene Audiodateien bei App-Interaktionen und beim Neuladen korrekt vorhanden sind.
Client-Initialisierung: Es verbindet sich über den OpenAI-kompatiblen Endpunkt, der über vLLM (über Ngrok bereitgestellt) verfügbar ist, mit dem lokal gehosteten Voxtral Mini 3B-Modell. Wenn die Verbindung nicht klappt, kommt eine Fehlermeldung in der Benutzeroberfläche.
Schritt 4.3: Audio-Chunking und Echtzeit-Transkription
Dieser Schritt kümmert sich um die Hauptlogik beim Vorbereiten der Audiodatei und beim Erstellen einer Transkription mit Voxtral Mini 3B.
deffile_to_chunk(file_path:str)-> AudioChunk:
audio = Audio.from_file(file_path, strict=False)return AudioChunk.from_audio(audio)deftranscribe_audio(client, audio_file_path):try:withopen(audio_file_path,"rb")as f:
response = client.audio.transcriptions.create(file=f,
model=Config.MODEL_NAME,
response_format="text",
stream=True)
transcription =""
progress_bar = st.progress(0)
status_text = st.empty()# Collect all chunks first to get total count
chunks =list(response)
total_chunks =len(chunks)for i, chunk inenumerate(chunks):
delta = chunk.choices[0].get("delta",{}).get("content")if delta:
transcription += delta
progress =min((i +1)/max(total_chunks,1),1.0)
progress_bar.progress(progress)
status_text.text(f"Transcribing... {len(transcription)} characters")
progress_bar.empty()
status_text.empty()return transcription
except Exception as e:
st.error(f"Error during transcription: {str(e)}")returnNoneBereitgestellt von
Hier gibt's zwei wichtige Funktionen:
Konvertierung von Audio-Blöcken: Zuerst wandeln wir die hochgeladene Audiodatei ins „ AudioChunk ”-Format um, das die Eingabevoraussetzung für die API von Voxtral ist.
Streaming-Transkription mit Fortschrittsanzeige: Wir schicken den Ton als Stream an das Modell (stream=True) und decodieren ihn Stück für Stück. Ein Fortschrittsbalken wird dynamisch aktualisiert, sobald Tokens empfangen werden, und gibt den Benutzern Echtzeit-Feedback zum Fortschritt der Transkription.
Schritt 4.4: Zusammenfassung aus Audio erstellen
Dieser Schritt sendet die Audioeingabe zusammen mit einer Textanweisung an das Voxtral-Modell, das eine kurze, strukturierte Zusammenfassung des Audioinhalts zurückgibt.
defgenerate_summary(client, audio_file_path):try:
audio_chunk = file_to_chunk(audio_file_path)
text_chunk = TextChunk(text="Please provide a comprehensive summary of this audio content, highlighting the key points and main themes discussed.")
user_msg = UserMessage(content=[audio_chunk, text_chunk]).to_openai()
response = client.chat.completions.create(
model=Config.MODEL_NAME,
messages=[user_msg],
temperature=Config.DEFAULT_TEMPERATURE,
top_p=Config.DEFAULT_TOP_P,)return response.choices[0].message.content
except Exception as e:
st.error(f"Error generating summary: {str(e)}")returnNoneBereitgestellt von
Der obige Code nutzt ein paar wichtige Methoden und Funktionen, um aus dem hochgeladenen Audio eine Zusammenfassung zu erstellen:
audio_chunk: Zuerst wandeln wir die hochgeladene Audiodatei in ein „ AudioChunk ” für die Audioverarbeitung von Voxtral um.
text_chunk: Dann wird das Modell über einen Textbefehl aufgefordert, den Inhalt klar und verständlich zusammenzufassen.
UserMessage: Das hier kombiniert die „ audio_chunk ” und „ text_chunk ” zu einer einzigen multimodalen Nachricht in einem OpenAI-kompatiblen Format.
Response.choices[0].message.content: Dieses Objekt holt den eigentlichen Zusammenfassungstext aus der Antwort des Modells raus.
Schritt 4.5: Mehrsprachige Fragen und Antworten über Audio
Jetzt haben wir die Zusammenfassung. Lass uns den Nutzern ermöglichen, Fragen in natürlicher Sprache zu den hochgeladenen Audioinhalten zu stellen. Hier kommen die multimodalen Funktionen von Voxtral zum Einsatz, indem Audio mit Textanweisungen kombiniert werden, um kontextbezogene Antworten zu generieren.
Die folgende Funktion unterstützt auch mehrsprachige Antworten, indem sie die Eingabeaufforderung je nach gewählter Sprache dynamisch anpasst.
defask_question(client, audio_file_path, question, language="English"):try:
audio_chunk = file_to_chunk(audio_file_path)if language !="English":
question =f"Please answer the following question in {language}: {question}"
text_chunk = TextChunk(text=question)
user_msg = UserMessage(content=[audio_chunk, text_chunk]).to_openai()
response = client.chat.completions.create(
model=Config.MODEL_NAME,
messages=[user_msg],
temperature=Config.DEFAULT_TEMPERATURE,
top_p=Config.DEFAULT_TOP_P,)return response.choices[0].message.content
except Exception as e:
st.error(f"Error asking question: {str(e)}")returnNoneBereitgestellt von
Hier ist eine kurze Zusammenfassung dessen, was hier passiert:
Mit der Funktion „ ask_question() “ können Nutzer Fragen zu den hochgeladenen Audiodateien stellen.
Zuerst wird die hochgeladene Datei mit der wiederverwendbaren Funktion „ file_to_chunk() ” in ein „ AudioChunk ” umgewandelt, das die Audiodaten im Format vorbereitet, das die multimodale API von Voxtral braucht.
Dann wird die gewählte Sprache überprüft. Wenn die Frage nicht auf Englisch ist, kommt vor der Frage eine Anweisung, dass das Modell in der gewünschten Sprache antworten soll (z. B. Hindi oder Spanisch).
Die Frage des Nutzers wird in ein „ TextChunk “ gepackt, und sowohl der Ton als auch der Text werden in ein multimodales „ UserMessage “ gepackt.
Wir schicken diese Nachricht zusammen mit den Temperatur- und Top-P-Werten aus der Konfiguration an das Modell, um die Generierungsqualität zu kontrollieren.
Das Modell gibt dann eine Einfachumdrehungsantwort zurück.
Schritt 4.6: Die Seitenleiste einrichten
Die Seitenleiste ist wie ein Bedienfeld, wo du die Sitzungseinstellungen verwalten, die Sprache auswählen, die Verbindung zur Voxtral-API testen und das Antwortverhalten des Modells mit intuitiven Schiebereglern anpassen kannst.
defrender_sidebar():with st.sidebar:
st.markdown('<h3 class="section-header">Configuration</h3>', unsafe_allow_html=True)# Connection status
st.markdown('<h4>Connection Status</h4>', unsafe_allow_html=True)if st.button("Test Connection"):
client = initialize_client()if client:
st.success("Connected to Voxtral API")else:
st.error("Connection failed")# Language selection
selected_language = st.selectbox("Select language for Q&A:", Config.SUPPORTED_LANGUAGES)# Model configuration
st.markdown('<h4>Model Settings</h4>', unsafe_allow_html=True)
temperature = st.slider("Temperature",0.0,1.0, Config.DEFAULT_TEMPERATURE,0.1)
top_p = st.slider("Top P",0.0,1.0, Config.DEFAULT_TOP_P,0.05)if st.button("Clear Session"):for key in['transcription','summary','chat_history','audio_file_path']:
st.session_state[key]=""if key in['transcription','summary']else[]if key =='chat_history'elseNone
st.rerun()return selected_language, temperature, top_pBereitgestellt von
Hier ist eine Erklärung des Codes oben:
Sidebar: Das Objekt „ st.sidebar ” öffnet eine ausklappbare Seitenleiste, in der wir die Konfigurationstools für die App speichern.
Verbindungstest: Ein Button „Verbindung testen“ startet die Funktion „ initialize_client() “, die versucht, eine Verbindung zur Voxtral-API herzustellen, und den Erfolg oder Misserfolg über Streamlit-Warnmeldungen meldet.
Sprachauswahl: Über ein Dropdown-Menü können Benutzer eine der 12 unterstützten Sprachen auswählen. Diese Auswahl sagt dem Modell später, dass es in dieser Sprache antworten soll.
Modellparameter: Mit einem Schieberegler kann der Benutzer Modellparameter wie die folgenden steuern:
temperature: Das hält die Kreativität im Zaum. Die niedrigeren Werte machen die Antworten deterministischer, während die höheren Werte sie vielfältiger machen.
top_p: Dieser Parameter steuert die Kernsampling, was dabei hilft, die Generierung auf die wahrscheinlichsten Tokens zu beschränken.
Sitzung zurückgesetzt: Mit dem Button „Sitzung löschen“ werden alle Sitzungsvariablen zurückgesetzt und die App neu gestartet, damit du wieder von vorne anfangen kannst.
Schritt 4.7: Audio-Upload und Bearbeitung
Hier kannst du Audiodateien (z. B. .mp3, .wav usw.) hochladen, die vorübergehend gespeichert werden. Nach dem Hochladen können die Nutzer wählen, ob sie die Audioaufnahme transkribieren oder eine Zusammenfassung erstellen möchten.
Wir brauchen eine modulare Struktur, damit Audio-Dateien einfach hochgeladen, verarbeitet und die Ergebnisse über verschiedene Benutzerinteraktionen hinweg gespeichert werden können. So hab ich's gemacht:
Datei-Uploader: Zuerst brauchen wir einen Drag-and-Drop-Datei-Uploader, der mehrere Audioformate akzeptiert, die unter Config.SUPPORTED_AUDIO_FORMATS definiert sind. Sobald eine Datei hochgeladen ist, wird sie in eine temporäre Datei geschrieben und unter st.session_state.audio_file_path gespeichert.
Client-Initialisierung: Ein Voxtral-kompatibler Client wird gestartet, damit Anrufe zusammengefasst und transkribiert werden können.
Zusammenfassung und Transkription-Buttons: Als Nächstes definieren wir zwei Schaltflächen:
Zusammenfassung erstellen: Wenn du draufklickst, wird die hochgeladene Audiodatei mit einer Zusammenfassung an das Modell geschickt. Ein Fortschrittsanzeiger wird angezeigt, und wenn alles gut geht, wird die Ausgabe unter „ st.session_state.summary “ gespeichert.
Audio transkribieren: Mit diesem Knopf schickst du die Audiodatei an den Transkriptions-Endpunkt. Der Fortschritt wird in Echtzeit mit einem Spinner angezeigt und das Ergebnis wird in „ st.session_state.transcription “ gespeichert.
Zum Schluss werden beide Ergebnisse in einem Textbereich angezeigt.
Schritt 4.8: Interaktive mehrsprachige Fragen und Antworten
Mit diesem Schritt können Nutzer Fragen zu den hochgeladenen Audiodateien in mehreren Sprachen stellen (z. B. Englisch, Hindi, Spanisch). Die gewählte Sprache wird benutzt, um die Antwort des Modells zu formatieren, und jedes Frage-Antwort-Paar wird in einem sitzungsgesteuerten Gesprächsverlauf gespeichert und in Chat-Blasen angezeigt.
defrender_qa_section(selected_language):
st.markdown('<h3 class="section-header">Multilingual Q&A</h3>', unsafe_allow_html=True)if st.session_state.audio_file_path:
st.markdown(f'<div class="info-box">Selected language: <strong>{selected_language}</strong></div>', unsafe_allow_html=True)
question = st.text_input(f"Ask a question about the audio (in {selected_language}):",
placeholder="e.g., What is the main topic discussed?")if st.button("Ask Question",type="primary")and question:
client = initialize_client()with st.spinner("Processing your question..."):
answer = ask_question(client, st.session_state.audio_file_path, question, selected_language)if answer:# Chat history
st.session_state.chat_history.append({"question": question,"answer": answer,"language": selected_language,"timestamp": time.strftime("%H:%M:%S")})
st.success("Question answered!")else:
st.error("Failed to get answer. Please try again.")if st.session_state.chat_history:
st.markdown('<h4>Conversation History</h4>', unsafe_allow_html=True)for chat inreversed(st.session_state.chat_history):
st.markdown(f'<div class="chat-message user-message"><strong>Question:</strong> {chat["question"]}</div>', unsafe_allow_html=True)
st.markdown(f'<div class="chat-message assistant-message"><strong>Answer:</strong> {chat["answer"]}</div>', unsafe_allow_html=True)
st.markdown("---")else:
st.markdown('<div class="info-box">Please upload an audio file to start asking questions.</div>', unsafe_allow_html=True)Bereitgestellt von
Hier ist eine Erklärung, was im obigen Code-Schnipsel passiert:
Ask Question Taste „ “: In einem Textfeld kannst du eine Frage in der gewählten Sprache eingeben und dann auf„“ klicken. Frage stellen Button. Einmal draufgeklickt:
Startet den Voxtral-kompatiblen Client.
Schickt die Frage zusammen mit der hochgeladenen Audiodatei an das Modell.
Zeigt einen Spinner an, während auf die Antwort des Modells gewartet wird.
Antwort: Wenn eine Antwort kommt, ist sie:
Gespeichert in „ st.session_state.chat_history ” mit einem Zeitstempel.
Mit rollenspezifischer Formatierung unter Verwendung des zuvor definierten benutzerdefinierten CSS gerendert (Benutzer vs. Assistent-Sprechblase).
Wenn das Modell nicht funktioniert, kommt eine klare Fehlermeldung.
Konversationsverlauf: Wenn es schon mal Fragen und Antworten gab, werden sie in umgekehrter Reihenfolge mit einem Trennzeichen angezeigt.
Schritt 4.9: Die App starten
In diesem letzten Schritt werden alle vorher definierten Teile zusammengefügt, wie das Initialisieren des Sitzungsstatus, das Rendern der Seitenleiste, das Verarbeiten von Audio-Uploads, die Transkription, Zusammenfassungen und Q&A in einem zweispaltigen Layout.
Sobald der Server läuft und alle Abhängigkeiten installiert sind, stellt dieser Schritt sicher, dass die App über Streamlit an den Browser gesendet wird und für die Interaktion bereit ist.
defmain():
st.markdown('<h1 class="main-header">🎵 Voxtral Audio Assistant</h1>', unsafe_allow_html=True)# Initialize session state
init_session_state()# Render sidebar and get configuration
selected_language, temperature, top_p = render_sidebar()
col1, col2 = st.columns([1,1])with col1:
render_audio_processing()with col2:
render_qa_section(selected_language)
st.markdown("---")
st.markdown("""
<div style="text-align: center;">
<p>Powered by <strong>Voxtral Mini 3B</strong> | Built with Streamlit</p>
<p>Supports multiple languages for audio analysis and Q&A</p>
</div>
""", unsafe_allow_html=True)if __name__ =="__main__":
main()Bereitgestellt von
Die Funktion „ main() ” ist der Einstiegspunkt für die App. Es kümmert sich um das Layout, koordiniert das Rendering und stellt sicher, dass alle Sitzungsvariablen und UI-Komponenten richtig initialisiert werden. Hier ist eine kurze Zusammenfassung der oben beschriebenen Funktionen:
init_session_state(): Diese Funktion bereitet Standardwerte wie „ transcription “, „ summary “ und „ chat_history “ vor, um den App-Status über Interaktionen hinweg beizubehalten.
render_sidebar(): Es lädt Konfigurations-Widgets wie die Sprachauswahl, den Verbindungstest und die Modellparameter.
render_audio_processing(): Mit dieser Funktion können Nutzer Audiodateien hochladen und bearbeiten, um sie zu transkribieren und zusammenzufassen.
render_qa_section(): Endlich kannst du jetzt auch mehrsprachige Fragen zu hochgeladenen Audiodateien beantworten.
Stell sicher, dass sie über die URL erreichbar ist, die du in „ VOXTRAL_API_BASE “ in deiner Datei „ config.py “ angegeben hast. Sobald alle Abhängigkeiten installiert sind, starte die Streamlit-Anwendung, indem du den folgenden Befehl im Terminal ausführst:
Dein Browser öffnet die Oberfläche automatisch. Die App ist jetzt voll funktionsfähig mit Audio-Upload, Echtzeit-Transkription, Zusammenfassungen und mehrsprachigen Fragen und Antworten, unterstützt von Voxtral Mini 3B.
Den gesamten Code, den wir hier behandelt haben, findest du in diesem GitHub-Repository finden, das ich eingerichtet habe.
Fazit
Voxtral Mini 3B ist ein effizientes, offenes Modell für die Transkription und das Verstehen von Sprache. In diesem Tutorial haben wir es mit vLLM ausgeführt, eine API eingerichtet und mit Streamlit eine App zum Zusammenfassen von Audioinhalten erstellt.
Egal, ob du einen Podcast-Zusammenfasser, einen Meeting-Assistenten oder eine Sprachsteuerungs-App entwickelst – Voxtral Mini ist die perfekte Basis für schnelles und lokales Audio-Reasoning.
Ich bin Google Developers Expertin für ML (Gen AI), dreifache Kaggle-Expertin und Women-Techmakers-Botschafterin mit über drei Jahren Erfahrung in der Tech-Branche. 2020 habe ich ein Health-Tech-Startup mitgegründet und absolviere derzeit einen Master in Informatik an der Georgia Tech mit Schwerpunkt Machine Learning.
Lerne die wichtigsten Arten von KI-Agenten kennen, wie sie mit ihrer Umgebung interagieren und wie sie in verschiedenen Branchen eingesetzt werden. Verstehe einfache reflexive, modellbasierte, zielbasierte, nutzenbasierte, lernende Agenten und mehr.
Erforsche Pythons match-case: eine Anleitung zu seiner Syntax, Anwendungen in Data Science und ML sowie eine vergleichende Analyse mit dem traditionellen switch-case.
Lerne, wie man mit JSON in Python arbeitet, einschließlich Serialisierung, Deserialisierung, Formatierung, Leistungsoptimierung, Umgang mit APIs und Verständnis der Einschränkungen und Alternativen von JSON.
Lerne mehr über Python-Lambda-Funktionen, wozu sie gut sind und wann man sie benutzt. Enthält praktische Beispiele und bewährte Methoden für eine effektive Umsetzung.
Lerne, wie du Python-Listen mit Techniken wie Slicing, List Comprehensions und itertools aufteilen kannst. Finde heraus, wann du welche Methode für die beste Datenverarbeitung nutzen solltest.
Mistral hat kürzlich seine ersten Open-Source-Multimodal-Audiomodelle Voxtral Small und Voxtral Mini vorgestellt, die auf der Mistral 3B-Architektur basieren und speziell für Audioverstehens- und Transkriptionsaufgaben optimiert sind.
In diesem Blog geht's vor allem um den Voxtral Mini 3B, ein kompaktes Open-Source-Modell, das für Echtzeit-Audio-zu-Text-Aufgaben wie Transkription, Zusammenfassung und Q&A entwickelt wurde. Dank seiner effizienten Größe und der Unterstützung für kontextbezogene Schlussfolgerungen ist Voxtral Mini besonders leistungsstark, wenn es mit Inferenz-Frameworks mit hohem Durchsatz wie vLLM kombiniert wird. Damit eignet es sich ideal für die Entwicklung schneller Offline-Audioanwendungen.
In diesem Tutorial zeige ich dir, wie du:
Wir halten unsere Leser über die neuesten Entwicklungen im Bereich KI auf dem Laufenden, indem wir ihnen jeden Freitag unseren kostenlosen Newsletter„The Median “ schicken , der die wichtigsten Meldungen der Woche zusammenfasst. Abonniere unseren Newsletter und bleib in nur wenigen Minuten pro Woche auf dem Laufenden:
Was ist Voxtral von Mistral?
Voxtral ist Mistrals komplett offene Audio-Modellfamilie, die für super Sprachverständnis entwickelt wurde. Voxtral gibt's in zwei Modellgrößen:
Quelle: Mistral
Voxtral nimmt rohe Audio-Dateien (wie .wav oder .mp3) und kann Transkriptionen und Zusammenfassungen von gesprochenen Inhalten effizient erstellen. Voxtral ist eine kleinere Version, die für schnelle Schlussfolgerungen und den Offline-Einsatz optimiert ist.
Es folgt dem Modellformat von Mistral und ist mit Hochdurchsatz-Inferenz-Frameworks wie vLLM, was es super für Echtzeit-Transkriptionen oder einfache Sprachanwendungen macht.
So startest du Voxtral Mini 3B mit vLLM
In diesem Abschnitt zeige ich dir, wie du Voxtral Mini 3B mit vLLM auf einem Colab Pro mit aktivierter T4-GPU nutzen kannst. vLLM wurde wegen seiner hohen Durchsatzrate und niedrigen Latenz ausgewählt, die ideal für Modelle wie Voxtral sind, die schnelle Streaming-Antworten mit Audio-Unterstützung brauchen.
Außerdem werden wir PyNGrok , um den vLLM-Server über einen öffentlichen Endpunkt freizugeben, sodass er für Anwendungen auf deinem lokalen Rechner zugänglich ist.
Schritt 1: Abhängigkeiten installieren
Fangen wir damit an, die Abhängigkeiten in unserer Colab-Umgebung zu installieren. Führ den folgenden Befehl in der Colab-Zelle aus:
Zuerst installieren wir die benötigten Bibliotheken mit uv, einem schnelleren Python-Paketinstallationsprogramm. Das holt die nächtliche Version von
vllm[audio], die experimentelle Unterstützung für Audio-Sprachmodelle wie Voxtral enthält. Wenn du „uv“ nicht installiert hast, installiere zuerst „uv“, indem du den folgenden Code ausführst:Schritt 2: Mistral-Common installieren
Als Nächstes installieren wir das Paket „
mistral-common“, das wichtige Tools für die Interaktion mit Voxtral und anderen Modellen der Mistral-Familie enthält. Dieses Paket enthält Tokenizer, die mit offiziellen Implementierungen abgestimmt sind, sowie eine Pydantic-basierte Validierung für Nachrichtenstrukturen.Das mistral-common-Paket hat Hilfsmodule für Voxtral und andere Modelle aus der Mistral-Familie. Es enthält Tokenizer, typisierte Nachrichten im Pydantic-Format und Audio-Hilfsfunktionen. Dieser Schritt sorgt dafür, dass alles mit der internen Verarbeitung von Audioeingaben und strukturierten Nachrichten bei Voxtral klappt.
Schritt 3: VLLM einrichten
Jetzt haben wir die grundlegenden Mistral-Abhängigkeiten fertig. Als Nächstes richten wir vLLM ein, indem wir es in sein Haupt-Repository klonen.
Schritt 3.1: Klon das vLLM-Repository
Wir klonen das offizielle vLLM-GitHub-Repository, das uns Zugriff auf integrierte Audiobeispiele gibt und als Basis für die Offline- oder gehostete Inferenz dient.
Schritt 3.2: Probier mal eine Audio-Inferenz aus.
Lass uns kurz checken, ob alles richtig eingerichtet ist.
Ich hab das Offline-Beispiel „
audio_language.py” ausprobiert, das mit dem Voxtral-Modell die Audio-Sprach-Inferenz an zwei vordefinierten Beispielen durchführt und checkt, ob die Audiodekodierung und -generierung richtig funktionieren.Schritt 4: PyGrok einrichten
Nachdem vLLM jetzt eingerichtet ist, konfigurieren wir PyNGrok so, dass der vLLM-Server auf Colab über eine öffentlich zugängliche Internetadresse erreichbar ist.
Als Nächstes installieren wir PyNGrok in der Colab-Umgebung und setzen den Authentifizierungstoken mit dem zuvor kopierten NGROK-Token. Wenn du an einem Prototyp arbeitest, kannst du das Token hier direkt weitergeben.
Schritt 5: Das Modell servieren
Das ist der wichtigste Schritt, wo wir das Voxtral Mini 3B-Modell über vLLM starten.
Der Code-Schnipsel hat ein paar wichtige Flags:
--tokenizer_mode mistral: Hier wird der Mistral-spezifische Tokenizer für eine genaue Tokenisierung verwendet.--config_format mistralund--load_format mistral: Diese Flags sorgen dafür, dass sowohl die Modellkonfiguration als auch die Gewichte im benutzerdefinierten Format von Mistral geladen werden, sodass die Kompatibilität erhalten bleibt.--max-model-len 4864: Diese Option legt die maximale Länge des Eingabekontexts auf 4864 Tokens fest.Hinweis: Lass diese Zelle laufen, weil das ein aktiver Modellserver ist.
Schritt 6: Hol dir den öffentlichen Endpunkt von NGrok
Sobald dein vLLM-Server läuft, gib den folgenden Code Zeile für Zeile in einem Python-Terminal ein:
Der obige Code macht das Modell über eine temporäre öffentliche URL wie die folgende im Internet verfügbar:
Speicher diese URL, die im lokalen „
config.py” gebraucht wird, um eine Verbindung zum Remote-Modell herzustellen. Wenn der Lauf fertig ist, beende die Verbindung mit:Erstellen einer Demo für die Transkription und Zusammenfassung von Audioaufnahmen
In diesem Abschnitt erstellen wir eine Streamlit-Benutzeroberfläche, die Folgendes kann:
Schritt 1: Abhängigkeiten einrichten
Bevor wir die App erstellen, legen wir alle benötigten Abhängigkeiten in einer Datei namens „
requirements.txt“ fest. Das sorgt für einheitliche Umgebungen bei lokalen Läufen oder Colab-Notebooks.Hier ist, warum wir jedes davon brauchen:
AudioChunk“ und „TextChunk“.Schritt 2: Umgebungsvariable einrichten
Damit die Konfiguration übersichtlich und portabel bleibt, speichern wir API-Details als Umgebungsvariablen. Du kannst sie in einer Datei namens „
.env” festlegen:VOXTRAL_API_BASEsollte auf deine laufende vLLM-Instanz zeigen, die localhost (http://localhost:8000) oder ein öffentlicher ngrok-Endpunkt sein kann, der so aussieht: https://80xxxxxxxxxx.ngrok-free.app.Hinweis: Vergewissere dich, dass du „
/v1“ am Ende der API-Basis hinzufügst, damit es mit OpenAI funktioniert.Schritt 3: Die Konfigurationsdatei einrichten
Damit deine App modular, einfach anpassbar und produktionsbereit ist, legen wir eine zentrale Konfigurationsklasse in „
config.py“ fest. Diese Datei regelt die Modelleinstellungen, den API-Zugriff, die unterstützten Audioformate, Sprachen und UI-Einstellungen.Schritt 3.1: Umgebungsvariablen laden
Bevor wir die Konfigurationsklasse definieren, laden wir alle Umgebungsvariablen, die in einer Datei namens „
.env“ gespeichert sind. So bleiben sensible Infos vom Code getrennt.Dieser Ausschnitt checkt, ob eine Datei namens „
.env” im Stammverzeichnis vorhanden ist. Wenn es gefunden wird, liest es Schlüssel-Wert-Paare und legt sie als Umgebungsvariablen fest. Auf diese Werte kann jetzt über „os.getenv()“ zugegriffen werden, sodass Geheimnisse nicht fest in die App eingebaut werden.Schritt 3.2: Definiere die Klasse „Config“
Jetzt packen wir alle Einstellungen in eine übersichtliche Klasse „
Config“, damit man sie leicht finden und wiederverwenden kann.Zusammen fungiert diese Klasse „
Config” als zentrale Steuerungszentrale für deine Voxtral-basierte App. Egal, ob du Modellparameter konfigurierst, Audioformate verwaltest oder das App-Design anpasst – diese Einrichtung sorgt für eine klare Abstraktion, Wiederverwendbarkeit des Codes und einfache Wartung.Der Kurs beinhaltet:
get_api_config()Methode: Diese Methode sammelt alle API-Zugangsdaten an einem Ort. Egal, wo deine App das Voxtral-Modell aufruft, kannst du einfach Config.get_api_config() ausführen, um alles Nötige auf einmal abzurufen.validate_config()Methode: Bevor du mit der Inferenz startest, kannst du mit dieser Methode checken, ob wichtige Konfigurationswerte (wie die Basis-URL) richtig eingestellt sind. Wenn nicht, kannst du das Problem frühzeitig erkennen und den Benutzer darauf aufmerksam machen.get_language_code()Methode: Mit dieser Methode kannst du ganz einfach mehrsprachige Fragen und Antworten machen, indem du benutzerfreundliche Sprachnamen aus der Benutzeroberfläche (z. B. „Französisch“) mit standardisierten ISO-Sprachcodes (z. B. „fr“) verknüpfst. Wenn eine nicht unterstützte Sprache übergeben wird, wird sicher None zurückgegeben.Schritt 4: Erstell die Streamlit-App
Schauen wir uns mal die einzelnen Schritte an, die die App-Oberfläche und die Logik aufbauen.
Schritt 4.1: Layout und Design festlegen
In diesem Schritt starten wir das Streamlit-Frontend, laden Abhängigkeiten und richten den CSS-Stil ein. Das ist die optische und funktionale Basis der App.
Im obigen Python- und CSS-Code:
mistral_common“ von Voxtral.Schritt 4.2: Sitzung und Client starten
Als Nächstes stellen wir sicher, dass die App bei jedem Neustart gleich läuft, indem wir Sitzungsvariablen und den Client initialisieren.
Dieser Code-Schnipsel richtet den internen Status der App ein und kümmert sich um die Verbindung zum Voxtral-API-Server. Es umfasst zwei wichtige Teile:
Schritt 4.3: Audio-Chunking und Echtzeit-Transkription
Dieser Schritt kümmert sich um die Hauptlogik beim Vorbereiten der Audiodatei und beim Erstellen einer Transkription mit Voxtral Mini 3B.
Hier gibt's zwei wichtige Funktionen:
AudioChunk”-Format um, das die Eingabevoraussetzung für die API von Voxtral ist.stream=True) und decodieren ihn Stück für Stück. Ein Fortschrittsbalken wird dynamisch aktualisiert, sobald Tokens empfangen werden, und gibt den Benutzern Echtzeit-Feedback zum Fortschritt der Transkription.Schritt 4.4: Zusammenfassung aus Audio erstellen
Dieser Schritt sendet die Audioeingabe zusammen mit einer Textanweisung an das Voxtral-Modell, das eine kurze, strukturierte Zusammenfassung des Audioinhalts zurückgibt.
Der obige Code nutzt ein paar wichtige Methoden und Funktionen, um aus dem hochgeladenen Audio eine Zusammenfassung zu erstellen:
audio_chunk: Zuerst wandeln wir die hochgeladene Audiodatei in ein „AudioChunk” für die Audioverarbeitung von Voxtral um.text_chunk: Dann wird das Modell über einen Textbefehl aufgefordert, den Inhalt klar und verständlich zusammenzufassen.UserMessage: Das hier kombiniert die „audio_chunk” und „text_chunk” zu einer einzigen multimodalen Nachricht in einem OpenAI-kompatiblen Format.Response.choices[0].message.content: Dieses Objekt holt den eigentlichen Zusammenfassungstext aus der Antwort des Modells raus.Schritt 4.5: Mehrsprachige Fragen und Antworten über Audio
Jetzt haben wir die Zusammenfassung. Lass uns den Nutzern ermöglichen, Fragen in natürlicher Sprache zu den hochgeladenen Audioinhalten zu stellen. Hier kommen die multimodalen Funktionen von Voxtral zum Einsatz, indem Audio mit Textanweisungen kombiniert werden, um kontextbezogene Antworten zu generieren.
Die folgende Funktion unterstützt auch mehrsprachige Antworten, indem sie die Eingabeaufforderung je nach gewählter Sprache dynamisch anpasst.
Hier ist eine kurze Zusammenfassung dessen, was hier passiert:
ask_question()“ können Nutzer Fragen zu den hochgeladenen Audiodateien stellen.file_to_chunk()” in ein „AudioChunk” umgewandelt, das die Audiodaten im Format vorbereitet, das die multimodale API von Voxtral braucht.TextChunk“ gepackt, und sowohl der Ton als auch der Text werden in ein multimodales „UserMessage“ gepackt.Schritt 4.6: Die Seitenleiste einrichten
Die Seitenleiste ist wie ein Bedienfeld, wo du die Sitzungseinstellungen verwalten, die Sprache auswählen, die Verbindung zur Voxtral-API testen und das Antwortverhalten des Modells mit intuitiven Schiebereglern anpassen kannst.
Hier ist eine Erklärung des Codes oben:
st.sidebar” öffnet eine ausklappbare Seitenleiste, in der wir die Konfigurationstools für die App speichern.initialize_client()“, die versucht, eine Verbindung zur Voxtral-API herzustellen, und den Erfolg oder Misserfolg über Streamlit-Warnmeldungen meldet.temperature: Das hält die Kreativität im Zaum. Die niedrigeren Werte machen die Antworten deterministischer, während die höheren Werte sie vielfältiger machen.top_p: Dieser Parameter steuert die Kernsampling, was dabei hilft, die Generierung auf die wahrscheinlichsten Tokens zu beschränken.Schritt 4.7: Audio-Upload und Bearbeitung
Hier kannst du Audiodateien (z. B. .mp3, .wav usw.) hochladen, die vorübergehend gespeichert werden. Nach dem Hochladen können die Nutzer wählen, ob sie die Audioaufnahme transkribieren oder eine Zusammenfassung erstellen möchten.
Wir brauchen eine modulare Struktur, damit Audio-Dateien einfach hochgeladen, verarbeitet und die Ergebnisse über verschiedene Benutzerinteraktionen hinweg gespeichert werden können. So hab ich's gemacht:
Config.SUPPORTED_AUDIO_FORMATSdefiniert sind. Sobald eine Datei hochgeladen ist, wird sie in eine temporäre Datei geschrieben und unterst.session_state.audio_file_pathgespeichert.st.session_state.summary“ gespeichert.st.session_state.transcription“ gespeichert.Schritt 4.8: Interaktive mehrsprachige Fragen und Antworten
Mit diesem Schritt können Nutzer Fragen zu den hochgeladenen Audiodateien in mehreren Sprachen stellen (z. B. Englisch, Hindi, Spanisch). Die gewählte Sprache wird benutzt, um die Antwort des Modells zu formatieren, und jedes Frage-Antwort-Paar wird in einem sitzungsgesteuerten Gesprächsverlauf gespeichert und in Chat-Blasen angezeigt.
Hier ist eine Erklärung, was im obigen Code-Schnipsel passiert:
Ask QuestionTaste „ “: In einem Textfeld kannst du eine Frage in der gewählten Sprache eingeben und dann auf„ “ klicken. Frage stellen Button. Einmal draufgeklickt:st.session_state.chat_history” mit einem Zeitstempel.Schritt 4.9: Die App starten
In diesem letzten Schritt werden alle vorher definierten Teile zusammengefügt, wie das Initialisieren des Sitzungsstatus, das Rendern der Seitenleiste, das Verarbeiten von Audio-Uploads, die Transkription, Zusammenfassungen und Q&A in einem zweispaltigen Layout.
Sobald der Server läuft und alle Abhängigkeiten installiert sind, stellt dieser Schritt sicher, dass die App über Streamlit an den Browser gesendet wird und für die Interaktion bereit ist.
Die Funktion „
main()” ist der Einstiegspunkt für die App. Es kümmert sich um das Layout, koordiniert das Rendering und stellt sicher, dass alle Sitzungsvariablen und UI-Komponenten richtig initialisiert werden. Hier ist eine kurze Zusammenfassung der oben beschriebenen Funktionen:init_session_state(): Diese Funktion bereitet Standardwerte wie „transcription“, „summary“ und „chat_history“ vor, um den App-Status über Interaktionen hinweg beizubehalten.render_sidebar(): Es lädt Konfigurations-Widgets wie die Sprachauswahl, den Verbindungstest und die Modellparameter.render_audio_processing(): Mit dieser Funktion können Nutzer Audiodateien hochladen und bearbeiten, um sie zu transkribieren und zusammenzufassen.render_qa_section(): Endlich kannst du jetzt auch mehrsprachige Fragen zu hochgeladenen Audiodateien beantworten.Wenn alles fertig ist, starte die App mit:
Stell sicher, dass sie über die URL erreichbar ist, die du in „
VOXTRAL_API_BASE“ in deiner Datei „config.py“ angegeben hast. Sobald alle Abhängigkeiten installiert sind, starte die Streamlit-Anwendung, indem du den folgenden Befehl im Terminal ausführst:Dein Browser öffnet die Oberfläche automatisch. Die App ist jetzt voll funktionsfähig mit Audio-Upload, Echtzeit-Transkription, Zusammenfassungen und mehrsprachigen Fragen und Antworten, unterstützt von Voxtral Mini 3B.