[具身智能-470]:语音识别负责解决声音转文字;大语言模型负责对文字的处理和解读;语言合成负责文字转换成音频,进步转换成声音。它们共同解决了机器的自然语言交流。Python代码示例。
·
我们可以把这个过程看作一个完整的“听、说、读、写”循环,而你提到的这三项技术,恰好对应了其中最关键的三个环节。
👂 语音识别 (ASR):机器的“耳朵”
语音识别,也叫自动语音识别(ASR),它的核心任务就是将人类的语音信号转换成对应的文本。这就像机器的“耳朵”,负责“听”懂我们说的话,并将其转化为机器可以处理的文字形式。
🧠 大语言模型 (LLM):机器的“大脑”
大语言模型(LLM)是这个循环中的“大脑”。它接收由语音识别转换来的文本,利用其在海量数据中学习到的语言规律和知识,进行深度的理解、推理和分析。无论是回答问题、总结信息还是生成创意文本,都是由它来完成的。
🗣️ 语音合成 (TTS):机器的“嘴巴”
语音合成,也叫文本转语音(TTS),它的作用正好与语音识别相反,负责将大语言模型生成的文本回复,转换成流畅、自然的语音音频。这就像是机器的“嘴巴”,让它能够“说”出思考后的结果,完成与人的最终交流。
这三者无缝协作,共同构成了我们与机器进行自然语言对话的基础。
值得一提的是,这个技术闭环正在不断进化,呈现出一些激动人心的新趋势:
- 端到端模型:为了追求更快的响应速度和更自然的交互体验,现在的技术趋势是将语音识别、大语言模型和语音合成整合成一个统一的端到端模型。这使得机器可以直接接收语音输入并输出语音,大大缩短了处理延迟。
- 多模态融合:未来的交互将不再局限于语言。机器正朝着能同时理解视觉、听觉、手势等多种信息的“多模态智能交互”方向发展,让交流变得更像人与人之间的沟通。
- 概念级理解:前沿研究正在探索让AI像人类一样,从具体经验中自主形成抽象“概念”,并基于概念进行思考和交流。这有望让机器的“理解”超越符号层面的概率计算,迈向更深层次的认知。
💻 Python 代码示例
下面是一个完整的 Python 代码示例,它将这三个环节串联起来,实现一个简单的“语音对话”功能。
功能流程:
- 听 (ASR): 程序调用麦克风,录制你说的一句话。
- 想 (LLM): 程序将你说的话(文本)发送给本地的大语言模型(通过 Ollama),并请求一个简短的回答。
- 说 (TTS): 程序将大语言模型的回答(文本)转换成语音,并通过扬声器播放出来。
环境准备
在运行代码前,你需要安装以下 Python 库:
# 语音识别
pip install SpeechRecognition
# 语音合成
pip install pyttsx3
# 与大语言模型交互 (需要先在本地安装并运行 Ollama)
pip install ollama
完整代码
python
import speech_recognition as sr
import pyttsx3
import ollama
class VoiceAssistant:
def __init__(self):
# 初始化语音识别器
self.recognizer = sr.Recognizer()
# 初始化语音合成引擎
self.tts_engine = pyttsx3.init()
self.tts_engine.setProperty('rate', 150) # 设置语速
self.tts_engine.setProperty('volume', 0.9) # 设置音量
def listen(self):
"""机器的耳朵:通过麦克风听取语音并转换为文本"""
print("👂 正在聆听,请说话...")
try:
with sr.Microphone() as source:
# 调整环境噪音,提高识别准确率
self.recognizer.adjust_for_ambient_noise(source, duration=1)
audio = self.recognizer.listen(source, timeout=5)
# 使用 Google 的语音识别 API (需要网络)
text = self.recognizer.recognize_google(audio, language='zh-CN')
print(f"📝 识别结果: {text}")
return text
except sr.WaitTimeoutError:
print("⏰ 聆听超时,请重试。")
return None
except sr.UnknownValueError:
print("❌ 无法识别您说的内容。")
return None
except sr.RequestError as e:
print(f"❌ 语音识别服务请求失败: {e}")
return None
def think(self, user_input):
"""机器的大脑:调用本地大语言模型处理文本"""
print("🧠 正在思考...")
try:
# 调用本地 Ollama 服务中的 llama3.2 模型
response = ollama.chat(
model='llama3.2:latest',
messages=[
{
'role': 'user',
'content': f"请简短回答:{user_input}",
},
],
)
reply = response['message']['content']
print(f"💬 模型回复: {reply}")
return reply
except Exception as e:
print(f"❌ 大模型调用失败: {e}")
return "抱歉,我的大脑暂时出了点问题。"
def speak(self, text):
"""机器的嘴巴:将文本转换为语音并播放"""
if not text:
return
print(f"🗣️ 正在播放回复: {text}")
self.tts_engine.say(text)
self.tts_engine.runAndWait()
def run_conversation(self):
"""运行一次完整的对话循环"""
# 1. 听
user_input = self.listen()
if user_input:
# 2. 想
ai_reply = self.think(user_input)
# 3. 说
self.speak(ai_reply)
# --- 主程序入口 ---
if __name__ == "__main__":
print("=== 简易语音助手启动 ===")
assistant = VoiceAssistant()
# 运行一次对话
assistant.run_conversation()
代码说明
VoiceAssistant类: 将语音识别、大模型调用和语音合成的功能封装在一个类中,结构更清晰。listen()方法: 使用speech_recognition库从麦克风获取音频,并通过 Google 的在线 API 将其识别为中文文本。think()方法: 使用ollama库与本地运行的 Ollama 服务通信,将用户输入的文本发送给llama3.2模型,并获取其生成的回复。speak()方法: 使用pyttsx3库,这是一个离线的语音合成引擎,它调用操作系统自带的 TTS 功能将文本回复朗读出来。run_conversation()方法: 将以上三个步骤按顺序串联,完成一次完整的“听-想-说”循环。
更多推荐
所有评论(0)