SpeakBot 用自然语言控制机器人 — 说话,它就动。Python+React Native

SpeakBot 🎤🤖

用自然语言控制机器人 --- 说话,它就动 Python 3.11+、React Native 0.81.5、Expo 54.0.25

SpeakBot 是一个开源的机器人自然语言控制系统。用户通过手机 App 使用语音或文字与机器人交互,系统基于 LLM 将自然语言智能解析为机器人可执行的标准指令。

  • 理论上,只要有了标准指令,若机器人硬件具备相应的指令接口及执行能力,即可完成对应动作。(目前因缺少实际硬件,👻So...)
  • 原文链接:github.com/huangj17/Sp...

✨ 特性

  • 🧠 智能语义理解 --- 基于 Ollama Cloud LLM,准确理解复杂指令
  • 🎤 双模式语音识别 --- 非流式(10s 音频 70ms 处理,比 Whisper 快 15 倍)+ 流式(300 - 600ms 延迟实时转写)
  • ⌨️ 文本输入 --- 自然语言直接输入,无需记忆指令格式
  • 🔌 实时通信 --- WebSocket 双向通信,指令状态实时反馈
  • 📱 跨平台 --- React Native + Expo,iOS/Android 一套代码

📸 演示

功能演示视频

📹 点击查看演示视频

App 界面展示

主界面 语音识别(流式) 指令解析 语音识别(非流式)

控制台日志

后端日志 移动端日志

🎯 工作原理

arduino 复制代码
用户输入                    智能解析                     机器人执行
───────────────────────────────────────────────────────────────────
"帮我拿桌上的杯子"    →    LLM 语义理解    →    [定位杯子, 移动, 抓取]
     ↑                         ↑                        ↓
   语音/文字               指令拆解               WebSocket 下发

示例:复杂指令自动拆解

makefile 复制代码
输入: "帮我拿桌上的杯子"

输出:
├── 1. detect_object  →  定位"杯子"在"桌上"
├── 2. walk           →  移动到目标位置
└── 3. grab           →  抓取杯子

🏗️ 架构

scss 复制代码
┌────────────────────────────────────┐
│         Mobile App (Expo)          │
│   React Native + TypeScript        │
│   NativeWind + Zustand             │
└──────────────┬─────────────────────┘
               │ HTTP / WebSocket
               ▼
┌────────────────────────────────────┐
│         Backend (FastAPI)          │
│   Ollama LLM + FunASR STT          │
│   WebSocket Manager                │
└────────────────────────────────────┘

🚀 快速开始

前置要求

1. 下载 STT 模型

项目使用 FunASR 进行语音识别,需要先下载模型:

bash 复制代码
# 创建模型目录
mkdir -p /models/FunAudioLLM /models/funasr

# 下载非流式模型 (SenseVoice)
# https://huggingface.co/FunAudioLLM/SenseVoiceSmall
# 或 https://modelscope.cn/models/iic/SenseVoiceSmall

# 下载流式模型 (Paraformer)
# https://huggingface.co/funasr/paraformer-zh-streaming
# 或 https://modelscope.cn/models/iic/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-online

下载后修改 backend/app/config.py 中的模型路径:

python 复制代码
STT_MODEL_DIR: str = "/your/path/to/SenseVoiceSmall"           # 非流式模型
STREAMING_STT_MODEL_DIR: str = "/your/path/to/paraformer-zh-streaming"  # 流式模型

2. 启动后端

bash 复制代码
cd backend
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt

# 配置 API Key
cp .env.example .env
# 编辑 .env,填入 OLLAMA_API_KEY

# 启动
uvicorn main:app --reload --port 8020

验证:http://localhost:8020/docs

3. 启动移动端

bash 复制代码
cd mobile-app
pnpm install

# 修改后端地址 (src/constants/config.ts)
# API_BASE_URL: 'http://YOUR_IP:8020'

pnpm start

扫描二维码,用 Expo Go 打开。

📡 API 示例

自然语言解析

bash 复制代码
curl -X POST http://localhost:8020/api/nlu/parse \
  -H "Content-Type: application/json" \
  -d '{"text": "前进2米然后左转"}'
json 复制代码
{
  "success": true,
  "result": {
    "type": "sequence",
    "commands": [
      { "command": "forward", "params": { "distance": 2.0 } },
      { "command": "turn", "params": { "direction": "left", "angle": 90 } }
    ]
  }
}

WebSocket 实时通信

javascript 复制代码
const ws = new WebSocket("ws://localhost:8020/ws/robot/client_001");

ws.onmessage = (e) => {
  const msg = JSON.parse(e.data);
  console.log("指令:", msg.data);
};

📁 项目结构

bash 复制代码
speakbot/
├── backend/                 # Python 后端
│   ├── app/
│   │   ├── services/        # LLM、STT、WebSocket 服务
│   │   ├── routers/         # API 路由
│   │   └── prompts/         # NLU 提示词
│   └── main.py
├── mobile-app/              # React Native 前端
│   ├── app/                 # Expo Router 页面
│   ├── components/          # UI 组件
│   └── src/
│       ├── services/        # API & WebSocket
│       └── store/           # Zustand 状态

✅ 已实现

模块 功能 状态
NLU 自然语言 → 指令解析
STT FunASR 双模式(流式 + 非流式)
WebSocket 实时通信 + 自动重连
状态管理 Zustand 指令/机器人状态
UI 输入框 + 指令列表 + 状态面板

🚧 开发中

  • 3D 机器人可视化 (Three.js)
  • 指令执行动画
  • 多机器人支持

🛠️ 技术栈

技术
后端 FastAPI, Ollama Cloud, FunASR, WebSocket
前端 React Native, Expo 54, TypeScript
样式 NativeWind (Tailwind CSS)
状态 Zustand

📖 文档

🤝 贡献

欢迎 Issue 和 PR!

  1. Fork 本仓库
  2. 创建特性分支:git checkout -b feature/amazing
  3. 提交更改:git commit -m 'Add amazing feature'
  4. 推送分支:git push origin feature/amazing
  5. 提交 Pull Request

📄 许可证

MIT License


SpeakBot --- 让机器人听懂你说的话 🎤🤖

相关推荐
机器之心1 小时前
从MiniMax到DeepSeek:为何头部大模型都在押注「交错思维」?
人工智能·openai
机器之心1 小时前
DeepSeek-V3.2巨「吃」Token,竟然是被GRPO背刺了
人工智能·openai
机器之心1 小时前
云计算一哥出手,大家AI Agent自由了
人工智能·openai
昇腾知识体系1 小时前
vLLM-Ascend环境部署:安装步骤汇总
人工智能
da_vinci_x1 小时前
PS 生成式扩展:从 iPad 到带鱼屏,游戏立绘“全终端”适配流
前端·人工智能·游戏·ui·aigc·技术美术·游戏美术
铅笔侠_小龙虾1 小时前
深度学习理论推导--最小二乘法
人工智能·深度学习·机器学习
LDG_AGI1 小时前
【推荐系统】深度学习训练框架(十三):模型输入——《特征索引》与《特征向量》的边界
人工智能·pytorch·分布式·深度学习·算法·机器学习
小女孩真可爱1 小时前
大模型学习记录(八)---------RAG评估
linux·人工智能·python
阿里云大数据AI技术1 小时前
MaxCompute SQL AI:让 SQL 成为你的 AI 语言
人工智能·sql