Day19 Chat with AI 用語音跟 AI 聊天
🟡 先看看程式的效果
今天的程式是一個結合語音識別、人工智慧對話及語音合成的互動系統。使用者可以通過語音進行輸入,系統會自動將語音轉換為文字,送到 AI 進行處理,然後將 AI 的回應以語音方式播放出來,創造一個自然流暢的人機對話體驗。
Today’s program is an interactive system combining speech recognition, artificial intelligence dialogue, and speech synthesis. Users can input via voice, and the system automatically converts the speech into text, which is then processed by AI. The AI’s response is played back in voice form, creating a natural and seamless human-computer interaction experience.
🟡 學習目標
語音輸入和錄音
語音辨識
文字轉語音
AI 對話 (requests)
🟡 程式碼
請先下載 “Chat with AI 用語音跟 AI 聊天.py”
請按此下載
'''
Python + AI in 21 days
https://jasonworkshop.com/python
Designed by Jason Workshop
[請勿修改以上內容]
---
預備工作:
首先,請確保已安裝以下模組
pip install sounddevice soundfile speechrecognition
pip install pyttsx3
pip install requests
pip install keyboard
'''
# 語音輸入相關模組
import sounddevice as sd
import soundfile as sf
import speech_recognition as sr
# 語音輸出模組
import pyttsx3
# AI 聊天模組
import requests
# 鍵盤輸入模組
import keyboard
# 錄製音頻並保存到指定文件
def record_audio(filename, duration, fs):
print("請說話(長度在5秒內)...")
recording = sd.rec(int(duration * fs), samplerate=fs, channels=2) # 錄音,指定時長、取樣率與聲道數
sd.wait() # 等待錄音完成
sf.write(filename, recording, fs) # 保存錄音到文件
# 從音頻文件中識別語音並返回文字
def recognize_speech_from_file(filename):
# 初始化語音識別器
recognizer = sr.Recognizer()
# 打開音頻文件
with sr.AudioFile(filename) as source:
audio = recognizer.record(source) # 讀取整個音頻文件
try:
# 使用 Google 語音識別將音頻轉為文字
text = recognizer.recognize_google(audio, language="zh-TW")
print("你說的是: " + text)
return text
except sr.UnknownValueError:
print("無法識別語音")
return None
except sr.RequestError as e:
print(f"無法請求語音識別服務; {e}")
return None
# 初始化文字轉語音引擎並設置語音屬性
def initialize_tts():
speech = pyttsx3.init() # 建立文字轉語音物件
speech.setProperty('rate', 120) # 設定語速
voices = speech.getProperty('voices') # 取得可用的語音套件
speech.setProperty('voice', voices[1].id) # 設定語音(根據需要修改索引)
return speech
# 將用戶的查詢發送到 AI 並返回回應
def send_query_to_ai(text):
# 設定 API 的 URL 和 API 金鑰
api_url = "https://api.coze.com/open_api/v2/chat"
api_key = "pat_OLt1X2sWahuecqt2vsu9OJuB5lejWLPf1yS6DWruxziMjCbMWWr8vkylD8BBU5qX" # API 金鑰
bot_id = "7321725254039224328" # Bot ID
# 設定 request 的標頭
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json",
"Accept": "*/*",
"Host": "api.coze.com",
"Connection": "keep-alive"
}
# 設定 request 的資料
data = {
"conversation_id": "123", # 這裡可以是任意唯一的對話 ID
"bot_id": bot_id,
"user": "123333333", # 替換為你的用戶 ID
"query": text, # 這裡是你想發送的訊息
"stream": False
}
# 發送 POST 請求到 Coze AI API
response = requests.post(api_url, headers=headers, json=data)
return response
# 處理 AI 的回應並進行語音輸出
def process_ai_response(response, speech):
if response.status_code == 200: # 檢查回應狀態
response_data = response.json() # 解析回應的 JSON 資料
messages = response_data.get("messages", []) # 提取 messages 列表中的 content 部分
contents = [
message.get("content", "No content found")
for message in messages
if message.get("type") == "answer" # 過濾出 type 為 answer 的訊息
]
# 將內容以乾淨的格式輸出
for content in contents:
print(content)
# 語音輸出
speech.say(content)
speech.runAndWait()
else:
print("無法從 Coze Bot 獲取回應:", response.status_code, response.text)
if __name__ == "__main__":
# 初始化語音輸出
speech = initialize_tts()
while True:
# 語音輸入
filename = "output.wav"
duration = 5 # 錄音時長(秒)
fs = 44100 # 取樣率
record_audio(filename, duration, fs)
text = str(recognize_speech_from_file(filename))
# 發送用戶的查詢到 AI 並獲取回應
response = send_query_to_ai(text)
# 處理 AI 的回應
process_ai_response(response, speech)
# 檢查是否按下 ESC 鍵退出
if keyboard.is_pressed('Esc'):
break
🟡 這個程式使用到的 AI API
這個程式使用到 Coze AI 的 API, 而 API Key 亦放了在範例程式內, 請大家只作測試這個程式用, 千萬不要告訴其他人喔! 有關 Coze AI 的 API 要如何使用大家也可以看看他們的官方說明。不過大家不要心急付錢, 明天會有永久免費的東西介紹給大家!
https://www.coze.com/docs/developer_guides/coze_api_overview?_lang=en
🟡 小小挑戰一下
大家可以嘗試進行一些修改或改良喔! 例如:
✌️預告一下, 不要太快付錢買 Token, 明天會跟大家介紹改用本地 AI 運算的方法。
😁 明天見!