LFM2.5-1.2B-Instruct实战指南:Gradio界面添加语音输入/输出扩展接口
LFM2.5-1.2B-Instruct实战指南:Gradio界面添加语音输入/输出扩展接口
1. 项目概述
LFM2.5-1.2B-Instruct是一个1.2B参数量的轻量级指令微调大语言模型,特别适合在边缘设备或低资源服务器上部署。这个模型可以用于构建嵌入式AI助手、轻量客服机器人等应用场景。
1.1 模型特点
- 轻量高效:仅需2.5-3GB显存即可运行
- 多语言支持:支持英语、中文、法语等8种语言
- 长上下文:支持32,768 tokens的上下文长度
- 易部署:提供标准的Transformers接口
2. 环境准备
2.1 基础环境要求
确保你的Linux系统已安装以下组件:
# 检查Python版本 python3 --version # 需要Python 3.8+ # 检查CUDA版本 nvcc --version # 需要CUDA 11.7+2.2 安装依赖库
pip install torch transformers gradio sounddevice pydub3. 基础Gradio界面
3.1 创建基础WebUI
我们先创建一个基础的Gradio聊天界面:
from transformers import AutoModelForCausalLM, AutoTokenizer import gradio as gr MODEL_PATH = "/root/ai-models/unsloth/LFM2___5-1___2B-Instruct" model = AutoModelForCausalLM.from_pretrained(MODEL_PATH) tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH) def generate_response(message, history): inputs = tokenizer(message, return_tensors="pt") outputs = model.generate(**inputs, max_new_tokens=512) return tokenizer.decode(outputs[0], skip_special_tokens=True) demo = gr.ChatInterface(fn=generate_response, title="LFM2.5-1.2B Chat") demo.launch(server_port=7860)4. 添加语音输入功能
4.1 录音功能实现
我们需要添加录音功能,让用户可以通过麦克风输入语音:
import sounddevice as sd from pydub import AudioSegment import numpy as np def record_audio(duration=5, sample_rate=16000): """录制音频""" print(f"Recording for {duration} seconds...") recording = sd.rec(int(duration * sample_rate), samplerate=sample_rate, channels=1, dtype='float32') sd.wait() # 等待录音完成 return recording.flatten(), sample_rate4.2 语音转文本
添加语音识别功能,将录音转换为文本:
import whisper # OpenAI的语音识别库 # 初始化语音识别模型 whisper_model = whisper.load_model("base") def speech_to_text(audio_data, sample_rate): """将语音转换为文本""" # 将numpy数组转换为AudioSegment audio = AudioSegment( audio_data.tobytes(), frame_rate=sample_rate, sample_width=4, # float32是4字节 channels=1 ) # 保存为临时文件供whisper处理 temp_file = "temp_audio.wav" audio.export(temp_file, format="wav") # 语音识别 result = whisper_model.transcribe(temp_file) return result["text"]5. 添加语音输出功能
5.1 文本转语音
使用微软的语音合成技术将文本转换为语音:
import azure.cognitiveservices.speech as speechsdk def text_to_speech(text, voice_name="zh-CN-YunxiNeural"): """将文本转换为语音""" speech_config = speechsdk.SpeechConfig( subscription="your-azure-key", region="eastus" ) speech_config.speech_synthesis_voice_name = voice_name synthesizer = speechsdk.SpeechSynthesizer(speech_config=speechsdk.audio.AudioOutputConfig(use_default_speaker=True)) result = synthesizer.speak_text_async(text).get() if result.reason == speechsdk.ResultReason.SynthesizingAudioCompleted: print("语音合成成功") else: print(f"语音合成失败: {result.reason}")6. 整合完整界面
6.1 完整代码实现
将所有功能整合到一个Gradio界面中:
def process_audio_input(audio_data, sample_rate, chat_history): """处理语音输入""" # 语音转文本 text_input = speech_to_text(audio_data, sample_rate) # 生成回复 response = generate_response(text_input, chat_history) # 文本转语音 text_to_speech(response) return text_input, response with gr.Blocks() as demo: gr.Markdown("# LFM2.5-1.2B 语音交互界面") with gr.Tab("文字聊天"): gr.ChatInterface(fn=generate_response) with gr.Tab("语音聊天"): audio_input = gr.Audio(source="microphone", type="numpy", label="说话") text_output = gr.Textbox(label="识别结果") response_output = gr.Textbox(label="AI回复") record_button = gr.Button("开始录音") record_button.click( fn=record_audio, outputs=[audio_input], queue=False ) process_button = gr.Button("处理语音") process_button.click( fn=process_audio_input, inputs=[audio_input, gr.State([])], outputs=[text_output, response_output] ) demo.launch(server_port=7860)7. 部署优化
7.1 性能优化建议
对于边缘设备部署,可以考虑以下优化:
- 量化模型:
model = model.to(torch.float16) # 半精度量化- 缓存语音模型:
# 在启动时预加载语音模型 whisper_model = whisper.load_model("base")- 限制并发:
demo.launch(max_threads=2) # 限制并发线程数7.2 常见问题解决
问题1:录音没有声音
检查麦克风权限:
arecord -l # 列出音频设备问题2:语音识别不准
尝试使用更大的whisper模型:
whisper_model = whisper.load_model("small")问题3:语音合成延迟
可以预加载常用回复的语音:
# 预加载常用回复 text_to_speech("您好,我是AI助手", save_to_file="welcome.wav")8. 总结
通过本教程,我们为LFM2.5-1.2B-Instruct模型添加了完整的语音交互功能:
- 语音输入:使用麦克风录制并转换为文本
- 语音输出:将模型回复转换为自然语音
- 性能优化:针对边缘设备进行了多项优化
这个扩展接口可以广泛应用于智能客服、语音助手等场景,让轻量级大模型也能提供流畅的语音交互体验。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
