Doctor AI

Dr. Savath Saypadith

240 ບົດຄວາມ

ການສ້າງ Voice Chatbot ດ້ວຍ Whisper ແລະ GPT-4o API ສຳລັບນັກພັດທະນາລາວ

ໂພສເມື່ອ # Python # OpenAI API # Voice Chatbot # NLP

ໃນຍຸກທີ່ AI ກາຍເປັນສ່ວນໜຶ່ງຂອງຊີວິດປະຈຳວັນ, ການພິມຂໍ້ຄວາມ (Text) ເພື່ອຮັບບໍລິການອາດຈະບໍ່ຕອບໂຈດຄວາມສະດວກສະບາຍສະເໝີໄປ. ລອງນຶກພາບເບິ່ງບໍລິບົດໃນບ້ານເຮົາ, ລູກຄ້າຂອງທຸລະກິດ SME ຫຼາຍຄົນມັກການ “ອັດສຽງ” (Voice message) ຖາມຂໍ້ມູນຫຼາຍກວ່າການພິມ. ຫຼືລອງຈິນຕະນາການເຖິງແອັບພລິເຄຊັນແນະນຳການທ່ອງທ່ຽວ ທີ່ນັກທ່ອງທ່ຽວສາມາດຍ່າງເລາະລຽບແມ່ນ້ຳຂອງ, ຖາມຂໍ້ມູນກ່ຽວກັບວັດຊຽງທອງ ຫຼື ວິທີຂີ່ລົດໄຟລາວ-ຈີນ ດ້ວຍສຽງ ແລະ ໄດ້ຮັບຄຳຕອບເປັນສຽງແບບສົດໆ.

ໃນບົດຄວາມນີ້, ເຮົາຈະມາຮຽນຮູ້ວິທີການສ້າງ Voice Chatbot ທີ່ສາມາດກາຍເປັນ “ຜູ້ຊ່ວຍສະເໝືອນຈິງ” ແບບ Voice-to-Voice ໄດ້ເຕັມຮູບແບບ ໂດຍການໃຊ້ Python, Whisper API (ສຳລັບຟັງສຽງ) ແລະ GPT-4o API (ສຳລັບຄິດວາດພາບການສົນທະນາ).

ກຽມຄວາມພ້ອມກ່ອນເລີ່ມຕົ້ນ (Prerequisites)

ເນື່ອງຈາກນີ້ເປັນບົດຮຽນລະດັບກາງ (Intermediate), ທ່ານຄວນມີພື້ນຖານການຂຽນ Python ໜ້ອຍໜຶ່ງ ແລະ ມີສິ່ງເຫຼົ່ານີ້ກຽມໄວ້:

ໂຄງສ້າງການເຮັດວຽກຂອງລະບົບ (System Architecture)

ເພື່ອໃຫ້ເຫັນພາບລວມ, ລະບົບຂອງເຮົາຈະເຮັດວຽກເປັນ 4 ຂັ້ນຕອນຫຼັກ:

  1. Record Voice (ຮັບສຽງ): ແອັບພລິເຄຊັນຈະເປີດໄມໂຄຣໂຟນເພື່ອຮັບສຽງເວົ້າຂອງຜູ້ໃຊ້.
  2. Speech-to-Text (STT): ສົ່ງໄຟລ໌ສຽງໄປຫາ Whisper API ເພື່ອແປງສຽງດັ່ງກ່າວອອກມາເປັນຕົວໜັງສື.
  3. LLM Processing: ສົ່ງຂໍ້ຄວາມທີ່ໄດ້ໄປຫາ GPT-4o ພ້ອມກັບການຕັ້ງຄ່າ (System Prompt) ໃຫ້ AI ສວມບົດບາດເປັນຜູ້ຊ່ວຍຄົນລາວ ເພື່ອຫາຄຳຕອບທີ່ເໝາະສົມ.
  4. 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)

ບົດສະຫຼຸບ

ການປະກອບແອັບພລິເຄຊັນ Voice-to-Voice ດ້ວຍ Python ຈຳນວນບໍ່ເຖິງ 100 ແຖວນີ້ ສະແດງໃຫ້ເຫັນເຖິງພະລັງຂອງ AI ທີ່ນັກພັດທະນາລາວສາມາດເຂົ້າເຖິງ ແລະ ປະຍຸກໃຊ້ໄດ້ທັນທີ. ທ່ານສາມາດນຳເອົາໂຄດພື້ນຖານໂຕນີ້ ໄປພັດທະນາຕໍ່ຍອດເປັນ ລະບົບຮັບລູກຄ້າສຳລັບຮ້ານຂາຍເຄື່ອງໃນ Vientiane Center, ແອັບນຳທ່ຽວມືຖື ຫຼື ເປັນລະບົບຈອງໂຮງແຮມດ້ວຍສຽງກໍສາມາດເຮັດໄດ້ຢ່າງລຽບງ່າຍ ແລະ ມີປະສິດທິພາບ. ລອງນຳໄປດັດແປງ ແລະ ສ້າງສັນຜົນງານທີ່ເປັນປະໂຫຍດແກ່ສັງຄົມລາວໃນຍຸກດິຈິຕອນເບິ່ງເດີ!