
ประชุมเสร็จหนึ่งชั่วโมง ต้องนั่งฟังเสียงย้อนหลังอีกเป็นชั่วโมงเพื่อสรุปว่าตกลงอะไรกัน ใครต้องทำอะไร ส่งเมื่อไร เครื่องมือ AI บนคลาวด์ช่วยได้ก็จริง แต่ต้องอัปโหลดไฟล์เสียงที่มีชื่อลูกค้า ตัวเลข และเรื่องภายในบริษัทขึ้นไปบนเซิร์ฟเวอร์ของคนอื่น ซึ่งหลายงานทำแบบนั้นไม่ได้
Meeting-Summarizer-Local คือโปรเจกต์ open source บน GitHub ของ Kaewkloaw ที่ทำทุกขั้นในเครื่องเรา ถอดเสียงประชุมภาษาไทยด้วย MLX Whisper แล้วให้ Ollama กับโมเดล qwen3:4b สรุปเป็นประเด็น ข้อตกลง และงานที่ต้องทำ โดยไม่อัปโหลดอะไรขึ้นคลาวด์เลย
จบบทความนี้คุณจะ:
- เข้าใจว่าเสียงประชุมกลายเป็นสรุปได้ยังไง และแต่ละส่วนทำงานที่ไหน
- เช็กว่าเครื่องใช้ได้ไหม แล้วติดตั้งด้วยสคริปต์เดียวหรือทำทีละขั้น
- สรุปประชุมไฟล์แรก และรู้ว่าไฟล์ผลลัพธ์แต่ละไฟล์คืออะไร
- ตรวจผลก่อนใช้จริง และแก้ปัญหาที่เจอบ่อยได้เอง
อ่านก่อนเริ่ม โปรเจกต์นี้ใช้ได้เฉพาะ Mac ชิป Apple Silicon (M1 ขึ้นไป) และเป็นโปรเจกต์ส่วนตัวขนาดเล็ก (ตอนที่เขียนยังไม่มีดาวบน GitHub และไม่มีไฟล์สัญญาอนุญาต) ควรลองกับไฟล์ที่ไม่สำคัญก่อน ถ้าจะนำไปใช้ในงานหรือแจกต่อ ให้ถามเจ้าของโปรเจกต์ก่อน ข้อมูลในบทความอ้างอิง README ณ วันที่ 25 ต.ค. 2026
เลขาที่นั่งอยู่ในห้องประชุม
ลองเทียบสองแบบครับ แบบแรกคือส่งเทปบันทึกเสียงไปให้บริษัทถอดเทปข้างนอก สะดวก แต่ข้อมูลออกจากออฟฟิศไปแล้ว แบบที่สองคือมีเลขานั่งอยู่ในห้อง จดและสรุปให้เสร็จโดยกระดาษไม่เคยออกนอกห้อง Meeting-Summarizer-Local คือแบบที่สอง

- รับไฟล์ MP3, M4A, WAV, MP4, MOV หรือลิงก์ YouTube (ดาวน์โหลดด้วย yt-dlp)
- แปลงเสียงด้วย ffmpeg เป็นเสียงโมโน 16kHz WAV ซึ่งเป็นรูปแบบที่ Whisper ต้องการ
- ถอดเสียงด้วย mlx-whisper ได้ข้อความพร้อมเวลา แล้วแอป หยุดรอให้คนตรวจ ไม่สรุปต่อเอง
- สรุปด้วย 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) แล้วเช็กสองอย่าง
uname -m
brew --versionarm64
Homebrew 4.x.xarm64 แปลว่าเป็นชิป Apple Silicon ถ้าขึ้น x86_64 คือ Mac รุ่น Intel ซึ่ง ใช้โปรเจกต์นี้ไม่ได้ รวมถึง Windows และ Linux ด้วย README บอกว่าส่วนอื่นอย่าง FastAPI, Ollama และ ffmpeg ใช้ข้ามระบบได้ แต่ขั้นถอดเสียงผูกกับ MLX ส่วนถ้า brew ขึ้นว่าไม่รู้จักคำสั่ง ให้ติดตั้ง Homebrew ตามหน้า brew.sh ก่อน
เรื่อง RAM README ไม่ได้ระบุ RAM ขั้นต่ำ แต่ผู้ที่ทดลองใช้เล่าว่าเครื่อง 16 GB ค่อนข้างตึงถ้าใช้โมเดลถอดเสียงตัวใหญ่พร้อมโมเดลสรุป ข่าวดีคือแอปแยกสองขั้นตอนไว้อยู่แล้ว ถอดเสียงให้เสร็จก่อน แล้วค่อยกดสรุป และปิดโปรแกรมหนักๆ ตัวอื่นระหว่างรัน
ติดตั้งด้วยสคริปต์เดียว
วิธีที่ README แนะนำคือดึงโปรเจกต์มา แล้วรันสคริปต์ที่จัดการทุกอย่างให้
git clone https://github.com/Kaewkloaw/Meeting-Summarizer-Local.git
cd Meeting-Summarizer-Local
./start_local_web.shREADME เขียนให้ cd local-meeting-web หลัง clone แต่โฟลเดอร์ที่ได้จริงชื่อ Meeting-Summarizer-Local และไฟล์ start_local_web.sh อยู่ในโฟลเดอร์นั้นเลย (เช็กจากโครงสร้างของ repo บน GitHub) ใช้คำสั่งตามกล่องด้านบนได้เลยครับ
สคริปต์นี้รันซ้ำได้เสมอ (ทำซ้ำแล้วไม่พัง) แต่ละครั้งจะ
- เช็กว่าเป็น macOS บน Apple Silicon ถ้าไม่ใช่จะหยุดพร้อมบอกเหตุผล
- ติดตั้ง
ffmpegและollamaผ่าน Homebrew ถ้ายังไม่มี - เปิด Ollama และดาวน์โหลดโมเดล
qwen3:4bถ้ายังไม่มี - สร้างหรือซ่อม
.venvแล้วติดตั้งแพ็กเกจในrequirements.txt - เปิดเบราว์เซอร์ไปที่
http://127.0.0.1:8765และเริ่มเซิร์ฟเวอร์
ครั้งแรกจะนานหน่อยเพราะต้องโหลดหลายอย่าง และการถอดเสียงครั้งแรกจะดาวน์โหลดโมเดล Whisper จาก Hugging Face มาเก็บไว้ในเครื่อง ครั้งต่อไปไม่ต้องโหลดซ้ำ ถ้าสคริปต์ขึ้นว่า permission denied ให้รัน chmod +x start_local_web.sh แล้วลองใหม่
เช็กว่าได้แล้ว: เบราว์เซอร์เปิดหน้าเว็บของแอปที่ http://127.0.0.1:8765
ติดตั้งเองทีละขั้น (ทางเลือก)
ถ้าอยากรู้ว่าสคริปต์ทำอะไรบ้าง หรืออยากคุมเอง ทำตามนี้ได้ทีละขั้น
brew install ffmpegbrew install ollama
ollama serve &
ollama pull qwen3:4bollama serve & เปิด Ollama ไว้เบื้องหลัง (เครื่องหมาย & ทำให้ไม่ค้างหน้าจอ) แล้ว ollama pull ดาวน์โหลดโมเดลมาเก็บไว้ ถ้าเพิ่งเคยใช้ Ollama อ่านพื้นฐานได้ที่ Ollama คืออะไร
python3.11 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txtsource .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
สรุปประชุมไฟล์แรก
- เปิด
http://127.0.0.1:8765ในเบราว์เซอร์บนเครื่องเดียวกัน - เลือกไฟล์ (MP3, M4A, WAV, MP4, MOV) หรือวางลิงก์ YouTube
- กด Start transcription แล้วรอ แอปไล่ขั้นตอนดาวน์โหลด (เฉพาะ YouTube) แล้วถอดเสียง
- ตรวจทรานสคริปต์ แอปจะหยุดรอตรงนี้ ดาวน์โหลดไฟล์ทรานสคริปต์มาอ่านก่อน
- กด Summarize meeting เมื่อมั่นใจว่าทรานสคริปต์ถูก แอปจะเรียก Ollama ในเครื่อง
- ดาวน์โหลดไฟล์สรุป ทั้งแบบ 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 ข้อ
- ใช้เฉพาะข้อมูลที่อยู่ในทรานสคริปต์
- ห้ามเดาชื่อ วันที่ ตัวเลข หรือข้อสรุป
- ถ้าไม่มีผู้รับผิดชอบหรือกำหนดส่ง ให้เขียนว่า
not specified - งานทุกข้อต้องมีหลักฐานที่ยกมาจากทรานสคริปต์
## 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 | ย้ายหรือเปลี่ยนชื่อโฟลเดอร์หลังสร้าง venv | rm -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 |
ollama listNAME 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 ได้เลยครับ