|
7| 0
|
[求助] 用VS制作M10的AI聊天助手遇到的问题 |
|
以下为完整代码 import time import json import requests from openai import OpenAI # ========== 1. 初始化硬件模块 ========== from pinpong.board import Board from pinpong.extension.unihiker import * from pinpong.libs.dfrobot_voice_recognition import DFRobot_VoiceRecognition_I2C from pinpong.libs.dfrobot_speech_synthesis import DFRobot_SpeechSynthesis_I2C # 初始化行空板 Board().begin() # 初始化语音识别模块 (I2C地址默认0x41) voice_rec = DFRobot_VoiceRecognition_I2C() voice_rec.begin() # 设置唤醒词(可根据模块支持的词库设置) # 不同版本的语音识别模块命令词不同,请查阅你的模块说明书 # 初始化语音合成模块 (I2C地址默认0x40) tts = DFRobot_SpeechSynthesis_I2C() tts.begin() tts.setVolume(7) # 音量 0-9 tts.setSpeed(5) # 语速 0-9 tts.setSoundType(tts.FEMALE1) # 女声 # ========== 2. DeepSeek API配置 ========== DEEPSEEK_API_KEY = "YOUR-API-KEY" # 替换成真实的API Key client = OpenAI( api_key=DEEPSEEK_API_KEY, base_url="https://api.deepseek.com/v1" ) # 系统提示词:定义AI的角色 SYSTEM_PROMPT = """你是一个友好的智能语音助手,名叫"小行"。 你的回答应该简洁、亲切,每句话尽量控制在20字以内,方便语音播报。 如果用户问天气、新闻等问题,诚实告知你无法获取实时信息,并建议用户开启联网功能。 """ # 对话历史(用于多轮对话) conversation_history = [ {"role": "system", "content": SYSTEM_PROMPT} ] # ========== 3. 核心函数 ========== def speak(text): """ 语音合成播报 """ print(f"[语音播报] {text}") try: tts.speak(text) except Exception as e: print(f"语音播报失败: {e}") def listen(timeout=5): """ 监听语音识别,获取识别的文字 返回: 识别的文字,如果超时或失败返回None """ print("正在聆听...") # 注意:这里的实现取决于你使用的具体语音识别模块 # 不同模块的API可能不同,请参考你的模块说明书调整 # 示例:等待识别结果 start_time = time.time() while time.time() - start_time < timeout: if voice_rec.available(): result = voice_rec.read() if result: print(f"[识别结果] {result}") return result time.sleep(0.1) print("聆听超时") return None def ask_deepseek(user_input): """ 调用DeepSeek API,获取回复 """ print(f"[发送给DeepSeek] {user_input}") # 添加用户消息到历史 conversation_history.append({"role": "user", "content": user_input}) try: response = client.chat.completions.create( model="deepseek-chat", messages=conversation_history, temperature=0.7, max_tokens=200, # 限制回复长度,适合语音播报 timeout=15 ) reply = response.choices[0].message.content print(f"[DeepSeek回复] {reply}") # 添加助手回复到历史 conversation_history.append({"role": "assistant", "content": reply}) # 限制历史长度,避免超出上下文 if len(conversation_history) > 20: # 保留system prompt和最近10轮对话 conversation_history[:] = [conversation_history[0]] + conversation_history[-10:] return reply except Exception as e: print(f"DeepSeek API错误: {e}") return "抱歉,我暂时无法回答,请检查网络连接。" # ========== 4. 主程序 ========== def main(): print("=" * 40) print("智能语音助手已启动") print("唤醒词: 你好小新 (请根据实际模块设置)") print("说'退出'或'再见'结束对话") print("=" * 40) # 启动语音播报欢迎语 speak("你好,我是你的智能语音助手,请问有什么可以帮您?") # 主循环 while True: # 等待唤醒或直接识别命令 # 这里简化处理:持续监听,识别到内容就处理 user_input = listen(timeout=8) if user_input is None: continue # 检查退出指令 if any(word in user_input for word in ["退出", "再见", "结束"]): speak("再见,期待下次为您服务") print("程序结束") break # 获取DeepSeek回复 reply = ask_deepseek(user_input) # 语音播报回复 speak(reply) # 短暂停顿,避免连续播报 time.sleep(0.5) if __name__ == "__main__": main() 问题:无法驱动语音识别(DFR0715)和语音合成(DFR0760)模块 补充:单纯接入deepseek进行对话是没问题的 应该怎么解决? 目前推测是没有这两个语音模块的python库,是这样吗? |
沪公网安备31011502402448© 2013-2026 Comsenz Inc. Powered by Discuz! X3.4 Licensed