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

相关推荐
SEO_juper9 分钟前
2026内容营销破局指南:告别流量内卷,以价值赢信任
人工智能·ai·数字营销·2026
初恋叫萱萱12 分钟前
数据即燃料:用 `cann-data-augmentation` 实现高效训练预处理
人工智能
一战成名99621 分钟前
CANN 仓库揭秘:昇腾 AI 算子开发的宝藏之地
人工智能
hnult27 分钟前
2026 在线培训考试系统选型指南:核心功能拆解与选型逻辑
人工智能·笔记·课程设计
A小码哥28 分钟前
AI 设计时代的到来:从 PS 到 Pencil,一个人如何顶替一个团队
人工智能
AIGCmitutu33 分钟前
PS 物体底部阴影怎么做?3 步做出自然逼真的投影效果
人工智能·电子商务·photoshop·ps·美工
开源技术36 分钟前
Claude Opus 4.6 发布,100万上下文窗口,越贵越好用
人工智能·python
聆风吟º1 小时前
CANN hccl 深度解析:异构计算集群通信库的跨节点通信与资源管控实现逻辑
人工智能·wpf·transformer·cann
狸奴算君1 小时前
告别机械回复:三步微调AI模型,打造会“读心”的智能客服
人工智能
七夜zippoe1 小时前
脉向AI|当豆包手机遭遇“全网封杀“:GUI Agent是通向AGI的必经之路吗?
人工智能·ai·智能手机·agent·gui