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

相关推荐
雪隐2 分钟前
个人电脑玩AI-13让5060 Ti给你打工——我用 0.9B 小模型终结了"谁来记会议纪要"这个世纪难题
前端·人工智能·后端
-XWB-7 分钟前
【 LLM】Agent Planning 完全指南:8 种纯 LLM 范式 + 8 种混合规划模式详解(一)
人工智能·aigc·学习方法·ai编程
半个落月12 分钟前
用 LangChain JS 做可控写作实验:理解温度参数、提示词与异步调用
javascript·人工智能·后端
Anova.YJ25 分钟前
AI通用能力(二)
人工智能
m沐沐31 分钟前
【深度学习】卷积神经网络 数据增强、保存最优模型实现,详细解读
人工智能·python·深度学习·机器学习·cnn·数据增强
rain_sxr32 分钟前
把多步串起来:Agent 前端编排的状态机与进度可视化
人工智能
硅谷秋水41 分钟前
PhyGround:生成式世界模型中的物理推理基准测试
人工智能·深度学习·机器学习·计算机视觉·语言模型
深海鱼肝油ya1 小时前
基于FastAPI的AI智能体Web系统构建(二)
人工智能·fastapi·python开发·异步框架·agent开发
TheBestRucy1 小时前
RAG知识库问答系统落地:从向量检索到上下文增强的全链路实践
人工智能·python·langchain·aigc·交互