
Qwen3-1.7B实战LangChain调用语音助手集成开箱即用1. 快速上手从零部署到第一个对话你是不是也想快速体验一下大语言模型的魅力但又觉得部署太麻烦今天我就带你用最简单的方式把阿里巴巴最新开源的Qwen3-1.7B模型跑起来还能让它变成一个能听会说的语音助手。整个过程就像搭积木一样简单跟着我做10分钟就能搞定。Qwen3-1.7B是阿里巴巴在2025年4月发布的新一代轻量级大模型别看它只有17亿参数但对话能力相当不错而且对硬件要求不高普通GPU甚至CPU都能跑。最关键的是它完全开源免费你可以随便用。我们先从最基础的开始怎么快速把这个模型跑起来然后用LangChain调用它。LangChain你可能听说过它是现在最流行的大模型应用开发框架能让你用统一的方式调用各种模型不用每个模型都学一套新的API。1.1 一键启动不用折腾环境配置最省事的方法就是用CSDN星图镜像他们已经把环境都配好了你直接点一下就能用。打开CSDN星图镜像广场在搜索框里输入“Qwen3”找到包含Qwen3-1.7B的镜像。选一个GPU版本的镜像这样跑得快点击“一键部署”。等个一两分钟部署完成后你会看到一个Web IDE界面里面已经打开了Jupyter Notebook。这就是你的开发环境所有需要的软件、库、模型都已经装好了不用你再自己折腾。怎么确认模型服务已经启动了呢很简单在Jupyter里新建一个代码单元格运行下面这行命令!netstat -tulnp | grep 8000如果看到8000端口被占用说明模型服务已经在运行了。如果没有也别急镜像文档里通常有启动命令执行一下就行。1.2 第一次对话让模型认识你现在我们来写第一段代码跟模型打个招呼。在Jupyter里新建一个Python文件或者直接在Notebook里写from langchain_openai import ChatOpenAI # 创建聊天模型实例 chat_model ChatOpenAI( modelQwen3-1.7B, # 指定使用Qwen3-1.7B模型 temperature0.5, # 控制回答的随机性0-1之间越大越有创意 base_urlhttps://你的容器地址-8000.web.gpu.csdn.net/v1, # 这里要换成你的实际地址 api_keyEMPTY, # 本地服务不需要真正的API Key extra_body{ enable_thinking: True, # 开启思维链能看到模型思考过程 return_reasoning: True, # 返回推理过程 }, streamingTrue, # 开启流式输出回答会一个字一个字出来 ) # 问个简单问题 response chat_model.invoke(你是谁) print(模型回答, response.content)这里有几个关键点需要注意base_url这个地址是你的容器专属的在Jupyter页面的地址栏里能看到。格式一般是https://gpu-pod一串字符-8000.web.gpu.csdn.net/v1把“一串字符”换成你实际的容器ID。temperature这个参数控制回答的创造性。0.1就是很保守的回答基本每次问都一样0.9就是天马行空每次回答都可能不一样。0.5是个不错的平衡点。streamingTrue这个设置让回答一个字一个字地显示出来就像真人在打字一样体验更好。运行这段代码你会看到类似这样的回答我是通义千问3-1.7B模型由阿里巴巴研发。我是一个人工智能语言模型能够回答问题、协助写作、提供建议等。有什么可以帮您的吗恭喜你你已经成功调用了Qwen3-1.7B模型。是不是比想象中简单2. 进阶玩法让模型记住对话历史单次问答没什么意思真正的语音助手需要能记住之前的对话。比如你问“今天天气怎么样”它回答“晴天25度”然后你接着问“那适合出门吗”它应该知道你在问天气相关的事情。LangChain提供了很方便的记忆功能我们稍微改造一下代码from langchain.memory import ConversationBufferMemory from langchain.chains import LLMChain from langchain.prompts import PromptTemplate # 定义对话模板 template 你是一个友好的语音助手请根据对话历史来回答用户的问题。 之前的对话 {history} 用户{input} 助手 prompt PromptTemplate( input_variables[history, input], templatetemplate ) # 创建记忆模块能记住最近的10轮对话 memory ConversationBufferMemory( memory_keyhistory, max_token_limit1000 # 限制记忆长度避免太长 ) # 创建对话链 conversation LLMChain( llmchat_model, promptprompt, memorymemory, verboseFalse # 设为True可以看到详细的执行过程 ) # 测试多轮对话 questions [ 我叫小明今年25岁, 我是什么星座的, 我的职业是程序员你觉得这个职业怎么样 ] for question in questions: response conversation.invoke({input: question}) print(f用户{question}) print(f助手{response[text]}) print(- * 50)运行这段代码你会发现模型能记住你之前说的话。当你问“我是什么星座的”时它虽然不知道你的星座因为你没告诉它但它知道你在问关于“你”的信息。当你提到职业时它能结合之前知道的信息来回答。这个记忆功能是语音助手的核心。在实际应用中你可以根据需求调整记忆的长度比如只记住最近5轮对话或者记住更长时间的关键信息。3. 语音识别让模型能听懂你说话现在模型能看懂文字了但我们想要的是语音助手得让它能听懂人说话。这就需要语音识别ASR模块。我推荐用Whisper这是OpenAI开源的语音识别模型识别准确率高支持中文而且用起来特别简单。3.1 安装和配置Whisper在Jupyter里新建一个单元格安装Whisper!pip install openai-whisper如果你想要更快的识别速度可以安装GPU版本的PyTorch!pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118Whisper有多个版本从tiny到large识别准确率依次提高但需要的计算资源也越多。对于语音助手这种实时应用我建议用base或small版本在准确率和速度之间取得平衡。3.2 实现语音转文字我们先写一个简单的函数把语音文件转换成文字import whisper import numpy as np class SpeechRecognizer: def __init__(self, model_sizebase): 初始化语音识别器 Args: model_size: 模型大小可选 tiny, base, small, medium, large print(f正在加载Whisper-{model_size}模型...) self.model whisper.load_model(model_size) print(模型加载完成) def transcribe_audio(self, audio_path): 将音频文件转换为文字 Args: audio_path: 音频文件路径 Returns: 识别出的文字 # 执行语音识别 result self.model.transcribe( audio_path, languagezh, # 指定中文 fp16False # 如果没GPU就设为False ) return result[text].strip() # 使用示例 if __name__ __main__: # 创建识别器 recognizer SpeechRecognizer(model_sizebase) # 假设你有一个录音文件 # 如果没有可以用手机录一段传到电脑上 text recognizer.transcribe_audio(你的录音文件.wav) print(f识别结果{text})这个代码做了几件事加载Whisper模型第一次运行会自动下载指定识别语言为中文返回识别出的文字你可以用手机录一段话比如“今天天气怎么样”保存为wav格式然后用这个代码试试识别效果。3.3 实时录音识别光识别文件还不够真正的语音助手需要能实时录音。我们再加个录音功能import pyaudio import wave import threading import time class AudioRecorder: def __init__(self, rate16000, chunk1024, channels1): 初始化录音器 Args: rate: 采样率16000足够语音识别 chunk: 每次读取的音频块大小 channels: 声道数1是单声道 self.rate rate self.chunk chunk self.channels channels self.is_recording False self.frames [] def start_recording(self, filenamerecording.wav): 开始录音 self.is_recording True self.frames [] self.filename filename # 创建音频流 self.p pyaudio.PyAudio() self.stream self.p.open( formatpyaudio.paInt16, channelsself.channels, rateself.rate, inputTrue, frames_per_bufferself.chunk ) print(开始录音...按CtrlC停止) # 在新线程中录音 self.recording_thread threading.Thread(targetself._record) self.recording_thread.start() def _record(self): 录音线程 while self.is_recording: try: data self.stream.read(self.chunk, exception_on_overflowFalse) self.frames.append(data) except: break def stop_recording(self): 停止录音并保存文件 self.is_recording False time.sleep(0.1) # 等待最后一点数据 if hasattr(self, stream): self.stream.stop_stream() self.stream.close() if hasattr(self, p): self.p.terminate() # 保存为wav文件 if self.frames: wf wave.open(self.filename, wb) wf.setnchannels(self.channels) wf.setsampwidth(self.p.get_sample_size(pyaudio.paInt16)) wf.setframerate(self.rate) wf.writeframes(b.join(self.frames)) wf.close() print(f录音已保存到{self.filename}) return self.filename # 使用示例录音5秒 recorder AudioRecorder() recorder.start_recording(test.wav) time.sleep(5) # 录音5秒 audio_file recorder.stop_recording() # 识别录音 recognizer SpeechRecognizer() text recognizer.transcribe_audio(audio_file) print(f你说的是{text})现在你有了完整的语音识别流程录音 → 保存 → 识别。在实际的语音助手中你可以设置一个按钮按下开始录音松开停止录音并识别。4. 语音合成让模型会说话模型能听懂话了也能生成文字回答了现在还差最后一步把文字回答变成语音。这就是文本转语音TTS模块。我推荐用VITS这是一个效果很好的中文TTS模型声音自然而且开源免费。4.1 安装VITSVITS的安装稍微复杂一点但跟着步骤来也不难# 克隆VITS仓库 !git clone https://github.com/jaywalnut310/vits.git cd vits # 安装依赖 !pip install -r requirements.txt # 下载中文预训练模型 # 这里需要下载模型文件你可以从Hugging Face或官方仓库找 # 假设模型文件叫 chinese_vits.pth如果下载模型遇到困难也可以用更简单的方案Coqui TTS。它安装简单效果也不错!pip install TTS4.2 简单的TTS实现我们先用一个简单的TTS方案确保能跑起来from TTS.api import TTS import soundfile as sf class TextToSpeech: def __init__(self, model_nametts_models/zh-CN/baker/tacotron2-DDC-GST): 初始化TTS模型 Args: model_name: 模型名称这里用中文Tacotron2 print(正在加载TTS模型...) self.tts TTS(model_name) print(TTS模型加载完成) def synthesize(self, text, output_pathoutput.wav): 将文字合成为语音 Args: text: 要合成的文字 output_path: 输出文件路径 # 合成语音 self.tts.tts_to_file( texttext, file_pathoutput_path ) print(f语音已保存到{output_path}) return output_path def play_audio(self, audio_path): 播放音频文件 import IPython.display as ipd return ipd.Audio(audio_path) # 使用示例 tts TextToSpeech() # 合成语音 text 你好我是你的语音助手很高兴为你服务。 audio_file tts.synthesize(text) # 播放在Jupyter中 tts.play_audio(audio_file)这个代码用了Coqui TTS库它内置了多个预训练模型包括中文的。第一次运行时会自动下载模型可能需要几分钟时间。合成出来的语音质量可能不是最好的但足够清晰可懂。如果你想要更好的音质可以尝试其他模型或者用VITS。4.3 更高质量的VITS实现如果你想要更好的音质可以试试VITS。这里是一个简化版的VITS代码import torch import numpy as np import soundfile as sf class VITSTTS: def __init__(self, model_pathchinese_vits.pth, config_pathconfigs/base.json): 初始化VITS模型 注意这需要你先下载好模型文件和配置文件 # 这里简化了VITS的加载过程 # 实际使用时需要根据VITS的官方代码来写 print(VITS模型加载中...) # 实际加载代码... def synthesize(self, text, output_pathoutput_vits.wav): 用VITS合成语音 # 实际合成代码... pass # 由于VITS代码较复杂这里只给出框架 # 具体实现需要参考VITS官方仓库VITS的音质更好但配置也更复杂。对于刚开始的语音助手项目我建议先用Coqui TTS等基本功能都跑通了再考虑升级到VITS。5. 完整整合打造你的语音助手现在我们把所有模块组合起来做一个完整的语音助手。5.1 主程序框架import time from typing import Optional class VoiceAssistant: def __init__(self): 初始化语音助手 print(正在初始化语音助手...) # 初始化各个模块 self.recognizer SpeechRecognizer(model_sizebase) self.tts TextToSpeech() # 初始化对话模型用之前写的代码 self.conversation self._init_conversation_model() self.is_running False print(语音助手初始化完成) def _init_conversation_model(self): 初始化对话模型 from langchain_openai import ChatOpenAI from langchain.memory import ConversationBufferMemory from langchain.chains import LLMChain from langchain.prompts import PromptTemplate # 创建聊天模型 chat_model ChatOpenAI( modelQwen3-1.7B, temperature0.7, base_url你的base_url, api_keyEMPTY, streamingFalse, # 先关闭流式简化处理 ) # 对话模板 template 你是一个智能语音助手名字叫小Q。请用友好、自然的语气回答用户的问题。 对话历史 {history} 用户{input} 小Q prompt PromptTemplate( input_variables[history, input], templatetemplate ) # 记忆模块 memory ConversationBufferMemory( memory_keyhistory, max_token_limit800 ) # 创建对话链 conversation LLMChain( llmchat_model, promptprompt, memorymemory, verboseFalse ) return conversation def process_voice_input(self, audio_file: str) - str: 处理语音输入识别 → 理解 → 回复 → 语音输出 Args: audio_file: 录音文件路径 Returns: 助手的文字回复 print(正在处理语音输入...) # 1. 语音识别 print(识别语音中...) user_text self.recognizer.transcribe_audio(audio_file) print(f识别结果{user_text}) if not user_text or len(user_text.strip()) 2: return 抱歉我没有听清楚请再说一遍。 # 2. 大模型理解与回复 print(生成回复中...) response self.conversation.invoke({input: user_text}) ai_text response[text] print(f助手回复{ai_text}) # 3. 语音合成 print(合成语音中...) output_file freply_{int(time.time())}.wav self.tts.synthesize(ai_text, output_file) # 4. 播放回复 print(播放回复...) self._play_audio(output_file) return ai_text def _play_audio(self, audio_path: str): 播放音频文件 try: import IPython.display as ipd return ipd.Audio(audio_path, autoplayTrue) except: # 如果在非Jupyter环境可以用其他方式播放 print(f音频文件已生成{audio_path}) print(请在文件管理器中打开播放) def run_interactive(self): 交互式运行录音 → 处理 → 播放 print(\n *50) print(语音助手已启动) print(输入 quit 退出程序) print(*50) recorder AudioRecorder() while True: command input(\n按回车开始录音输入 quit 退出) if command.lower() quit: print(再见) break # 开始录音 print(开始录音说话吧...) recorder.start_recording(user_input.wav) # 录音5秒 time.sleep(5) # 停止录音 audio_file recorder.stop_recording() # 处理语音 self.process_voice_input(audio_file) # 运行助手 if __name__ __main__: assistant VoiceAssistant() assistant.run_interactive()这个语音助手做了以下几件事初始化所有组件语音识别、TTS、大模型对话录音处理录5秒音保存为文件语音识别用Whisper把录音转成文字智能回复用Qwen3-1.7B生成回复语音合成把回复文字变成语音播放回复播放生成的语音运行这个程序你就可以跟语音助手对话了。按回车开始录音说话5秒然后它就会识别你说的话生成回复并用语音播放出来。5.2 优化建议让助手更好用现在的助手还比较基础你可以从这几个方面优化1. 降低延迟语音助手最怕的就是反应慢。你可以用Whisper tiny模型识别速度更快开启流式输出模型一边生成一边合成语音预加载TTS模型避免每次都要加载2. 提升准确率在录音前加一个“叮”的提示音告诉用户开始说话了添加语音活动检测VAD只处理有声音的部分对识别结果进行后处理纠正常见错误3. 增加功能添加唤醒词比如“小Q小Q”支持连续对话不用每次按按钮集成其他功能比如查天气、设闹钟等4. 改善体验添加一个简单的图形界面支持多种音色选择可以调节语速和音量6. 实际应用场景这个语音助手框架可以应用到很多地方6.1 智能家居控制你可以把助手部署到树莓派上连接家里的智能设备。然后就可以用语音控制“打开客厅的灯”“空调调到26度”“明天早上7点叫我起床”6.2 学习辅导助手对于学生来说可以做成学习助手“这道数学题怎么做”“用英语介绍一下北京”“帮我检查这篇作文的语法”6.3 客服机器人小型商家可以用它做客服“你们店几点关门”“这个商品有优惠吗”“怎么申请退货”6.4 个人助理日常生活中的小帮手“今天有什么重要事项”“提醒我下午3点开会”“讲个笑话听听”7. 总结7.1 我们做了什么通过这篇文章我们完成了一个完整的语音助手项目快速部署用CSDN镜像一键启动Qwen3-1.7B省去了繁琐的环境配置模型调用用LangChain标准化调用大模型支持对话记忆和流式输出语音识别集成Whisper把用户语音转换成文字语音合成用TTS把模型的文字回复变成语音系统整合把所有模块组合成完整的语音助手整个项目代码不到300行但实现的功能很完整。你可以直接复制代码运行也可以根据自己的需求修改。7.2 关键收获技术层面学会了用LangChain调用本地大模型掌握了语音识别和语音合成的基本用法理解了语音助手的完整工作流程实践层面知道了怎么快速部署和测试AI模型学会了把多个AI模块组合成完整应用掌握了优化AI应用性能的基本方法7.3 下一步可以做什么如果你对这个项目感兴趣还可以继续深入优化性能尝试量化Qwen3模型让它跑得更快用更小的Whisper模型减少延迟增加功能添加唤醒词检测、支持连续对话、集成其他API天气、新闻等改进体验做个简单的Web界面支持多音色选择添加对话历史记录部署上线把助手部署到服务器做个微信小程序或APP最重要的是现在你有了一个可以实际运行的语音助手框架。你可以基于这个框架添加任何你想要的功能打造属于你自己的智能助手。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。