Skip to main content

使用本地 LLMs、STT 和 TTS 构建语音交互式聊天机器人

这个项目将完全语音交互式 AI 助手的梦想变为现实——完全在本地硬件上运行,无需依赖云服务。
通过结合语音转文本(STT)文本转语音(TTS)和使用Ollama本地大语言模型(LLMs),该系统实现了人机之间自然、私密和实时的对话。

整个设置在 Docker 容器内运行,可以部署在NVIDIA Jetson 设备边缘计算机或任何具有 GPU 加速的基于 Linux 的系统上。


项目概述

该项目的目标是创建一个语音驱动的聊天机器人,能够:

  • 实时监听您的语音。
  • 使用本地**ASR(自动语音识别)**理解您的语音。
  • 使用本地 LLM生成智能回复。
  • 使用**TTS(文本转语音)**自然地说出这些回复。

所有组件都是自包含的并在本地运行,让您完全控制自己的数据——无云依赖、无延迟、无隐私担忧。


系统组件

1. 语音转文本(STT)模块

实时将您的语音输入转换为文本。
主要特性:

  • 使用NVIDIA Riva ASR进行快速、准确的转录。
  • 支持多种语言。
  • 针对边缘设备进行优化。

2. 文本转语音(TTS)模块

将聊天机器人的回复转换为自然的语音输出。
亮点:

  • 多语言、富有表现力和逼真的语音合成。
  • NVIDIA Riva TTS提供支持。
  • 低延迟——非常适合交互式对话。

3. 本地 LLM(Ollama)

聊天机器人的核心是Ollama,一个用于高效运行现代 LLMs 的本地推理引擎。
特性:

  • 离线操作(无需互联网)。
  • 即使在 Jetson 设备上也能实时响应。
  • 上下文保持,实现流畅、连贯的对话。
  • 支持各种模型,包括 Llama、Phi、Gemma、Mistral 等。

4. 用户交互层

简单直观的界面允许用户:

  • 通过按钮或命令启动或停止语音交互。
  • 查看实时转录和聊天机器人回复。
  • 享受从语音到语音的流畅、低延迟通信。

本地设置 Ollama

我们将首先安装 Jetson Containers 来轻松管理和部署我们在 Docker 中的服务。

# Install Jetson Container tools
git clone https://github.com/dusty-nv/jetson-containers
bash jetson-containers/install.sh

安装完成后,拉取并运行Ollama容器:

jetson-containers run --name ollama $(autotag ollama)
ollama run llama3.2:1b

💡 **提示:**从较小的模型(如 llama3.2:1b)开始测试您的配置,然后再扩展。

ollama.com/library 上可用的模型:

模型参数大小命令
Llama 3.23B2.0 GBollama run llama3.2
Llama 3.21B1.3 GBollama run llama3.2:1b
Llama 3.2 Vision11B7.9 GBollama run llama3.2-vision
Phi 3 Mini3.8B2.3 GBollama run phi3
Gemma 29B5.5 GBollama run gemma2
Mistral7B4.1 GBollama run mistral

如果您使用的是NVIDIA Jetson AGX,您可以舒适地运行中型到大型模型。对于较小的 Jetson,请坚持使用轻量级模型(1B–3B)。

直接在终端中运行 Ollama 或通过提供的 Python 脚本 ollama_run.py 运行。

python3 ollama_run.py

示例:

终端使用

Python 集成


NVIDIA Riva:STT 和 TTS

为了实现真正的语音交互,我们使用NVIDIA Riva,这是一个 GPU 加速的工具包,提供:

  • 自动语音识别(ASR)
  • 文本转语音(TTS)
  • 神经机器翻译(NMT)(可选)

它可以部署在任何地方——从云端到嵌入式设备,如Jetson 系列

步骤 1:获取您的 NGC API 密钥

  1. 登录到 NVIDIA NGC
  2. 创建一个API 密钥并将其保存在本地——您需要它来访问 Riva 资源。

步骤 2:在 Jetson 上配置 NGC

cd ~ && mkdir ngc_setup && cd ngc_setup
wget --content-disposition https://api.ngc.nvidia.com/v2/resources/nvidia/ngc-apps/ngc_cli/versions/3.36.0/files/ngccli_arm64.zip
unzip ngccli_arm64.zip
chmod u+x ngc-cli/ngc
echo "export PATH=\"$PATH:$(pwd)/ngc-cli\"" >> ~/.bash_profile && source ~/.bash_profile
ngc config set

在提示时使用您的 API 密钥。

步骤 3:在 Jetson 上安装 Riva

确保您运行的是JetPack 6.0(或在支持矩阵中检查兼容性)。

cd ~ && mkdir riva_setup && cd riva_setup
ngc registry resource download-version nvidia/riva/riva_quickstart_arm64:2.16.0
cd riva_quickstart_v2.13.1

config.sh 中,禁用未使用的服务以节省资源:

service_enabled_nlp=false
service_enabled_nmt=false

然后通过编辑 /etc/docker/daemon.json 配置 Docker 使用 NVIDIA 运行时:

{
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
}
}

重启 Docker:

sudo systemctl restart docker

最后,初始化并启动 Riva:

sudo bash riva_init.sh
sudo bash riva_start.sh

运行聊天机器人

一切准备就绪后,运行主应用程序:

git clone https://github.com/kouroshkarimi/local_chatbot_jetson.git
cd local_chatbot_jetson
python3 app.py --list-input-devices
python3 app.py --list-output-devices
python3 app.py --input-device <your_input_id> --output-device <your_output_id>

您现在可以与您的助手对话,它将倾听、思考并回话——全部在本地进行,由您的 Jetson 提供支持。


主要优势

  • 🔒 100% 私密——数据不会离开您的设备
  • ⚡ 实时响应——针对低延迟进行优化
  • 🌐 多语言——支持多种语言和口音
  • 🧩 模块化——每个组件都可以替换或扩展
  • 🖥️ 边缘友好——可部署在 Jetson 或标准 Linux 系统上

未来改进

  • 视觉模块集成以实现多模态交互
  • 在 TTS 中支持自定义语音克隆
  • 跨会话的记忆持久化以实现更自然的对话
  • Web 或移动界面

🎉 享受您的对话!

恭喜——您刚刚构建了自己的语音启用、隐私优先的 AI 助手
现在坐下来,与您的机器人对话,享受探索人机交互未来的乐趣。🤖💬

"与机器人愉快对话 :)"


参考资料

  1. 基于 Jetson 和 LlamaIndex 的本地 RAG
  2. 本地语音聊天机器人:在 reComputer 上部署 Riva 和 Llama2
  3. ChatTTS
  4. 语音转文本(STT)和文本转语音(TTS)
  5. Ollama

✨ 贡献者项目

技术支持与产品讨论

感谢您选择我们的产品!我们在这里为您提供不同的支持,以确保您使用我们产品的体验尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。

Loading Comments...