หน้าแรก / บทความ / AI สำหรับ Dev

สรุปประชุมด้วย AI ในเครื่อง ไม่อัปโหลดขึ้นคลาวด์ ด้วย MLX Whisper และ Ollama

ติดตั้ง Meeting-Summarizer-Local บน Mac ชิป Apple Silicon ถอดเสียงประชุมภาษาไทยด้วย MLX Whisper แล้วสรุปเป็นประเด็น ข้อตกลง และงานที่ต้องทำด้วย Ollama กับ qwen3:4b ทั้งหมดในเครื่อง พร้อมวิธีตรวจผลก่อนใช้จริง

ประชุมเสร็จหนึ่งชั่วโมง ต้องนั่งฟังเสียงย้อนหลังอีกเป็นชั่วโมงเพื่อสรุปว่าตกลงอะไรกัน ใครต้องทำอะไร ส่งเมื่อไร เครื่องมือ AI บนคลาวด์ช่วยได้ก็จริง แต่ต้องอัปโหลดไฟล์เสียงที่มีชื่อลูกค้า ตัวเลข และเรื่องภายในบริษัทขึ้นไปบนเซิร์ฟเวอร์ของคนอื่น ซึ่งหลายงานทำแบบนั้นไม่ได้

Meeting-Summarizer-Local คือโปรเจกต์ open source บน GitHub ของ Kaewkloaw ที่ทำทุกขั้นในเครื่องเรา ถอดเสียงประชุมภาษาไทยด้วย MLX Whisper แล้วให้ Ollama กับโมเดล qwen3:4b สรุปเป็นประเด็น ข้อตกลง และงานที่ต้องทำ โดยไม่อัปโหลดอะไรขึ้นคลาวด์เลย

จบบทความนี้คุณจะ:

  • เข้าใจว่าเสียงประชุมกลายเป็นสรุปได้ยังไง และแต่ละส่วนทำงานที่ไหน
  • เช็กว่าเครื่องใช้ได้ไหม แล้วติดตั้งด้วยสคริปต์เดียวหรือทำทีละขั้น
  • สรุปประชุมไฟล์แรก และรู้ว่าไฟล์ผลลัพธ์แต่ละไฟล์คืออะไร
  • ตรวจผลก่อนใช้จริง และแก้ปัญหาที่เจอบ่อยได้เอง

อ่านก่อนเริ่ม โปรเจกต์นี้ใช้ได้เฉพาะ Mac ชิป Apple Silicon (M1 ขึ้นไป) และเป็นโปรเจกต์ส่วนตัวขนาดเล็ก (ตอนที่เขียนยังไม่มีดาวบน GitHub และไม่มีไฟล์สัญญาอนุญาต) ควรลองกับไฟล์ที่ไม่สำคัญก่อน ถ้าจะนำไปใช้ในงานหรือแจกต่อ ให้ถามเจ้าของโปรเจกต์ก่อน ข้อมูลในบทความอ้างอิง README ณ วันที่ 25 ต.ค. 2026

เลขาที่นั่งอยู่ในห้องประชุม

ลองเทียบสองแบบครับ แบบแรกคือส่งเทปบันทึกเสียงไปให้บริษัทถอดเทปข้างนอก สะดวก แต่ข้อมูลออกจากออฟฟิศไปแล้ว แบบที่สองคือมีเลขานั่งอยู่ในห้อง จดและสรุปให้เสร็จโดยกระดาษไม่เคยออกนอกห้อง Meeting-Summarizer-Local คือแบบที่สอง

ขั้นตอนทั้งหมดในเครื่อง ไฟล์เสียงหรือวิดีโอ ผ่าน ffmpeg แปลงเสียง mlx-whisper ถอดเป็นข้อความ คนตรวจทรานสคริปต์ แล้ว Ollama กับ qwen3 สรุปเป็นไฟล์ ทุกขั้นอยู่ในเครื่อง ยกเว้นการโหลดคลิป YouTube
เสียง → ข้อความ (คนตรวจ) → สรุป ทุกขั้นทำในเครื่อง
  1. รับไฟล์ MP3, M4A, WAV, MP4, MOV หรือลิงก์ YouTube (ดาวน์โหลดด้วย yt-dlp)
  2. แปลงเสียงด้วย ffmpeg เป็นเสียงโมโน 16kHz WAV ซึ่งเป็นรูปแบบที่ Whisper ต้องการ
  3. ถอดเสียงด้วย mlx-whisper ได้ข้อความพร้อมเวลา แล้วแอป หยุดรอให้คนตรวจ ไม่สรุปต่อเอง
  4. สรุปด้วย Ollama + qwen3:4b เริ่มเมื่อเรากดปุ่มสรุปเท่านั้น
ส่วนใช้อะไร
ถอดเสียงmlx-whisper กับโมเดล whisper-large-v3-mlx (ตัวเต็ม ไม่ใช่รุ่น turbo)
สรุปOllama กับโมเดล qwen3:4b
หน้าเว็บFastAPI ที่ 127.0.0.1 พอร์ต 8765
ภาษาออกแบบมาสำหรับเสียงภาษาไทย

README อธิบายว่าเลือก Whisper large-v3 ตัวเต็มแทนรุ่น turbo เพราะช้ากว่าแต่แม่นกว่า ซึ่งสำคัญกับเสียงพูดภาษาไทยแบบคุยกันจริง และการถอดเสียงกับการสรุปรันเป็นโปรเซสแยกกันเสมอ เพราะ MLX ผูกการทำงานไว้กับเธรดที่เรียกใช้ครั้งแรก ข้อดีที่ได้ตามมาคือโมเดลถอดเสียงถูกปล่อยออกจากหน่วยความจำก่อนเริ่มสรุป เครื่องที่ RAM ไม่เยอะจึงไม่ต้องแบกสองโมเดลพร้อมกัน

ศัพท์ที่ต้องรู้

คำความหมาย
ทรานสคริปต์ (transcript)ข้อความที่ถอดจากเสียง
ASRระบบถอดเสียงเป็นข้อความ ในที่นี้คือ mlx-whisper
LLMโมเดลภาษาที่สรุปข้อความ ในที่นี้คือ qwen3:4b
Ollamaโปรแกรมรันโมเดลภาษาในเครื่อง เปิด API ที่ 127.0.0.1:11434
MLXไลบรารีของ Apple สำหรับรันงาน AI บนชิป Apple Silicon
127.0.0.1 / localhostที่อยู่ของเครื่องตัวเอง คนอื่นในเครือข่ายเข้าไม่ถึง
Homebrewตัวติดตั้งโปรแกรมบน Mac ใช้ลง ffmpeg และ Ollama
.venvสภาพแวดล้อม Python แยกเฉพาะโปรเจกต์ ไม่ปนกับโปรเจกต์อื่น

เช็กเครื่องก่อนเริ่ม

ต้องมีทำไม
Mac ชิป Apple Siliconการถอดเสียงพึ่ง MLX ซึ่งรันได้บนชิปนี้เท่านั้น
Homebrewใช้ติดตั้ง ffmpeg และ Ollama (ดูวิธีลงที่ brew.sh)
Python 3.11สคริปต์ติดตั้งให้ผ่าน Homebrew ถ้ายังไม่มี
พื้นที่ว่างหลาย GBสำหรับโมเดล Whisper โมเดลของ Ollama และไฟล์งาน

เปิด Terminal (กด Cmd+Space แล้วพิมพ์ Terminal) แล้วเช็กสองอย่าง

Terminal (Mac)
uname -m
brew --version
ผลลัพธ์ที่ควรเห็น (ประมาณนี้)
arm64
Homebrew 4.x.x

arm64 แปลว่าเป็นชิป Apple Silicon ถ้าขึ้น x86_64 คือ Mac รุ่น Intel ซึ่ง ใช้โปรเจกต์นี้ไม่ได้ รวมถึง Windows และ Linux ด้วย README บอกว่าส่วนอื่นอย่าง FastAPI, Ollama และ ffmpeg ใช้ข้ามระบบได้ แต่ขั้นถอดเสียงผูกกับ MLX ส่วนถ้า brew ขึ้นว่าไม่รู้จักคำสั่ง ให้ติดตั้ง Homebrew ตามหน้า brew.sh ก่อน

เรื่อง RAM README ไม่ได้ระบุ RAM ขั้นต่ำ แต่ผู้ที่ทดลองใช้เล่าว่าเครื่อง 16 GB ค่อนข้างตึงถ้าใช้โมเดลถอดเสียงตัวใหญ่พร้อมโมเดลสรุป ข่าวดีคือแอปแยกสองขั้นตอนไว้อยู่แล้ว ถอดเสียงให้เสร็จก่อน แล้วค่อยกดสรุป และปิดโปรแกรมหนักๆ ตัวอื่นระหว่างรัน

ติดตั้งด้วยสคริปต์เดียว

วิธีที่ README แนะนำคือดึงโปรเจกต์มา แล้วรันสคริปต์ที่จัดการทุกอย่างให้

Terminal (Mac)
git clone https://github.com/Kaewkloaw/Meeting-Summarizer-Local.git
cd Meeting-Summarizer-Local
./start_local_web.sh

README เขียนให้ cd local-meeting-web หลัง clone แต่โฟลเดอร์ที่ได้จริงชื่อ Meeting-Summarizer-Local และไฟล์ start_local_web.sh อยู่ในโฟลเดอร์นั้นเลย (เช็กจากโครงสร้างของ repo บน GitHub) ใช้คำสั่งตามกล่องด้านบนได้เลยครับ

สคริปต์นี้รันซ้ำได้เสมอ (ทำซ้ำแล้วไม่พัง) แต่ละครั้งจะ

  1. เช็กว่าเป็น macOS บน Apple Silicon ถ้าไม่ใช่จะหยุดพร้อมบอกเหตุผล
  2. ติดตั้ง ffmpeg และ ollama ผ่าน Homebrew ถ้ายังไม่มี
  3. เปิด Ollama และดาวน์โหลดโมเดล qwen3:4b ถ้ายังไม่มี
  4. สร้างหรือซ่อม .venv แล้วติดตั้งแพ็กเกจใน requirements.txt
  5. เปิดเบราว์เซอร์ไปที่ http://127.0.0.1:8765 และเริ่มเซิร์ฟเวอร์

ครั้งแรกจะนานหน่อยเพราะต้องโหลดหลายอย่าง และการถอดเสียงครั้งแรกจะดาวน์โหลดโมเดล Whisper จาก Hugging Face มาเก็บไว้ในเครื่อง ครั้งต่อไปไม่ต้องโหลดซ้ำ ถ้าสคริปต์ขึ้นว่า permission denied ให้รัน chmod +x start_local_web.sh แล้วลองใหม่

เช็กว่าได้แล้ว: เบราว์เซอร์เปิดหน้าเว็บของแอปที่ http://127.0.0.1:8765

ติดตั้งเองทีละขั้น (ทางเลือก)

ถ้าอยากรู้ว่าสคริปต์ทำอะไรบ้าง หรืออยากคุมเอง ทำตามนี้ได้ทีละขั้น

ขั้นที่ 1: เครื่องมือแปลงเสียง
brew install ffmpeg
ขั้นที่ 2: โมเดลภาษาในเครื่อง
brew install ollama
ollama serve &
ollama pull qwen3:4b

ollama serve & เปิด Ollama ไว้เบื้องหลัง (เครื่องหมาย & ทำให้ไม่ค้างหน้าจอ) แล้ว ollama pull ดาวน์โหลดโมเดลมาเก็บไว้ ถ้าเพิ่งเคยใช้ Ollama อ่านพื้นฐานได้ที่ Ollama คืออะไร

ขั้นที่ 3: สภาพแวดล้อม Python (ในโฟลเดอร์โปรเจกต์)
python3.11 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
ขั้นที่ 4: รันเซิร์ฟเวอร์
source .venv/bin/activate
python -m uvicorn app.main:app --host 127.0.0.1 --port 8765

--host 127.0.0.1 คือให้เซิร์ฟเวอร์รับเฉพาะการเชื่อมต่อจากเครื่องนี้ คนอื่นใน Wi-Fi เดียวกันก็เข้าไม่ได้ แล้วเปิดเบราว์เซอร์ไปที่ http://127.0.0.1:8765

สรุปประชุมไฟล์แรก

  1. เปิด http://127.0.0.1:8765 ในเบราว์เซอร์บนเครื่องเดียวกัน
  2. เลือกไฟล์ (MP3, M4A, WAV, MP4, MOV) หรือวางลิงก์ YouTube
  3. กด Start transcription แล้วรอ แอปไล่ขั้นตอนดาวน์โหลด (เฉพาะ YouTube) แล้วถอดเสียง
  4. ตรวจทรานสคริปต์ แอปจะหยุดรอตรงนี้ ดาวน์โหลดไฟล์ทรานสคริปต์มาอ่านก่อน
  5. กด Summarize meeting เมื่อมั่นใจว่าทรานสคริปต์ถูก แอปจะเรียก Ollama ในเครื่อง
  6. ดาวน์โหลดไฟล์สรุป ทั้งแบบ JSON และ Markdown

ลองกับไฟล์สั้นๆ ก่อน ครั้งแรกให้ลองกับคลิปเสียงสั้นๆ ที่ไม่ใช่ความลับ จะได้เห็นว่าเครื่องของคุณใช้เวลาเท่าไรและคุณภาพเป็นยังไง แล้วค่อยใช้กับประชุมจริง และใช้ลิงก์ YouTube เฉพาะคลิปที่คุณมีสิทธิ์ดาวน์โหลดและประมวลผล ตามที่ README ระบุไว้

เช็กว่าได้แล้ว: ได้ไฟล์ meeting_summary.md ที่มีหัวข้อสรุปครบ

ไฟล์ที่ได้ และหัวข้อในสรุป

ไฟล์ของแต่ละงานเก็บไว้ในโฟลเดอร์ jobs/<job_id>/ ภายในโฟลเดอร์โปรเจกต์

ไฟล์คืออะไร
meeting_transcript_th.txtทรานสคริปต์ข้อความล้วน
meeting_transcript_th_timestamps.txtทรานสคริปต์พร้อมเวลาของแต่ละช่วง
meeting_transcript_th_segments.jsonข้อมูลเวลาเริ่ม จบ และข้อความของแต่ละช่วง
meeting_summary.jsonผลสรุปแบบข้อมูล เอาไปใช้ต่อในโปรแกรมได้
meeting_summary.mdผลสรุปแบบอ่านง่าย

meeting_summary.md มี 6 หัวข้อ

หัวข้อความหมาย
Key pointsประเด็นสำคัญ
Decisionsข้อสรุปที่ตกลงกัน
Action itemsงานที่ต้องทำ พร้อมผู้รับผิดชอบ กำหนดส่ง และหลักฐานที่ยกมาจากทรานสคริปต์
Next stepsขั้นตอนถัดไป
Requirementsข้อกำหนดที่พูดถึงในประชุม
Items flagged for further reviewเรื่องที่ควรตรวจเพิ่ม

กติกาที่กันไม่ให้ AI เดา

โมเดลภาษามีนิสัยเติมสิ่งที่ไม่มีอยู่จริงให้ประโยคดูครบ (เรียกว่า hallucination) โปรเจกต์นี้จึงสั่งโมเดลไว้ 4 ข้อ

  1. ใช้เฉพาะข้อมูลที่อยู่ในทรานสคริปต์
  2. ห้ามเดาชื่อ วันที่ ตัวเลข หรือข้อสรุป
  3. ถ้าไม่มีผู้รับผิดชอบหรือกำหนดส่ง ให้เขียนว่า not specified
  4. งานทุกข้อต้องมีหลักฐานที่ยกมาจากทรานสคริปต์
ตัวอย่างหน้าตา Action items (ตัวอย่างประกอบ ไม่ใช่ผลจากการรันจริง)
## Action items
- Task: ส่งรายงานความคืบหน้าโปรเจกต์
  Owner: not specified
  Due date: not specified
  Evidence: "เดี๋ยวสัปดาห์หน้าเราส่งรายงานความคืบหน้ากันนะ" (00:12:34)

not specified ไม่ได้แปลว่าระบบผิด แต่แปลว่าในประชุมไม่มีใครพูดถึงเรื่องนั้น ให้เราเติมเองหลังเช็กกับคนในประชุม ส่วนหลักฐาน (evidence) พร้อมเวลา ช่วยให้กระโดดไปฟังเสียงช่วงนั้นเพื่อยืนยันได้ทันที

คำสั่งพวกนี้ลดการเดาได้มาก แต่ไม่ได้รับประกันว่า AI จะไม่ผิดเลย ตัวเลขและชื่อเฉพาะยังต้องตรวจเองเสมอ

ตรวจผลก่อนใช้จริง

README ย้ำว่าคุณภาพของสรุปขึ้นกับคุณภาพเสียงและความแม่นของการถอดเสียง และทุกสรุปต้องมีคนตรวจก่อนใช้งานจริง รายการตรวจนี้ช่วยได้

ตรวจอะไรทำยังไงทำไม
ตัวเลขฟังเสียงตรงเวลาที่หลักฐานอ้างตัวเลขเพี้ยนได้ง่าย
ชื่อคนและชื่อลูกค้าเทียบกับรายชื่อที่รู้จริงชื่อเฉพาะถอดผิดบ่อย
วันและเวลาเทียบกับปฏิทินหรือบันทึกประชุมวันเวลาเพี้ยนได้
Action itemsเปิดหลักฐานทีละข้อแต่ละข้อมีหลักฐานให้ตรวจ
ข้อที่ not specifiedถามคนในประชุมแล้วเติมเองข้อมูลยังไม่ครบ ไม่ใช่ความผิดพลาด

ผู้ที่ทดลองใช้โปรเจกต์นี้เล่าว่าจับหัวข้อและงานที่ต้องตามต่อได้ดีพอเป็นร่างแรก แต่ยังเจอตัวเลข ชื่อเฉพาะ และวันเวลาเพี้ยนบ้าง สรุปง่ายๆ คือ ให้ AI ร่าง แต่คนเป็นคนตรวจและรับผิดชอบรายงาน

เจอปัญหา ลองเช็กตามนี้

อาการสาเหตุวิธีแก้
สคริปต์หยุดว่าไม่ใช่ Apple Siliconเครื่องเป็น Intel หรือไม่ใช่ macOSโปรเจกต์นี้ใช้กับเครื่องนี้ไม่ได้
pip install ขึ้น No such file or directory ใน .venvย้ายหรือเปลี่ยนชื่อโฟลเดอร์หลังสร้าง venvrm -rf .venv แล้วสร้างใหม่ หรือรัน ./start_local_web.sh ซ่อมให้
connect to Ollama failed หรือสรุปไม่ได้Ollama ไม่ได้เปิด หรือยังไม่มีโมเดลเช็กว่า ollama serve เปิดอยู่ และ ollama list เห็น qwen3:4b
ffmpeg ฟ้องว่าไฟล์เสียหายไฟล์ต้นทางถูกตัดหรือเสียลองเปิดไฟล์ในโปรแกรมเล่นสื่อก่อน
ถอดเสียงครั้งแรกนานมากกำลังดาวน์โหลดโมเดล Whisperรอให้เสร็จ ครั้งต่อไปจะเร็วขึ้น
สคริปต์รันไม่ได้ permission deniedไฟล์ไม่มีสิทธิ์รันchmod +x start_local_web.sh
Terminal (Mac)
ollama list
ผลลัพธ์ที่ควรเห็น (ตัดมาบางส่วน)
NAME        ID              SIZE      MODIFIED
qwen3:4b    ...             ...       ...

ความเป็นส่วนตัว

  • เซิร์ฟเวอร์ฟังที่ 127.0.0.1:8765 เข้าถึงได้จากเครื่องนี้เท่านั้น
  • ไม่ใช้ ASR หรือ LLM บนคลาวด์ ถอดเสียงด้วย mlx-whisper และสรุปผ่าน Ollama ในเครื่อง
  • ไม่อัปโหลดเสียง วิดีโอ ทรานสคริปต์ หรือสรุป ไปที่ไหน การออกเน็ตอย่างเดียวคือ yt-dlp ตอนดาวน์โหลดเสียงจาก YouTube

ถ้าจะส่งผลต่อให้ AI บนคลาวด์ เช่น เอาสรุปไปให้แชต AI เกลาภาษา ให้ลบชื่อคน ชื่อลูกค้า อีเมล เบอร์โทร และตัวเลขสำคัญออกก่อนเสมอ และข้อความข้างบนคือสิ่งที่ README บอก บทความนี้ไม่ได้ตรวจโค้ดว่าทำตามนั้นจริงทุกบรรทัด ถ้าข้อมูลสำคัญมากควรอ่านโค้ดเองหรือให้ผู้เชี่ยวชาญช่วยตรวจ

สรุป

  • Meeting-Summarizer-Local ถอดเสียงประชุมภาษาไทยด้วย mlx-whisper และสรุปด้วย Ollama + qwen3:4b ทั้งหมดในเครื่อง
  • ใช้ได้เฉพาะ Mac ชิป Apple Silicon เช็กด้วย uname -m ต้องได้ arm64
  • ติดตั้งด้วย git clone แล้ว cd Meeting-Summarizer-Local และ ./start_local_web.sh จากนั้นเปิด http://127.0.0.1:8765
  • แอปหยุดให้ตรวจทรานสคริปต์ก่อนสรุปเสมอ ผลอยู่ใน jobs/<job_id>/ และ meeting_summary.md มี 6 หัวข้อ
  • AI ถูกสั่งห้ามเดาและต้องอ้างหลักฐาน แต่คนยังต้องตรวจตัวเลข ชื่อ และวันเวลาก่อนใช้จริงทุกครั้ง

พร้อมแล้วก็ไปทำ Quiz ท้ายบทด้านล่างเพื่อรับ XP ได้เลยครับ

Quiz ท้ายบท

5 ข้อ · ข้อละ 10 XP

ทดสอบความเข้าใจเรื่อง สรุปประชุมในเครื่อง ตอบถูกข้อละ 10 XP

  • 5 ข้อ
  • ไม่จับเวลา
  • เฉลยทันทีทุกข้อ