Talk-Llama
(github.com/ggerganov)- Talk-Llama ist ein
whisper.cpp-Beispiel, bei dem man im Terminal ins Mikrofon spricht, Whisper Sprache in Text umwandelt und LLaMA antwortet - Für die Aufnahme von Mikrofon-Audio wird SDL2 benötigt; beim Build muss die CMake-Option
WHISPER_SDL2=ONaktiviert werden - Beim Start wird mit
-mwdas Whisper-Modell angegeben; für Echtzeit-Gespräche werden die Modellebaseodersmallempfohlen - Mit
-mlwird ein ggml-kompatibles LLaMA-Modell angegeben; zur Vorbereitung des Modells soll man den Anweisungen vonllama.cppfolgen - Mit
--session FILEkann der Modellzustand gespeichert und geladen werden, sodass bei langen Gesprächen oder über mehrere Ausführungen hinweg Kontext erhalten bleibt
Beispiel für Sprachdialog im Terminal
whisper.cpp/examples/talk-llamaist ein Beispiel, um im Terminal per Sprache mit der LLaMA-AI zu sprechen- Die Performance-Demo mit Stand vom 2. November 2023 wird als Ausführung auf einem M2 Ultra mit der Kombination Whisper Medium + LLaMA v2 13B Q8_0 angegeben
- Eine frühere Demo wird als CPU-Ausführungsbeispiel mit einem separaten Video bereitgestellt
Build- und Ausführungsablauf
whisper-talk-llamahängt für die Aufnahme von Mikrofon-Audio von der Bibliothek SDL2 ab- Beispiele für die Installation von SDL2 je nach Betriebssystem:
- Debian-basierte Linux-Systeme:
sudo apt-get install libsdl2-dev - Fedora Linux:
sudo dnf install SDL2 SDL2-devel - Mac OS:
brew install sdl2
- Debian-basierte Linux-Systeme:
- Beim CMake-Build wird die Option
WHISPER_SDL2=ONaktiviertcmake -B build -S . -DWHISPER_SDL2=ONcmake --build build --config Release
- Im Ausführungsbeispiel werden Whisper-Modell, LLaMA-Modell, Prompt und Anzahl der Threads gemeinsam angegeben
./build/bin/whisper-talk-llama -mw ./models/ggml-small.en.bin -ml ../llama.cpp/models/llama-13b/ggml-model-q4_0.gguf -p "Georgi" -t 8
Optionen zur Modellangabe
- Das Argument
-mwlegt das zu verwendende Whisper-Modell fest- Für ein Echtzeit-Erlebnis werden
baseodersmallempfohlen
- Für ein Echtzeit-Erlebnis werden
- Das Argument
-mllegt das zu verwendende LLaMA-Modell fest- Wie man ein
ggml-kompatibles LLaMA-Modell erhält, ist in den Anweisungen von llama.cpp beschrieben
- Wie man ein
Kontext mit Sitzungsdateien fortführen
whisper-talk-llamaunterstützt Sitzungsverwaltung für konsistentere und fortlaufende Gespräche- Dadurch kann der Kontext früherer Interaktionen erhalten bleiben, sodass Nutzeranfragen natürlicher verstanden und beantwortet werden können
- Die Sitzungsunterstützung wird beim Start mit der Kommandozeilenoption
--session FILEaktiviert- Nach jeder Interaktion wird der Modellzustand von
whisper-talk-llamain der angegebenen Datei gespeichert - Wenn die Datei nicht existiert, wird sie neu erstellt
- Wenn die Datei existiert, wird der Modellzustand daraus geladen und die vorherige Sitzung fortgesetzt
- Nach jeder Interaktion wird der Modellzustand von
- Das ist nützlich bei langen Gesprächen oder bei Interaktionen mit dem AI assistant über mehrere Sitzungen hinweg, weil frühere Interaktionen erinnert und kontextbezogenere Antworten geliefert werden können
- Beispielaufruf:
./build/bin/whisper-talk-llama --session ./my-session-file -mw ./models/ggml-small.en.bin -ml ../llama.cpp/models/llama-13b/ggml-model-q4_0.gguf -p "Georgi" -t 8
Sprachausgabe und Feedback
- Um die erzeugten Textantworten als Sprache zu hören, wird ein TTS-Tool benötigt
- Es kann jede gewünschte TTS-Engine verwendet werden; bei Bedarf lässt sich das Skript speak entsprechend anpassen
- Die Standardeinstellung verwendet unter MacOS
sayoder unter Windows SpeechSynthesizer - Feedback kann über die GitHub-Diskussion #672 gegeben werden
1 Kommentare
Meinungen auf Hacker News
Lustig, das hier zu sehen :)
Die Apple-Silicon-Performance dürfte inzwischen deutlich besser sein als im Video gezeigt. whisper.cpp läuft jetzt vollständig auf der GPU, und die Generierungsgeschwindigkeit von llama.cpp hat sich in den letzten Monaten stark verbessert.
Tatsächlich ist auch die Performance beeindruckend.
Cool. In einem aktuellen Projekt habe ich Llama mit einem Open-Source-Sprachsynthese-Modell verbunden; dabei gab es viele interessante Engineering-Aspekte.
Persönlich sind für mich die nützlichsten Coding-Assistenten solche, die die manuelle Arbeit reduzieren, etwa indem sie aus Docstrings Argumente und Typen erzeugen oder umgekehrt, statt schwieriges Denken oder Problemlösen übernehmen zu wollen. Bei komplexeren Aufgaben muss man dem Assistenten offenbar einen ziemlich guten Startpunkt geben.
Beim Programmieren rede ich oft mit mir selbst; wenn so ein Tool meine Worte als Kontextvektoren einbetten und als zusätzliche Eingabe verwenden könnte, um dem Modell einen besseren Startpunkt zu geben, wäre das wirklich futuristisch und nützlich. Ich habe Copilot spät angenommen und nutze es nicht ständig, aber falls jemand etwas Ähnliches kennt, würde es mich interessieren.
Wenn der Open-Weights-Vorschlag innerhalb von 270 Tagen Realität wird, könnte das in ein paar Monaten praktisch verboten sein.
Soweit ich finden konnte, gibt es darin überhaupt nichts, was Open-Weights-Modelle verbietet. Ich sehe auch wenig Grund, warum in der endgültigen Empfehlung „verbieten“ stehen sollte.
Man kann sich zum Beispiel Empfehlungen vorstellen, die etablierten Anbietern zugutekommen, indem sie die Hürden für die Einführung von Open-Weights-Modellen durch die Regierung so hoch setzen, dass der Kauf von OpenAI deutlich attraktiver wirkt. Aber das ist etwas anderes als die ursprüngliche Aussage.
Die Executive Order scheint recht gut lesbar zu sein; habe ich im Text etwas übersehen?
https://www.whitehouse.gov/briefing-room/presidential-action...
Ich stimme zu, dass die offene Ausgestaltung des Umfangs besorgniserregend ist, aber wo genau ist das tatsächliche Verbot?
Wenn ich
./talk-llamaunter Arch und Debian ausführe, bekomme ich eine floating point exception.sdl2libundffmpeghabe ich überprüft, und auch das zugehörige Issue (https://github.com/ggerganov/whisper.cpp/issues/1325) habe ich gesehen, aber gelöst ist es nicht. Hat das noch jemand?https://github.com/ggerganov/whisper.cpp/issues/352#issuecom...
Ich bin nicht sicher, was sich dadurch geändert hat, aber im Grunde habe ich
ffmpegundlibsdl2-deventfernt und im Root des Reposmakeausgeführt. Danach habe ichlibsdl2undffmpeginstalliert undmake talk-llamaausgeführt.Auf einem 4-Core i7-8550U mit 16 GB RAM ist es ziemlich langsam.
Im Root des Repos habe ich ungefähr Folgendes gemacht:
$ sudo apt purge ffmpeg$ make clean$ git pull$ make$ sudo apt install libsdl2-dev$ make talk-llama$ ./talk-llama -mw ./models/ggml-small.en.bin -ml ../llama.cpp/models/llama-2-13b.Q4_0.gguf -p "t0mk" -t 8\n\nGibt es keine Text-to-Speech-Lösung, die nicht wartet, bis Llama die Generierung beendet hat, sondern einen Textstream entgegennimmt und ihn sofort vorliest?
Das dürfte allerdings nur funktionieren, wenn das Modell den Buffer schnell genug füllt, damit die Sprachsynthese-Engine nicht ins Stocken gerät.
Könnte man die Latenz verringern, indem man nicht wartet, bis die gesamte LLM-Antwort fertig ist, sondern die erzeugten Inhalte in etwa 6-Token-Blöcken zur Sprachsynthese streamt?
Man könnte die Erkennung des Sprechendes verbessern, die derzeit nur einen einfachen adaptiven Schwellenwert verwendet, und man könnte ein kleines LLM allgemeine schnelle Antworten erzeugen lassen, während ein großes LLM rechnet. Auch die Sprachsynthese könnte man chunk- oder satzweise streamen.
Eine der besseren Open-Source-Versionen solcher Chatbots ist meiner Ansicht nach https://github.com/yacineMTB/talk. Inzwischen gibt es wahrscheinlich auch deutlich mehr ähnliche Projekte.
Was ist das beste Chat-Interface für Llama? Ich habe eine 3090 und würde gern ein Modell für schnelle Coding-Aufgaben im Terminal laufen lassen.
pacman -S ollamaollama serveollama run llama2:13b 'insert prompt'https://ollama.ai/
https://github.com/cogentapps/chat-with-gpt
Es scheint für die Nutzung von ElevenLabs und der OpenAI API gebaut zu sein, dürfte sich aber vielleicht leicht für lokales Whisper.cpp und Llama konfigurieren lassen.
Sie stellen ein und haben keine öffentlich bekannte Monetarisierungsstrategie, daher rechne ich damit, dass bald einige kostenlose Funktionen kostenpflichtig werden oder absichtlich eingeschränkt werden. Trotzdem ist es für schlanke Apps für kostenlose LLMs, die vollständig auf llama.cpp beruhen, schwer, einen Vendor Lock-in zu erzeugen. Wenn Open Source wichtiger ist als Features, würde ich ebenfalls ollama empfehlen.
Für technische Fragen ist derzeit meiner Ansicht nach Wizard angesagt.
Ich bin mit ollama zum Ausführen lokaler Open-Source-LLMs wirklich zufrieden. Was wäre das entsprechende Pendant für Whisper oder aktuelle Open-Source-Sprachsynthese-Modelle? Ich kenne kein Projekt, mit dem sich Whisper lokal so einfach einrichten lässt.
WhisperScript sah ebenfalls ziemlich gut aus: https://github.com/openai/whisper/discussions/1028
Allerdings ist die Einrichtung von WhisperX nicht besonders schwierig. Hier sind meine vor ein paar Monaten zusammengestellten Schritt-für-Schritt-Notizen: https://llm-tracker.info/books/logbook/page/transcription-te...
https://goodsnooze.gumroad.com/l/macwhisper
Für Sprachsynthese bietet coqui über mehrere Sprachen hinweg die beste User Experience und die besten Modelle, aber die Qualität liegt nicht auf dem Niveau kommerzieller Sprachsynthese-Anbieter.
Kann jemand einfach erklären, was das hier kann? Kann es den Kontext eines Chats lernen und beibehalten und so etwas wie ein Langzeitgedächtnis aufbauen?
Die Kontextbeschränkung des LLM hängt vom gewählten Modell und den Einstellungen ab. Also etwa davon, ob man Llama 2, Wizard Vicuna oder ein anderes Modell nutzt und wie das Kontextfenster konfiguriert ist. Das kann verwirrend sein: Ein LLM „antwortet“ dem Nutzer nicht wirklich, sondern sagt den wahrscheinlichsten nächsten Inhalt in einem Gesprächsverlauf zwischen dem Nutzer und einem hilfreichen Assistant voraus – und dadurch gelingt es ihm, so zu tun, als wäre es ein hilfreicher Assistant, wodurch es tatsächlich zu einem nützlichen Assistant wird.
Wenn man die Pipeline verändert, scheint so ein Verhalten ebenfalls möglich. Die Struktur wäre dann
Spracherkennung → Wrapper[Llama] → Sprachsynthese; interessant wird es, wenn der Wrapper Llama seine Arbeit machen lässt, aber zusätzlichen Processing auf den Eingabetext anwendet.Der Wrapper könnte das Gespräch analysieren, Kernelemente extrahieren wie „diese Person heißt Bob, ist männlich, 35 Jahre alt, mag Hunde, bevorzugt Ordnung, möchte um 17 Uhr daran erinnert werden, seine Tochter anzurufen, ist ein eingeschleuster Agent der antarktischen Mafia und bevorzugt Antworten mit starkem polnischem Akzent“, und entsprechend handeln.
Zum Beispiel könnte er über HomeAssistant eine Erinnerung für 17 Uhr erstellen, die Sprachsynthese-Engine auf polnischen Akzent einstellen und den initialen Gesprächsverlauf späterer Ausführungen anpassen. Etwa indem er in der internen Chat-Konversation den Namen der Person einfügt und in der Vorab-Einführung des nächsten Gesprächs Interessen und Persönlichkeit komprimiert bereitstellt.
So entstünde Interaktivität durch Aktionen, die andere Tools ausführen, und Kontinuität durch das Anpassen des nächsten Gesprächsverlaufs.
Das hat wirklich einen starken ELIZA-Vibe.