构建类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
相关产品推荐
相关产品推荐

