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 --- 让机器人听懂你说的话 🎤🤖

相关推荐
吴佳浩13 小时前
Python入门指南(七) - YOLO检测API进阶实战
人工智能·后端·python
tap.AI13 小时前
RAG系列(二)数据准备与向量索引
开发语言·人工智能
老蒋新思维14 小时前
知识IP的长期主义:当AI成为跨越增长曲线的“第二曲线引擎”|创客匠人
大数据·人工智能·tcp/ip·机器学习·创始人ip·创客匠人·知识变现
货拉拉技术14 小时前
出海技术挑战——Lalamove智能告警降噪
人工智能·后端·监控
wei202314 小时前
汽车智能体Agent:国务院“人工智能+”行动意见 对汽车智能体领域 革命性重塑
人工智能·汽车·agent·智能体
LinkTime_Cloud14 小时前
快手遭遇T0级“黑色闪电”:一场教科书式的“协同打击”,披上了AI“智能外衣”的攻击
人工智能
PPIO派欧云14 小时前
PPIO上线MiniMax-M2.1:聚焦多语言编程与真实世界复杂任务
人工智能
隔壁阿布都14 小时前
使用LangChain4j +Springboot 实现大模型与向量化数据库协同回答
人工智能·spring boot·后端
Coding茶水间15 小时前
基于深度学习的水面垃圾检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
图像处理·人工智能·深度学习·yolo·目标检测·机器学习·计算机视觉
乐迪信息15 小时前
乐迪信息:煤矿皮带区域安全管控:人员违规闯入智能识别
大数据·运维·人工智能·物联网·安全