You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构建类Alexa语音对话原型:安装rasa-sdk等模块遇编译错误求助

解决rasa-sdk/rasa/TTS安装时multidict编译错误(找不到basetsd.h)

核心问题分析

安装rasa-sdk、rasa及TTS模块时,出现multidict 5.0.0编译失败,提示找不到basetsd.h头文件——该文件属于Windows SDK组件,缺失会导致C扩展编译失败。

解决步骤

1. 补全Windows开发组件

下载安装Visual Studio Build Tools,勾选「桌面开发使用C++」工作负载,确保包含对应Windows版本的Windows SDK组件。安装完成后重启终端,让环境变量生效。

2. 跳过编译,安装预编译版本

若不想配置编译环境,可直接安装无需编译的高版本multidict,再执行目标模块安装:

pip install multidict>=6.0.0 --only-binary :all:
pip install rasa-sdk rasa TTS

3. 用虚拟环境隔离依赖

避免全局依赖冲突,创建并激活虚拟环境后再安装:

python -m venv venv
# Windows激活
venv\Scripts\activate
# Linux/macOS激活
source venv/bin/activate

项目相关文件

项目文件结构

voice-assistant-prototype/
├── actions/
│   └── Actions.py
├── main.py
├── requirements.txt
└── config.yml

Actions.py(余额查询拟人化响应实现)

from rasa_sdk import Action, Tracker
from rasa_sdk.executor import CollectingDispatcher

class ActionCheckBalance(Action):
    def name(self) -> str:
        return "action_check_balance"

    def run(self, dispatcher: CollectingDispatcher,
            tracker: Tracker,
            domain: dict) -> list:
        # 模拟获取用户余额
        user_balance = "1256.89"
        # 拟人化响应
        response = f"您好,您当前的账户余额是{user_balance}元,近期有一笔100元的消费记录,需要我为您详细说明吗?"
        dispatcher.utter_message(text=response)
        return []

main.py(语音对话入口)

import speech_recognition as sr
from gtts import gTTS
import os
from rasa.core.agent import Agent

# 加载Rasa代理
agent = Agent.load("models")

def speech_to_text():
    r = sr.Recognizer()
    with sr.Microphone() as source:
        print("请说话...")
        audio = r.listen(source)
    try:
        text = r.recognize_google(audio, language='zh-CN')
        print(f"您说的是:{text}")
        return text
    except sr.UnknownValueError:
        return "抱歉,我没听清您说的内容"
    except sr.RequestError:
        return "语音识别服务不可用"

def text_to_speech(text):
    tts = gTTS(text=text, lang='zh-CN')
    tts.save("response.mp3")
    os.system("start response.mp3")  # Windows
    # os.system("afplay response.mp3")  # macOS
    # os.system("mpg123 response.mp3")  # Linux

if __name__ == "__main__":
    while True:
        user_input = speech_to_text()
        if user_input.lower() in ["退出", "结束"]:
            text_to_speech("再见,祝您生活愉快!")
            break
        responses = agent.handle_text(user_input)
        for response in responses:
            text_to_speech(response["text"])

内容的提问来源于stack exchange,提问作者zybe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 17:45:13