Talk-Llama
(github.com/ggerganov)- Talk-Llama เป็นตัวอย่างของ
whisper.cppที่เมื่อพูดผ่านไมโครโฟนในเทอร์มินัล Whisper จะแปลงเสียงเป็นข้อความ และ LLaMA จะตอบกลับ - การจับเสียงจากไมโครโฟนต้องใช้ SDL2 และตอน build ต้องเปิดตัวเลือก CMake
WHISPER_SDL2=ON - ตอนรันให้ระบุ โมเดล Whisper ด้วย
-mwโดยสำหรับการสนทนาแบบเรียลไทม์แนะนำโมเดลbaseหรือsmall - สำหรับ
-mlให้ระบุ โมเดล LLaMA ที่เข้ากันได้กับ ggml และการเตรียมโมเดลให้ทำตามคำแนะนำของllama.cpp - หากใช้
--session FILEจะสามารถบันทึกและโหลดสถานะของโมเดล เพื่อ คงบริบท สำหรับบทสนทนายาว ๆ หรือข้ามการรันหลายครั้งได้
ตัวอย่างการสนทนาด้วยเสียงในเทอร์มินัล
whisper.cpp/examples/talk-llamaเป็นตัวอย่างสำหรับ สนทนาด้วยเสียงกับ LLaMA AI ในเทอร์มินัล- เดโมประสิทธิภาพ ณ วันที่ 2 พฤศจิกายน 2023 ระบุว่ารันด้วยชุด Whisper Medium + LLaMA v2 13B Q8_0 บน M2 Ultra
- เดโมก่อนหน้านี้มีวิดีโอแยกต่างหากเป็น ตัวอย่างการรันบน CPU
ขั้นตอนการ build และการรัน
whisper-talk-llamaพึ่งพาไลบรารี SDL2 สำหรับการจับเสียงจากไมโครโฟน- ตัวอย่างการติดตั้ง SDL2 ตามระบบปฏิบัติการมีดังนี้
- Linux ตระกูล Debian:
sudo apt-get install libsdl2-dev - Fedora Linux:
sudo dnf install SDL2 SDL2-devel - Mac OS:
brew install sdl2
- Linux ตระกูล Debian:
- ในการ build ด้วย CMake ให้เปิดใช้ตัวเลือก
WHISPER_SDL2=ONcmake -B build -S . -DWHISPER_SDL2=ONcmake --build build --config Release
- ตัวอย่างการรันจะระบุโมเดล Whisper, โมเดล LLaMA, prompt และจำนวนเธรดร่วมกัน
./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
ตัวเลือกสำหรับระบุโมเดล
- อาร์กิวเมนต์
-mwใช้ระบุโมเดล Whisper ที่จะใช้งาน- สำหรับประสบการณ์แบบเรียลไทม์ แนะนำโมเดล
baseหรือsmall
- สำหรับประสบการณ์แบบเรียลไทม์ แนะนำโมเดล
- อาร์กิวเมนต์
-mlใช้ระบุโมเดล LLaMA ที่จะใช้งาน- วิธีรับโมเดล LLaMA ที่เข้ากันได้กับ
ggmlให้ดูคำแนะนำของ llama.cpp
- วิธีรับโมเดล LLaMA ที่เข้ากันได้กับ
ต่อบริบทด้วยไฟล์เซสชัน
whisper-talk-llamaรองรับ การจัดการเซสชัน เพื่อให้บทสนทนามีความสอดคล้องและต่อเนื่องมากขึ้น- สามารถคงบริบทจากการโต้ตอบก่อนหน้า เพื่อเข้าใจคำขอของผู้ใช้และตอบกลับได้เป็นธรรมชาติมากขึ้น
- การรองรับเซสชันเปิดใช้งานได้ด้วยตัวเลือกบรรทัดคำสั่ง
--session FILEตอนรัน- หลังการโต้ตอบแต่ละครั้ง สถานะโมเดลของ
whisper-talk-llamaจะถูกบันทึกลงไฟล์ที่ระบุ - หากไฟล์ไม่มีอยู่ จะสร้างขึ้นใหม่
- หากไฟล์มีอยู่ จะโหลดสถานะโมเดลจากไฟล์นั้นและกลับมาทำงานต่อจากเซสชันก่อนหน้า
- หลังการโต้ตอบแต่ละครั้ง สถานะโมเดลของ
- มีประโยชน์เมื่อโต้ตอบกับ AI assistant ในบทสนทนายาว ๆ หรือข้ามหลายเซสชัน เพราะช่วยจดจำการโต้ตอบก่อนหน้าและให้คำตอบที่มีบริบทเกี่ยวข้องมากขึ้น
- ตัวอย่างการรัน:
./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 ความคิดเห็น
ความคิดเห็นบน Hacker News
เห็นตรงนี้แล้วน่าสนุกดีครับ :)
ตอนนี้ ประสิทธิภาพของ Apple Silicon น่าจะดีขึ้นกว่าที่เห็นในวิดีโอมากแล้ว whisper.cpp ตอนนี้รันบน GPU ได้เต็มรูปแบบ และในช่วงไม่กี่เดือนที่ผ่านมา ความเร็วในการสร้างข้อความของ llama.cpp ก็ดีขึ้นมาก
ประสิทธิภาพจริงก็น่าประทับใจด้วย
เยี่ยมเลยครับ ช่วงหลังผมลองเชื่อม Llama เข้ากับ โมเดลสังเคราะห์เสียง แบบโอเพนซอร์สในโปรเจกต์หนึ่ง มีประเด็นทางวิศวกรรมที่น่าสนใจอยู่มาก
โดยส่วนตัวแล้ว เครื่องมือช่วยเขียนโค้ดที่มีประโยชน์ที่สุดสำหรับผมคือเครื่องมือที่ช่วยลด ภาระงานแบบทำมือ เช่น สร้างอาร์กิวเมนต์และชนิดข้อมูลจาก docstring หรือทำกลับกัน มากกว่าจะพยายามคิดยาก ๆ หรือแก้ปัญหาแทน งานที่ซับซ้อนกว่านั้นดูเหมือนต้องให้จุดเริ่มต้นที่ค่อนข้างดีกับเครื่องมือช่วยก่อน
ผมมักพูดกับตัวเองระหว่างเขียนโค้ด ถ้าเครื่องมือแบบนี้สามารถฝังคำพูดของผมเป็นเวกเตอร์บริบทเพื่อใช้เป็นอินพุตเพิ่มเติม และให้จุดเริ่มต้นที่ดีกว่ากับโมเดลได้ ก็คงให้ความรู้สึกล้ำอนาคตและมีประโยชน์มาก ผมเป็นคนที่ยอมรับ Copilot ค่อนข้างช้าและไม่ได้ใช้ตลอดเวลา แต่ถ้าใครรู้จักอะไรที่คล้ายกันก็อยากทราบครับ
ถ้า ข้อเสนอเรื่อง open weights กลายเป็นจริงภายใน 270 วัน อีกไม่กี่เดือนข้างหน้าก็อาจถูกแบนในทางปฏิบัติได้เลยนะ
เท่าที่ผมหาเจอ ไม่มีเนื้อหาใดเลยที่พูดถึงการ แบนโมเดลแบบ open weights และก็ไม่ค่อยเห็นเหตุผลว่าทำไมข้อเสนอแนะสุดท้ายถึงจะมีคำว่า “ให้แบน” อยู่ในนั้น
ตัวอย่างเช่น พอจะจินตนาการได้ว่ารัฐบาลอาจให้ข้อเสนอแนะที่เอื้อประโยชน์ต่อผู้เล่นเดิม เช่น ทำให้ภาระในการนำโมเดลแบบ open weights มาใช้สูงเกินไปจนการซื้อ OpenAI ดูน่าสนใจกว่ามาก แต่นั่นต่างจากสิ่งที่พูดไว้เดิม
คำสั่งฝ่ายบริหารดูอ่านค่อนข้างง่ายนะครับ ผมพลาดอะไรในตัวบทไปหรือเปล่า?
https://www.whitehouse.gov/briefing-room/presidential-action...
ผมเห็นด้วยว่าวิธีที่เปิดขอบเขตไว้กว้างนั้นน่ากังวล แต่การแบนจริง ๆ อยู่ตรงไหน?
บน Arch และ Debian พอรัน
./talk-llamaแล้วเกิด floating point exception ผมตรวจsdl2libกับffmpegแล้ว และดู issue ที่เกี่ยวข้อง (https://github.com/ggerganov/whisper.cpp/issues/1325) ด้วย แต่ยังแก้ไม่ได้ มีใครเจอเหมือนกันไหม?https://github.com/ggerganov/whisper.cpp/issues/352#issuecom...
ไม่แน่ใจว่าอะไรเปลี่ยนไป แต่โดยพื้นฐานแล้วผมลบ
ffmpegกับlibsdl2-devออก แล้วรันmakeที่รากของ repository จากนั้นติดตั้งlibsdl2กับffmpegแล้วรันmake talk-llamaบน i7-8550U แบบ 4 คอร์กับ RAM 16GB ค่อนข้างช้า
ที่รากของ repository ผมทำประมาณนี้:
$ 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\nไม่มีโซลูชัน text-to-speech ที่รับ สตรีมข้อความ แล้วพูดออกมาทันที โดยไม่ต้องรอให้ Llama สร้างเสร็จหรือครับ?
คงเป็นไปได้ก็ต่อเมื่อโมเดลเติมบัฟเฟอร์ได้เร็วพอจนเอนจินสังเคราะห์เสียงไม่หยุดกลางคัน
อย่ารอจนการตอบกลับของ LLM ทั้งหมดจบ แต่สตรีมเสียงสังเคราะห์ทันทีที่สร้างออกมาเป็นชุด ๆ ประมาณ 6 โทเค็น จะช่วยลดความหน่วงได้ไหม?
ตอนนี้ใช้แค่ค่า threshold แบบปรับตัวได้พื้นฐานสำหรับ การตรวจจับการจบคำพูด ซึ่งยังทำให้ดีขึ้นได้ และอาจให้ LLM ขนาดเล็กสร้างคำตอบทั่วไปที่รวดเร็วระหว่างที่ LLM ขนาดใหญ่กำลังคำนวณอยู่ก็ได้ การสังเคราะห์เสียงก็สามารถสตรีมเป็น chunk หรือเป็นประโยคได้เช่นกัน
ผมมองว่าหนึ่งในเวอร์ชันโอเพนซอร์สที่ดีกว่าของแชตบอตแบบนี้คือ https://github.com/yacineMTB/talk ตอนนี้มีโอกาสสูงว่าจะมีโปรเจกต์คล้าย ๆ กันมากขึ้นแล้ว
อินเทอร์เฟซแชต ที่ดีที่สุดสำหรับ Llama คืออะไร? ผมมี 3090 อยู่ เลยอยากลองรันโมเดลสักตัวจากเทอร์มินัลสำหรับงานโค้ดดิ้งเร็ว ๆ
pacman -S ollamaollama serveollama run llama2:13b 'insert prompt'https://ollama.ai/
https://github.com/cogentapps/chat-with-gpt
ดูเหมือนจะทำมาให้ใช้ ElevenLabs และ OpenAI API แต่ก็น่าจะตั้งค่าให้เข้ากับ Whisper.cpp และ Llama แบบโลคัลได้ไม่ยาก
เขากำลังรับสมัครงานและยังไม่มีกลยุทธ์ทำรายได้ที่เปิดเผย จึงคาดว่าอีกไม่นานคงมีการเปลี่ยนแปลง เช่น นำฟีเจอร์ฟรีบางส่วนไปคิดเงินหรือจำกัดการใช้งานโดยตั้งใจ ถึงอย่างนั้น แอปบาง ๆ สำหรับ LLM ฟรีที่พึ่งพา llama.cpp อย่างเต็มที่ก็สร้าง vendor lock-in ได้ยากอยู่ดี ถ้าให้ความสำคัญกับโอเพนซอร์สมากกว่าฟีเจอร์ ผมก็แนะนำ ollama เช่นกัน
สำหรับคำถามเชิงเทคนิค ตอนนี้ผมว่า Wizard กำลังเป็นตัวเด่น
ผมพอใจกับ ollama มากสำหรับการรัน LLM โอเพนซอร์สแบบโลคัล แล้วฝั่ง Whisper หรือ โมเดลสังเคราะห์เสียง โอเพนซอร์สรุ่นใหม่ ๆ มีอะไรที่เทียบเท่ากันไหม? ผมไม่ค่อยรู้จักโปรเจกต์ที่ช่วยตั้งค่า Whisper ให้รันโลคัลได้ง่ายขนาดนั้น
ตัวที่ชื่อ WhisperScript ก็ดูค่อนข้างดี: https://github.com/openai/whisper/discussions/1028
อย่างไรก็ตาม การตั้งค่า WhisperX ก็ไม่ได้ยากขนาดนั้น นี่เป็นบันทึกขั้นตอนที่ผมสรุปไว้เมื่อไม่กี่เดือนก่อน: https://llm-tracker.info/books/logbook/page/transcription-te...
https://goodsnooze.gumroad.com/l/macwhisper
ส่วนการสังเคราะห์เสียง coqui มีประสบการณ์ผู้ใช้และโมเดลที่ดีที่สุดในหลายภาษา แต่คุณภาพยังไม่ถึงระดับเดียวกับผู้ให้บริการสังเคราะห์เสียงเชิงพาณิชย์
ช่วยอธิบายแบบง่าย ๆ ได้ไหมว่าสิ่งนี้ทำอะไรได้บ้าง? มันสามารถเรียนรู้และคงบริบทของแชตไว้ พร้อมสร้างอะไรคล้าย ๆ ความจำระยะยาว ได้ไหม?
ขีดจำกัดบริบทของ LLM ขึ้นอยู่กับโมเดลและการตั้งค่าที่ผู้ใช้เลือก เช่น ใช้โมเดลอะไรอย่าง Llama 2, Wizard Vicuna และตั้งค่า context window อย่างไร LLM ไม่ได้ “ตอบ” ผู้ใช้โดยตรงเท่าไรนัก แต่คาดเดาเนื้อหาถัดไปที่น่าจะเป็นไปได้ที่สุดจากประวัติการสนทนาระหว่างผู้ใช้กับ assistant ที่มีประโยชน์ แล้วผลลัพธ์ก็คือมันแสร้งเป็น assistant ที่มีประโยชน์ได้สำเร็จจนกลายเป็น assistant ที่มีประโยชน์จริง ๆ เรื่องนี้เลยอาจชวนสับสนได้
ถ้าเปลี่ยน pipeline ก็น่าจะทำพฤติกรรมแบบนั้นได้ โครงสร้างจะเป็น
การรู้จำเสียงพูด → Wrapper[Llama] → การสังเคราะห์เสียงและถ้า Wrapper สามารถปล่อยให้ Llama ทำสิ่งที่ควรทำ พร้อมเพิ่มการประมวลผลเพิ่มเติมกับข้อความอินพุตได้ ก็จะน่าสนใจขึ้นWrapper อาจวิเคราะห์บทสนทนาแล้วดึงองค์ประกอบสำคัญออกมา เช่น “คนนี้ชื่อ Bob เป็นผู้ชาย อายุ 35 ปี ชอบสุนัข ชอบความเป็นระเบียบ ต้องการให้เตือนโทรหาลูกสาวตอน 5 โมงเย็น เป็นสายลับแฝงตัวของมาเฟียแอนตาร์กติกา และชอบให้พูดด้วยสำเนียงโปแลนด์จัด ๆ” แล้วทำงานตามนั้นได้
เช่น สร้างการเตือนตอน 5 โมงเย็นผ่าน HomeAssistant ตั้งค่าเอนจินสังเคราะห์เสียงให้เป็นสำเนียงโปแลนด์ และแก้ไขประวัติการสนทนาเริ่มต้นสำหรับการรันครั้งต่อ ๆ ไป อาจใส่ชื่อคนไว้ในการสนทนาภายใน และย่อความสนใจหรือบุคลิกไปใส่ในบทแนะนำล่วงหน้าของการสนทนาครั้งถัดไป
แบบนี้จะทำให้เกิดการโต้ตอบผ่านการกระทำที่เครื่องมืออื่นทำให้ และสร้างความต่อเนื่องได้ด้วยการแก้ไขประวัติการสนทนาครั้งถัดไป
อันนี้ให้ กลิ่นอาย ELIZA แรงมากจริง ๆ