# 语音对话悬浮球模块
**Repository Path**: bmscj/voice-chat-floating-module
## Basic Information
- **Project Name**: 语音对话悬浮球模块
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-12-13
- **Last Updated**: 2025-12-28
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# AI悬浮小机器人模块
## 1. 模块简介
AI悬浮小机器人是一个可拖拽、支持语音交互的智能机器人组件,能够与AI服务进行交互,提供语音识别、AI对话等功能。该模块采用模块化设计,支持多种环境(Vue项目、小程序、Web应用),可快速集成到各种项目中。
## 2. 功能特性
### 2.1 核心功能
- ✅ 可拖拽悬浮机器人UI(支持鼠标和触摸拖动)
- ✅ 语音录音与识别
- ✅ AI对话交互
- ✅ 响应式弹窗
- ✅ 录音状态反馈
- ✅ 可配置的外观和行为
### 2.2 技术特性
- 📱 跨平台兼容(Vue、小程序、Web)
- 🎨 可定制的主题和样式
- 🎯 简单易用的API
- 🔧 模块化设计,易于扩展
- 📦 支持多种导入方式
- ⚡ 高性能,低资源占用
## 3. 目录结构
```
/robot/
├── components/ # 组件目录
│ └── FloatingRobot.vue # 悬浮机器人主组件
├── services/ # 服务目录
│ └── AIService.js # AI服务交互
├── utils/ # 工具目录
│ └── recorder.js # 录音功能封装
├── styles/ # 样式目录
│ └── index.scss # 主题样式
├── index.js # 模块入口
├── package.json # 配置文件
└── README.md # 说明文档
```
## 4. 安装方法
### 4.1 直接复制目录
将 `robot` 目录复制到您的项目中,然后通过相对路径引入即可。
### 4.2 支持的项目类型
- Vue 2.x 项目
- Vue 3.x 项目(兼容模式)
- uni-app 项目
- 微信小程序项目
- 普通 Web 项目
## 5. 使用示例
### 5.1 Vue组件方式(推荐)
```vue
```
### 5.2 全局注册
```javascript
// main.js
import Vue from 'vue';
import FloatingRobotModule from './robot';
// 全局注册组件
Vue.use(FloatingRobotModule, {
// 全局配置选项(可选)
apiBaseUrl: 'http://121.43.121.164:7100',
botId: '7450776744908570662'
});
// 之后在任何组件中都可以直接使用
//
```
### 5.3 直接使用服务
```javascript
import { AIService, Recorder } from './robot';
// 创建AI服务实例
const aiService = new AIService({
apiBaseUrl: 'http://your-ai-server:port',
botId: 'your-bot-id'
});
// 创建录音器实例
const recorder = new Recorder({
format: 'm4a',
duration: 60000,
audioToTextUrl: 'http://your-ai-server:port/audioToText/use'
});
// 初始化AI会话
aiService.initConversation().then(conversationId => {
console.log('会话ID:', conversationId);
});
// 发送消息到AI
aiService.chatWithAI('你好').then(response => {
console.log('AI响应:', response);
});
```
### 5.4 直接挂载到页面(仅返回服务实例)
```javascript
import FloatingRobotModule from './robot';
// 直接挂载到页面(仅返回服务实例)
const robotInstance = FloatingRobotModule.mount({
aiConfig: {
apiBaseUrl: 'http://your-ai-server:port',
botId: 'your-bot-id'
},
recorderConfig: {
format: 'm4a',
duration: 60000
}
});
// mount方法当前仅返回服务实例,不自动创建DOM元素
console.log('AI服务实例:', robotInstance.aiService);
console.log('录音器实例:', robotInstance.recorder);
```
**注意事项:**
- `mount`方法目前仅返回AI服务和录音器实例,不自动创建DOM元素
- 建议使用Vue组件方式引入,以获得完整功能
- 当前调用mount方法会在控制台输出警告:"直接挂载功能暂未实现,建议使用Vue组件方式引入"
## 6. API文档
### 6.1 FloatingRobot组件
#### 6.1.1 属性
| 属性名 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| apiBaseUrl | String | '' | AI服务基础地址 |
| botId | String | '' | 机器人ID(DeepSeek API使用API Key,此参数保留用于兼容) |
| userId | Number | 1 | 用户ID |
| initialPosition | Object | { x: 0, y: 400 } | 初始位置 |
| config | Object | {} | 机器人配置 |
#### 6.1.2 Config配置项
| 配置项 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| imgSrc | String | '/static/image/airobot.gif' | 机器人图片路径 |
| width | Number | 80 | 机器人宽度(px) |
| height | Number | 80 | 机器人高度(px) |
| enableDrag | Boolean | true | 是否启用拖拽 |
| autoHidePopup | Boolean | true | 是否自动隐藏弹窗 |
| popupHideDelay | Number | 5000 | 弹窗自动隐藏延迟(ms) |
#### 6.1.3 方法
| 方法名 | 参数 | 返回值 | 说明 |
|--------|------|--------|------|
| getRobotState | 无 | Object | 获取机器人当前状态 |
| setRobotConfig | config: Object | 无 | 设置机器人配置 |
| sendMessage | text: String | Promise | 发送消息到AI |
| sendDefaultMessage | 无 | 无 | 发送默认消息 |
| showAIResponse | content: String | 无 | 显示AI响应弹窗 |
| closePopup | 无 | 无 | 关闭弹窗 |
| startRecording | 无 | Promise | 开始录音 |
| stopRecording | 无 | 无 | 停止录音 |
### 6.2 AIService服务
#### 6.2.1 构造函数
```javascript
const aiService = new AIService(config);
```
**配置选项:**
| 配置项 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| apiBaseUrl | String | '' | AI服务基础地址 |
| botId | String | '' | 机器人ID(DeepSeek API使用API Key,此参数保留用于兼容) |
| userId | Number | 1 | 用户ID |
| conversationId | String | null | 会话ID(自动初始化) |
#### 6.2.2 方法
| 方法名 | 参数 | 返回值 | 说明 |
|--------|------|--------|------|
| initConversation | 无 | Promise | 初始化AI会话 |
| chatWithAI | text: String, role: String, contentType: String | Promise