ການສ້າງ Voice Chatbot ດ້ວຍ Whisper ແລະ GPT-4o API ສຳລັບນັກພັດທະນາລາວ
ໃນຍຸກທີ່ AI ກາຍເປັນສ່ວນໜຶ່ງຂອງຊີວິດປະຈຳວັນ, ການພິມຂໍ້ຄວາມ (Text) ເພື່ອຮັບບໍລິການອາດຈະບໍ່ຕອບໂຈດຄວາມສະດວກສະບາຍສະເໝີໄປ. ລອງນຶກພາບເບິ່ງບໍລິບົດໃນບ້ານເຮົາ, ລູກຄ້າຂອງທຸລະກິດ SME ຫຼາຍຄົນມັກການ “ອັດສຽງ” (Voice message) ຖາມຂໍ້ມູນຫຼາຍກວ່າການພິມ. ຫຼືລອງຈິນຕະນາການເຖິງແອັບພລິເຄຊັນແນະນຳການທ່ອງທ່ຽວ ທີ່ນັກທ່ອງທ່ຽວສາມາດຍ່າງເລາະລຽບແມ່ນ້ຳຂອງ, ຖາມຂໍ້ມູນກ່ຽວກັບວັດຊຽງທອງ ຫຼື ວິທີຂີ່ລົດໄຟລາວ-ຈີນ ດ້ວຍສຽງ ແລະ ໄດ້ຮັບຄຳຕອບເປັນສຽງແບບສົດໆ.
ໃນບົດຄວາມນີ້, ເຮົາຈະມາຮຽນຮູ້ວິທີການສ້າງ Voice Chatbot ທີ່ສາມາດກາຍເປັນ “ຜູ້ຊ່ວຍສະເໝືອນຈິງ” ແບບ Voice-to-Voice ໄດ້ເຕັມຮູບແບບ ໂດຍການໃຊ້ Python, Whisper API (ສຳລັບຟັງສຽງ) ແລະ GPT-4o API (ສຳລັບຄິດວາດພາບການສົນທະນາ).
ກຽມຄວາມພ້ອມກ່ອນເລີ່ມຕົ້ນ (Prerequisites)
ເນື່ອງຈາກນີ້ເປັນບົດຮຽນລະດັບກາງ (Intermediate), ທ່ານຄວນມີພື້ນຖານການຂຽນ Python ໜ້ອຍໜຶ່ງ ແລະ ມີສິ່ງເຫຼົ່ານີ້ກຽມໄວ້:
- Python 3.8+ ຕິດຕັ້ງໄວ້ໃນເຄື່ອງ.
- OpenAI API Key (ສາມາດສະໝັກໄດ້ທີ່ platform.openai.com).
- ໄມໂຄຣໂຟນສຳລັບອັດສຽງ ແລະ ລຳໂພງສຳລັບຟັງສຽງຕອບກັບ.
ໂຄງສ້າງການເຮັດວຽກຂອງລະບົບ (System Architecture)
ເພື່ອໃຫ້ເຫັນພາບລວມ, ລະບົບຂອງເຮົາຈະເຮັດວຽກເປັນ 4 ຂັ້ນຕອນຫຼັກ:
- Record Voice (ຮັບສຽງ): ແອັບພລິເຄຊັນຈະເປີດໄມໂຄຣໂຟນເພື່ອຮັບສຽງເວົ້າຂອງຜູ້ໃຊ້.
- Speech-to-Text (STT): ສົ່ງໄຟລ໌ສຽງໄປຫາ Whisper API ເພື່ອແປງສຽງດັ່ງກ່າວອອກມາເປັນຕົວໜັງສື.
- LLM Processing: ສົ່ງຂໍ້ຄວາມທີ່ໄດ້ໄປຫາ GPT-4o ພ້ອມກັບການຕັ້ງຄ່າ (System Prompt) ໃຫ້ AI ສວມບົດບາດເປັນຜູ້ຊ່ວຍຄົນລາວ ເພື່ອຫາຄຳຕອບທີ່ເໝາະສົມ.
- Text-to-Speech (TTS): ສົ່ງຂໍ້ຄວາມທີ່ GPT-4o ຕອບມາ ກັບໄປຫາ OpenAI TTS ເພື່ອແປງເປັນສຽງ ແລະ ຫຼິ້ນສຽງນັ້ນອອກມາ.
ລົງມືຂຽນໂຄດ (Step-by-Step Guide)
1. ການຕິດຕັ້ງ Library ທີ່ຈຳເປັນ
ເປີດ Terminal ຂອງທ່ານຂຶ້ນມາ ແລ້ວພິມຄຳສັ່ງນີ້ເພື່ອຕິດຕັ້ງແພັກເກັດທີີ່ກ່ຽວຂ້ອງ:
pip install openai SpeechRecognition pyaudio pygame
ໝາຍເຫດ: ຫາກທ່ານໃຊ້ Mac, ອາດຈະຕ້ອງຕິດຕັ້ງ portaudio ກ່ອນ (ຜ່ານ brew install portaudio) ຈຶ່ງຈະລົງ pyaudio ໄດ້.
2. ຂຽນໂຄດລວມ: ການສ້າງ Voice Chatbot Pipeline
ເຮົາມາລວມທັງ 4 ຂັ້ນຕອນເຂົ້າໃນໄຟລ໌ Python ດຽວ (ຕົວຢ່າງ: chatbot.py). ໂຄດນີ້ຈະຖືກອອກແບບມາໃຫ້ວົນລູບເຮັດວຽກຈົນກວ່າເຮົາຈະສັ່ງຢຸດ.
import os
import speech_recognition as sr
import pygame
from openai import OpenAI
# 1. ກຽມ OpenAI Client ໂດຍໃຊ້ API Key ຂອງທ່ານ
# ຢ່າລືມຕັ້ງຄ່າ Environment Variable: export OPENAI_API_KEY="sk-..."
client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
# ຟັງຊັນສຳລັບຫຼິ້ນສຽງ
def play_audio(filename):
pygame.mixer.init()
pygame.mixer.music.load(filename)
pygame.mixer.music.play()
while pygame.mixer.music.get_busy():
pygame.time.Clock().tick(10)
pygame.mixer.quit()
def chat_pipeline():
recognizer = sr.Recognizer()
with sr.Microphone() as source:
print("\n[Sabaidee Bot]: ກຳລັງປັບສຽງລົບກວນ... ກະລຸນາລໍຖ້າ.")
recognizer.adjust_for_ambient_noise(source, duration=1)
print("[Sabaidee Bot]: ພ້ອມແລ້ວ! ເວົ້າຫຍັງຈັກຢ່າງເບິ່ງ...")
# ຮັບສຽງຈາກຜູ້ໃຊ້
audio = recognizer.listen(source)
input_filename = "user_input.wav"
with open(input_filename, "wb") as f:
f.write(audio.get_wav_data())
try:
# ---------------------------------------------------------
# ຂັ້ນຕອນທີ 1: ປ່ຽນສຽງເປັນຂໍ້ຄວາມດ້ວຍ Whisper
# ---------------------------------------------------------
print(">> ກຳລັງແປງສຽງເປັນຂໍ້ຄວາມ (Whisper)...")
with open(input_filename, "rb") as audio_file:
transcript = client.audio.transcriptions.create(
model="whisper-1",
file=audio_file
)
user_text = transcript.text
print(f"ທ່ານເວົ້າວ່າ: '{user_text}'")
# ---------------------------------------------------------
# ຂັ້ນຕອນທີ 2: ສະໝອງກົນດ້ວຍ GPT-4o
# ---------------------------------------------------------
print(">> ກຳລັງຄິດຄຳຕອບ (GPT-4o)...")
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{
"role": "system",
"content": "ທ່ານຄື 'ສະບາຍດີບອດ' (Sabaidee Bot) ເຊິ່ງເປັນ AI ຜູ້ຊ່ວຍນັກທ່ອງທ່ຽວໃນປະເທດລາວ. ທ່ານສາມາດແນະນຳເລື່ອງຕ່າງໆ ເຊັ່ນ: ສະພາບຈະລາຈອນໃນວຽງຈັນ, ຮ້ານເຝີແຊບໆ ຫຼື ວິທີຈອງປີ້ລົດໄຟ ລາວ-ຈີນ. ໃຫ້ຕອບມາແບບສັ້ນ, ເຂົ້າໃຈງ່າຍ, ແລະ ເປັນມິດ."
},
{"role": "user", "content": user_text}
]
)
bot_reply = response.choices[0].message.content
print(f"Sabaidee Bot: '{bot_reply}'")
# ---------------------------------------------------------
# ຂັ້ນຕອນທີ 3: ປ່ຽນຂໍ້ຄວາມເປັນສຽງດ້ວຍ OpenAI TTS
# ---------------------------------------------------------
print(">> ກຳລັງສ້າງສຽງຕອບກັບ (TTS)...")
output_filename = "bot_reply.mp3"
tts_response = client.audio.speech.create(
model="tts-1",
voice="alloy", # ສາມາດປ່ຽນເປັນ 'echo', 'fable', 'onyx', 'nova' ໄດ້
input=bot_reply
)
tts_response.stream_to_file(output_filename)
# ຫຼິ້ນສຽງ
play_audio(output_filename)
except Exception as e:
print(f"ເກີດຂໍ້ຜິດພາດຂຶ້ນ: {e}")
# ສັ່ງໃຫ້ລະບົບເຮັດວຽກ
if __name__ == "__main__":
while True:
chat_pipeline()
cont = input("\nຕ້ອງການສົນທະນາຕໍ່ບໍ່? (y/n): ")
if cont.lower() != 'y':
print("ຂອບໃຈທີ່ໃຊ້ບໍລິການ Sabaidee Bot. ລາກ່ອນ!")
break
ເຮັດແນວໃດຈຶ່ງຈະເຂົ້າໃຈສຳນຽງລາວໄດ້ດີຂຶ້ນ?
ເຖິງແມ່ນວ່າ Whisper ຈະຖືກຝຶກມາດ້ວຍຂໍ້ມູນສຽງທົ່ວໂລກ, ແຕ່ບາງຄັ້ງອາດຈະຍັງແປສຳນຽງລາວຜິດພ້ຽນໄປແດ່ໃນຄຳສັບສະເພາະ (ເຊັ່ນ: “ເຂົ້າປຽກ”, “ທາດຫຼວງ”). ເທັກນິກທີ່ນັກພັດທະນາສາມາດໃຊ້ໄດ້ຄືການຊ່ວຍພາສາອັງກິດສະກົດຄຳ (Romanization) ໃນ System Prompt ເພື່ອໃຫ້ GPT-4o ເຂົ້າໃຈບໍລິບົດວ່າຜູ້ໃຊ້ອາດຈະເວົ້າເຖິງ “Khao Piak” ຫຼື “That Luang” ໂດຍພິຈາລະນາຈາກສຽງທີ່ໃກ້ຄຽງທີ່ສຸດ.
ຈຸດສຳຄັນທີ່ຄວນຈື່ (Key Takeaways)
- ຄວາມໄວເປັນສິ່ງສຳຄັນ (Low Latency): ການໃຊ້ GPT-4o ຈະຊ່ວຍໃຫ້ລົດໄລຍະເວລາລໍຖ້າ (Latency) ໄດ້ດີຫຼາຍເມື່ອທຽບກັບໂມເດວຮຸ່ນເກົ່າ ແຕ່ກໍຄວນສັ່ງໃຫ້ທຳການຕອບດ້ວຍປະໂຫຍກສັ້ນໆ (Concise responses) ເພື່ອໃຫ້ຜູ້ໃຊ້ຮູ້ສຶກເຖິງຄວາມລ່ຽນໄຫຼ.
- System Prompt ກຳນົດບຸກຄະລິກ: ການຕັ້ງຄ່າ Prompt ທີ່ລະບຸບໍລິບົດຂອງລາວຢ່າງຊັດເຈນ ຈະຊ່ວຍໃຫ້ AI ໃຫ້ຄຳປຶກສາທີ່ແທດເໝາະກັບສະຖານະການຈິງຂອງບ້ານເຮົາໄດ້ຫຼາຍຂຶ້ນ.
- OpenAI TTS ໜ້າຟັງກວ່າທີ່ຄິດ: ດ້ວຍໂມເດວ
tts-1, ສຽງທີ່ໄດ້ຮັບຈະອາດມີຄວາມເປັນທຳມະຊາດສູງຫຼາຍ ຈົນແຍກແທບບໍ່ອອກວ່າເປັນສຽງຂອງຫຸ່ນຍົນ, ຊ່ວຍສ້າງປະສົບການທີ່ດີໃຫ້ກັບລູກຄ້າ.
ບົດສະຫຼຸບ
ການປະກອບແອັບພລິເຄຊັນ Voice-to-Voice ດ້ວຍ Python ຈຳນວນບໍ່ເຖິງ 100 ແຖວນີ້ ສະແດງໃຫ້ເຫັນເຖິງພະລັງຂອງ AI ທີ່ນັກພັດທະນາລາວສາມາດເຂົ້າເຖິງ ແລະ ປະຍຸກໃຊ້ໄດ້ທັນທີ. ທ່ານສາມາດນຳເອົາໂຄດພື້ນຖານໂຕນີ້ ໄປພັດທະນາຕໍ່ຍອດເປັນ ລະບົບຮັບລູກຄ້າສຳລັບຮ້ານຂາຍເຄື່ອງໃນ Vientiane Center, ແອັບນຳທ່ຽວມືຖື ຫຼື ເປັນລະບົບຈອງໂຮງແຮມດ້ວຍສຽງກໍສາມາດເຮັດໄດ້ຢ່າງລຽບງ່າຍ ແລະ ມີປະສິດທິພາບ. ລອງນຳໄປດັດແປງ ແລະ ສ້າງສັນຜົນງານທີ່ເປັນປະໂຫຍດແກ່ສັງຄົມລາວໃນຍຸກດິຈິຕອນເບິ່ງເດີ!