一个基于 Node.js 和通义千问(Qwen)大模型的 AI 视觉语音交互系统,支持实时摄像头画面分析、自然语言对话和多模态交互。
在线演示:[(https://www.bilibili.com/video/BV1y1JW6tEUD/)]]
本项目是一个端到端的 AI 视觉语音对话助手,能够:
- 🎥 实时调用摄像头捕捉画面
- 🔍 对视频帧进行智能视觉分析
- 💬 与用户进行自然流畅的中文对话
- 支持文字输入和语音录制
- 🖼️ 结合视觉内容提供上下文感知的智能回应
- Node.js (LTS 版本) - 运行时环境
- Express.js (^4.18.2) - Web 服务框架
- Axios (^1.6.2) - HTTP 客户端,用于 API 调用
- Multer (^1.4.5-lts.1) - 文件上传处理
- Sharp (^0.33.1) - 图像处理库
- UUID (^9.0.1) - 唯一标识符生成
- Dotenv (^16.3.1) - 环境变量管理
- CORS (^2.8.5) - 跨域资源共享支持
- 原生 HTML5/CSS3/JavaScript (ES6+) - 无框架依赖
- WebRTC API - 摄像头和麦克风访问
- Fetch API - HTTP 请求
- Canvas API - 视频帧捕获
- 阿里云 DashScope (通义千问) - Qwen-VL-Max / Qwen-Plus 多模态大模型
- Node.js 18.x 或更高版本
- npm 9.x 或更高版本
- Python 3.7+ (可选,用于快速启动前端服务器)
- 现代浏览器(Chrome、Firefox、Edge 等,支持 WebRTC)
git clone https://github.com/YUKIQVQ/VisoTalk.gitinstall npm这将安装以下核心依赖包:
- express: ^4.18.2
- cors: ^2.8.5
- dotenv: ^16.3.1
- multer: ^1.4.5-lts.1
- axios: ^1.6.2
- sharp: ^0.33.1
- uuid: ^9.0.1
开发依赖:
- nodemon: ^3.0.2
- 访问 阿里云 DashScope 控制台
- 注册/登录账号
- 创建新的 API 密钥
- 复制完整的密钥字符串
Windows (PowerShell):
$env:DASHSCOPE_API_KEY="sk-your-actual-api-key"Windows (CMD - 永久设置):
setx DASHSCOPE_API_KEY "sk-your-actual-api-key"setx 后需要重新打开终端才能生效
Windows
echo %DASHSCOPE_API_KEY%应该显示你的 API 密钥(至少前几个字符)。
npm start你应该看到: ✅ Qwen服务已初始化,使用模型: qwen-plus API地址: https://dashscope.aliyuncs.com/compatible-mode/v1 🚀 AI视觉语音对话助手后端服务已启动 📍 服务地址: http://localhost:3000
使用 Python:
python -m http.server 8080或使用 Node.js:
npx http-server -p 8080然后在浏览器访问:http://localhost:8080/front.html
npm test这将运行以下测试:
- ✅ 健康检查 - 验证后端服务是否正常运行
- ✅ AI 对话接口 - 测试与通义千问的集成
- ✅ 视觉分析接口 - 测试图像分析功能
- 左侧面板:实时摄像头画面显示
- 右侧面板:
- 控制按钮(开始/停止对话)
- 状态指示器(摄像头、麦克风)
- 视觉分析结果展示
- 聊天历史记录
- 消息输入框
- ✅ 实时摄像头访问(WebRTC)
- ✅ 视频帧自动捕获与分析
- ✅ 文字消息发送
- ✅ 语音录制模拟
- ✅ 视觉分析结果可视化
- ✅ 错误提示与状态反馈
本项目使用了以下开源库和框架:
| 库名称 | 版本 | 用途 | 许可证 |
|---|---|---|---|
| Express | ^4.18.2 | Web 服务框架 | MIT |
| Axios | ^1.6.2 | HTTP 客户端 | MIT |
| Multer | ^1.4.5-lts.1 | 文件上传处理 | MIT |
| Sharp | ^0.33.1 | 图像处理 | Apache-2.0 |
| UUID | ^9.0.1 | 唯一 ID 生成 | MIT |
| Dotenv | ^16.3.1 | 环境变量加载 | BSD-2-Clause |
| CORS | ^2.8.5 | 跨域支持 | MIT |
| Nodemon | ^3.0.2 | 开发热重载 | MIT |
以下内容为本项目原创开发:
-
前端界面与交互逻辑 (
front.html)- 响应式左右分栏布局设计
- WebRTC 摄像头集成
- Canvas 视频帧捕获
- 聊天界面与消息管理
- 状态指示器与错误处理
-
后端服务架构 (
server.js,start-backend.js)- RESTful API 设计
- 路由规划与中间件配置
- 文件上传处理
- 错误处理机制
-
AI 服务集成 (
services/qwenService.js)- 通义千问 API 封装
- 消息上下文管理
- Token 估算与成本计算
- 错误处理与重试机制
-
视觉分析服务 (
services/visionService.js)- 图像预处理优化
- 本地特征提取
- 缓存策略实现
-
工具模块 (
utils/cache.js)- TTL 缓存管理
- 自动清理机制
-
测试与配置脚本 (
test-api.js,setup-env.js)- API 自动化测试
- 环境配置向导
- 本地预处理:使用 Sharp 进行图像压缩,减少 API 调用数据量
- 智能缓存:视觉分析结果缓存 5 分钟,避免重复分析
- 按需调用:仅在必要时调用 AI API,本地处理简单任务
- 实现 WebSocket 长连接,减少 HTTP 开销
- 添加请求限流,防止超额调用
- 使用 CDN 加速静态资源
- 实现增量更新,只传输变化的数据
本项目仅供学习和研究使用。使用本项目的第三方库需遵循其各自的开源许可证。
本项目由开发者独立创建和维护。
感谢以下开源项目和社区:
- Express.js 团队
- 阿里云 DashScope 团队
- 所有贡献者
