2026-4-4 22:01:23 [显示全部楼层]
7浏览
查看: 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库,是这样吗?


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
关于楼主
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2026 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail