Talk-Llama
(github.com/ggerganov)- Talk-Llama là một ví dụ của
whisper.cpp: khi bạn nói vào micro trong terminal, Whisper sẽ chuyển giọng nói thành văn bản và LLaMA sẽ phản hồi - Cần SDL2 để thu âm thanh từ micro, và khi build phải bật tùy chọn CMake
WHISPER_SDL2=ON - Khi chạy, dùng
-mwđể chỉ định mô hình Whisper; với hội thoại thời gian thực, khuyến nghị dùng mô hìnhbasehoặcsmall - Với
-ml, chỉ định mô hình LLaMA tương thích ggml; cách chuẩn bị mô hình được hướng dẫn theollama.cpp - Dùng
--session FILEđể lưu/tải trạng thái mô hình, cho phép duy trì ngữ cảnh qua các cuộc trò chuyện dài hoặc nhiều lần chạy
Ví dụ hội thoại giọng nói trong terminal
whisper.cpp/examples/talk-llamalà ví dụ để trò chuyện bằng giọng nói với AI LLaMA trong terminal- Tính đến ngày 2 tháng 11 năm 2023, bản demo hiệu năng được ghi là chạy trên M2 Ultra với tổ hợp Whisper Medium + LLaMA v2 13B Q8_0
- Bản demo trước đó được cung cấp dưới dạng video riêng như một trường hợp chạy bằng CPU
Quy trình build và chạy
whisper-talk-llamaphụ thuộc vào thư viện SDL2 để thu âm thanh từ micro- Ví dụ cài đặt SDL2 theo từng hệ điều hành như sau
- Linux họ Debian:
sudo apt-get install libsdl2-dev - Fedora Linux:
sudo dnf install SDL2 SDL2-devel - Mac OS:
brew install sdl2
- Linux họ Debian:
- Trong quá trình build bằng CMake, bật tùy chọn
WHISPER_SDL2=ONcmake -B build -S . -DWHISPER_SDL2=ONcmake --build build --config Release
- Ví dụ chạy chỉ định cùng lúc mô hình Whisper, mô hình LLaMA, prompt và số luồng
./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
Tùy chọn chỉ định mô hình
- Đối số
-mwdùng để chỉ định mô hình Whisper sẽ sử dụng- Với trải nghiệm thời gian thực, khuyến nghị dùng mô hình
basehoặcsmall
- Với trải nghiệm thời gian thực, khuyến nghị dùng mô hình
- Đối số
-mldùng để chỉ định mô hình LLaMA sẽ sử dụng- Để biết cách lấy mô hình LLaMA tương thích
ggml, hãy tham khảo hướng dẫn của llama.cpp
- Để biết cách lấy mô hình LLaMA tương thích
Tiếp nối ngữ cảnh bằng tệp session
whisper-talk-llamahỗ trợ quản lý session để có các cuộc hội thoại nhất quán và liên tục hơn- Có thể giữ ngữ cảnh của các tương tác trước đó để hiểu yêu cầu của người dùng và phản hồi tự nhiên hơn
- Hỗ trợ session được kích hoạt bằng tùy chọn dòng lệnh
--session FILEkhi chạy- Sau mỗi lần tương tác, trạng thái mô hình của
whisper-talk-llamasẽ được lưu vào tệp đã chỉ định - Nếu tệp chưa tồn tại thì sẽ được tạo mới
- Nếu tệp đã tồn tại thì trạng thái mô hình sẽ được tải từ đó để tiếp tục session trước
- Sau mỗi lần tương tác, trạng thái mô hình của
- Hữu ích khi tương tác với AI assistant qua các cuộc hội thoại dài hoặc nhiều session, giúp ghi nhớ tương tác trước đó và đưa ra phản hồi ngữ cảnh phù hợp hơn
- Ví dụ chạy:
./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
1 bình luận
Ý kiến trên Hacker News
Thấy ở đây thú vị thật :)
So với trong video thì hiện nay hiệu năng Apple Silicon chắc đã tốt hơn nhiều rồi. whisper.cpp giờ đã chạy hoàn toàn trên GPU, và trong vài tháng qua tốc độ sinh của llama.cpp cũng được cải thiện đáng kể
Thực tế hiệu năng cũng ấn tượng
Hay thật. Trong một dự án gần đây, tôi đã thử nối Llama với một mô hình tổng hợp giọng nói mã nguồn mở, và có nhiều yếu tố kỹ thuật thú vị
Cá nhân tôi thấy công cụ hỗ trợ lập trình hữu ích nhất là những công cụ giảm gánh nặng thao tác thủ công, chẳng hạn tạo tham số và kiểu từ docstring hoặc ngược lại, thay vì cố thay tôi tư duy khó hay giải quyết vấn đề. Với các tác vụ phức tạp hơn, có vẻ phải đưa cho công cụ hỗ trợ một điểm khởi đầu khá tốt
Tôi thường tự nói một mình khi lập trình, nên nếu một công cụ như thế này có thể nhúng lời nói của tôi thành vector ngữ cảnh để dùng làm đầu vào bổ sung và cho mô hình một điểm khởi đầu tốt hơn, thì thật sự sẽ rất tương lai và hữu ích. Tôi thuộc nhóm dùng Copilot khá muộn và không phải lúc nào cũng dùng, nhưng nếu ai biết thứ gì tương tự thì tôi rất muốn nghe
Nếu đề xuất trọng số mở trở thành hiện thực trong vòng 270 ngày, có thể vài tháng nữa nó gần như bị cấm
Theo những gì tôi tìm được, hoàn toàn không có nội dung nào cấm các mô hình trọng số mở. Tôi cũng không thấy có nhiều lý do để khuyến nghị cuối cùng lại có câu “hãy cấm”
Ví dụ, có thể hình dung các khuyến nghị có lợi cho những doanh nghiệp hiện hữu, kiểu như chính phủ khiến gánh nặng áp dụng mô hình trọng số mở quá cao đến mức việc mua OpenAI trông hấp dẫn hơn nhiều. Nhưng chuyện đó khác với điều được nói ban đầu
Sắc lệnh hành pháp có vẻ khá dễ đọc; tôi có bỏ sót gì trong văn bản không?
https://www.whitehouse.gov/briefing-room/presidential-action...
Tôi đồng ý rằng cách phạm vi được để mở là đáng lo, nhưng lệnh cấm thực tế nằm ở đâu?
Trên Arch và Debian, chạy
./talk-llamathì gặp lỗi floating point exception. Tôi cũng đã kiểm trasdl2libvàffmpeg, xem cả issue liên quan (https://github.com/ggerganov/whisper.cpp/issues/1325) nhưng vẫn chưa giải quyết được. Có ai khác gặp không?https://github.com/ggerganov/whisper.cpp/issues/352#issuecom...
Tôi không chắc chính xác điều gì đã thay đổi, nhưng về cơ bản tôi đã gỡ
ffmpegvàlibsdl2-dev, rồi chạymakeở thư mục gốc của repo. Sau đó càilibsdl2vàffmpeg, rồi chạymake talk-llamaTrên i7-8550U 4 nhân và RAM 16GB thì khá chậm
Đại khái tôi đã làm như sau ở thư mục gốc của repo:
$ 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\nKhông có giải pháp chuyển văn bản thành giọng nói nào nhận luồng văn bản và đọc ngay, thay vì chờ Llama sinh xong à?
Có lẽ chỉ khả thi khi mô hình lấp đầy buffer đủ nhanh để engine tổng hợp giọng nói không bị dừng
Đừng chờ toàn bộ phản hồi LLM kết thúc; nếu stream phần tổng hợp giọng nói ngay khi được tạo theo từng cụm khoảng 6 token thì có giảm được độ trễ không?
Hiện tại có thể cải thiện phát hiện kết thúc lượt nói, vốn chỉ dùng ngưỡng thích ứng cơ bản; cũng có thể để một LLM nhỏ tạo các phản hồi nhanh thông thường trong khi LLM lớn đang tính toán. Phần tổng hợp giọng nói cũng có thể được stream theo chunk hoặc theo câu
Tôi cho rằng một trong những phiên bản mã nguồn mở tốt hơn của kiểu chatbot này là https://github.com/yacineMTB/talk. Hiện giờ nhiều khả năng cũng đã có thêm nhiều dự án tương tự
Giao diện chat tốt nhất cho Llama là gì? Tôi có một chiếc 3090 nên muốn chạy thử một model trong terminal cho các tác vụ lập trình nhanh
pacman -S ollamaollama serveollama run llama2:13b 'insert prompt'https://ollama.ai/
https://github.com/cogentapps/chat-with-gpt
Có vẻ nó được làm để dùng ElevenLabs và OpenAI API, nhưng cũng có thể khá dễ cấu hình cho Whisper.cpp và Llama chạy cục bộ
Họ đang tuyển dụng và chưa có chiến lược kiếm tiền công khai, nên tôi đoán sớm muộn cũng sẽ có thay đổi kiểu đưa một số tính năng miễn phí vào gói trả phí hoặc cố ý giới hạn chúng. Dù vậy, các ứng dụng mỏng cho LLM miễn phí phụ thuộc hoàn toàn vào llama.cpp khó mà tạo được khóa chặt nhà cung cấp. Nếu ưu tiên mã nguồn mở hơn tính năng, tôi cũng sẽ khuyên dùng ollama
Với câu hỏi kỹ thuật, tôi nghĩ hiện Wizard đang là lựa chọn thịnh hành
Tôi rất hài lòng với ollama để chạy LLM mã nguồn mở cục bộ, vậy thứ tương đương với nó cho Whisper hoặc các model tổng hợp giọng nói mã nguồn mở mới nhất là gì? Tôi không biết dự án nào giúp thiết lập Whisper cục bộ đơn giản như vậy
Một thứ tên WhisperScript trông cũng khá ổn: https://github.com/openai/whisper/discussions/1028
Dù vậy, thiết lập WhisperX cũng không quá khó. Đây là ghi chép từng bước tôi tổng hợp vài tháng trước: https://llm-tracker.info/books/logbook/page/transcription-te...
https://goodsnooze.gumroad.com/l/macwhisper
Về tổng hợp giọng nói, coqui có trải nghiệm người dùng và model tốt nhất trên nhiều ngôn ngữ, nhưng chất lượng không cùng đẳng cấp với các nhà cung cấp tổng hợp giọng nói thương mại
Có thể giải thích đơn giản thứ này làm được gì không? Nó có thể học ngữ cảnh cuộc chat và duy trì nó, rồi tích lũy một kiểu trí nhớ dài hạn nào đó không?
Giới hạn ngữ cảnh của LLM phụ thuộc vào model và cấu hình mà người dùng chọn. Ví dụ, tùy bạn dùng model nào như Llama 2, Wizard Vicuna, v.v., và cấu hình cửa sổ ngữ cảnh ra sao. LLM không hẳn “trả lời” người dùng, mà dự đoán nội dung tiếp theo hợp lý nhất trong lịch sử hội thoại giữa người dùng và một assistant hữu ích; kết quả là nó thành công trong việc giả làm một assistant hữu ích và thực sự trở thành một assistant hữu ích, nên điều này có thể gây nhầm lẫn
Nếu thay đổi pipeline thì có vẻ hành vi như vậy cũng có thể làm được. Cấu trúc sẽ thành
nhận dạng giọng nói → Wrapper[Llama] → tổng hợp giọng nói, và nếu Wrapper để Llama làm việc của nó đồng thời áp thêm xử lý lên văn bản đầu vào, mọi thứ sẽ trở nên thú vịWrapper có thể phân tích cuộc trò chuyện, trích ra các yếu tố cốt lõi như “người này tên Bob, nam, 35 tuổi, thích chó và thích mọi thứ ngăn nắp, muốn được nhắc gọi cho con gái lúc 5 giờ chiều, là đặc vụ nằm vùng của mafia Nam Cực, và thích được nói chuyện bằng giọng Ba Lan nặng”, rồi hành động theo đó
Ví dụ, nó có thể tạo nhắc nhở lúc 5 giờ chiều qua HomeAssistant, đặt engine tổng hợp giọng nói sang giọng Ba Lan, và chỉnh sửa lịch sử hội thoại khởi đầu cho các lần chạy sau. Chẳng hạn đưa tên người vào cuộc hội thoại nội bộ, rồi cung cấp bản nén các mối quan tâm và tính cách trong phần giới thiệu trước của cuộc trò chuyện tiếp theo
Làm như vậy có thể tạo ra tính tương tác thông qua các hành động do công cụ khác thực hiện, đồng thời tạo tính liên tục bằng cách chỉnh sửa lịch sử cuộc trò chuyện tiếp theo
Cái này thật sự mang đậm cảm giác ELIZA