byt-lingxiao-ai 0.3.11 → 0.3.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +224 -0
- package/components/mixins/messageMixin.js +3 -0
- package/components/mixins/webSocketMixin.js +1 -1
- package/dist/index.common.js +3 -1
- package/dist/index.common.js.map +1 -1
- package/dist/index.umd.js +3 -1
- package/dist/index.umd.js.map +1 -1
- package/dist/index.umd.min.js +1 -1
- package/dist/index.umd.min.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
# 凌霄AI智能对话组件
|
|
2
|
+
|
|
3
|
+
## 项目介绍
|
|
4
|
+
|
|
5
|
+
凌霄AI(byt-lingxiao-ai)是邦业科技开发的一款智能对话机器人组件库,基于Vue 2.0框架开发,提供了完整的智能对话功能,包括文本交互、语音识别、音频播放等功能。
|
|
6
|
+
|
|
7
|
+
## 功能特性
|
|
8
|
+
|
|
9
|
+
- ✅ **智能对话**:支持与AI进行自然语言交互
|
|
10
|
+
- ✅ **语音识别**:集成WebSocket语音通信,支持实时语音输入
|
|
11
|
+
- ✅ **音频播放**:内置音频播放器,支持语音回复播放
|
|
12
|
+
- ✅ **流式消息**:支持服务器推送的流式消息处理
|
|
13
|
+
- ✅ **拖拽功能**:支持聊天窗口拖拽定位
|
|
14
|
+
- ✅ **响应式设计**:适配不同屏幕尺寸
|
|
15
|
+
- ✅ **自定义配置**:支持多种参数配置
|
|
16
|
+
- ✅ **思考过程可视化**:显示AI思考过程和用时
|
|
17
|
+
|
|
18
|
+
## 技术栈
|
|
19
|
+
|
|
20
|
+
- **前端框架**:Vue 2.0
|
|
21
|
+
- **UI组件**:Element UI
|
|
22
|
+
- **通信协议**:WebSocket
|
|
23
|
+
- **音频处理**:Web Audio API
|
|
24
|
+
- **消息解析**:自定义流式消息解析器
|
|
25
|
+
- **构建工具**:Vue CLI
|
|
26
|
+
|
|
27
|
+
## 安装
|
|
28
|
+
|
|
29
|
+
### 使用npm安装
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
npm install byt-lingxiao-ai --save
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### 使用yarn安装
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
yarn add byt-lingxiao-ai
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## 使用
|
|
42
|
+
|
|
43
|
+
### 基本用法
|
|
44
|
+
|
|
45
|
+
```javascript
|
|
46
|
+
// 引入Vue
|
|
47
|
+
import Vue from 'vue'
|
|
48
|
+
import App from './App.vue'
|
|
49
|
+
|
|
50
|
+
// 引入Element UI
|
|
51
|
+
import ElementUI from 'element-ui'
|
|
52
|
+
import 'element-ui/lib/theme-chalk/index.css'
|
|
53
|
+
|
|
54
|
+
// 引入凌霄AI组件
|
|
55
|
+
import ChatWindow from 'byt-lingxiao-ai'
|
|
56
|
+
|
|
57
|
+
// 注册组件
|
|
58
|
+
Vue.use(ElementUI)
|
|
59
|
+
Vue.use(ChatWindow)
|
|
60
|
+
|
|
61
|
+
new Vue({
|
|
62
|
+
render: h => h(App)
|
|
63
|
+
}).$mount('#app')
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
```html
|
|
67
|
+
<!-- 在Vue组件中使用 -->
|
|
68
|
+
<template>
|
|
69
|
+
<div id="app">
|
|
70
|
+
<ChatWindow />
|
|
71
|
+
</div>
|
|
72
|
+
</template>
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### 自定义配置
|
|
76
|
+
|
|
77
|
+
```javascript
|
|
78
|
+
Vue.use(ChatWindow, {
|
|
79
|
+
title: '智能助手', // 组件标题
|
|
80
|
+
// 其他自定义配置
|
|
81
|
+
})
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## API 文档
|
|
85
|
+
|
|
86
|
+
### ChatWindow 组件
|
|
87
|
+
|
|
88
|
+
#### 组件属性
|
|
89
|
+
|
|
90
|
+
| 属性名 | 类型 | 默认值 | 说明 |
|
|
91
|
+
|--------|------|--------|------|
|
|
92
|
+
| appendToBody | Boolean | true | 是否将聊天窗口添加到body元素中 |
|
|
93
|
+
|
|
94
|
+
#### 事件
|
|
95
|
+
|
|
96
|
+
| 事件名 | 说明 |
|
|
97
|
+
|--------|------|
|
|
98
|
+
| send | 发送消息事件 |
|
|
99
|
+
| thinking-click | 思考过程点击事件 |
|
|
100
|
+
| overlay-click | 遮罩点击事件 |
|
|
101
|
+
|
|
102
|
+
### 配置项
|
|
103
|
+
|
|
104
|
+
#### API_URL
|
|
105
|
+
|
|
106
|
+
对话API接口地址,默认值:`/lingxiao-byt/api/v1/mcp/ask`
|
|
107
|
+
|
|
108
|
+
#### WS_URL
|
|
109
|
+
|
|
110
|
+
WebSocket连接地址,默认值:`ws://${window.location.host}/audio/ws`
|
|
111
|
+
|
|
112
|
+
#### AUDIO_URL
|
|
113
|
+
|
|
114
|
+
音频文件地址,默认值:`/minio/lingxiaoai/byt.mp3`
|
|
115
|
+
|
|
116
|
+
#### TIME_JUMP_POINTS_URL
|
|
117
|
+
|
|
118
|
+
音频时间跳转点配置文件地址,默认值:`/minio/lingxiaoai/timeJumpPoints.json`
|
|
119
|
+
|
|
120
|
+
## 项目结构
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
├── components/ # 组件目录
|
|
124
|
+
│ ├── ChatAvatar.vue # AI头像组件
|
|
125
|
+
│ ├── ChatInputBox.vue # 输入框组件
|
|
126
|
+
│ ├── ChatMessageList.vue # 消息列表组件
|
|
127
|
+
│ ├── ChatRobot.vue # 机器人动画组件
|
|
128
|
+
│ ├── ChatWindow.vue # 主聊天窗口组件
|
|
129
|
+
│ ├── ChatWindowDialog.vue # 聊天窗口对话框
|
|
130
|
+
│ ├── ChatWindowHeader.vue # 聊天窗口头部
|
|
131
|
+
│ ├── UserMessage.vue # 用户消息组件
|
|
132
|
+
│ ├── AiMessage.vue # AI消息组件
|
|
133
|
+
│ ├── assets/ # 静态资源
|
|
134
|
+
│ ├── config/ # 配置文件
|
|
135
|
+
│ ├── mixins/ # 混合器
|
|
136
|
+
│ │ ├── audioMixin.js # 音频处理混合器
|
|
137
|
+
│ │ ├── messageMixin.js # 消息处理混合器
|
|
138
|
+
│ │ └── webSocketMixin.js # WebSocket通信混合器
|
|
139
|
+
│ └── utils/ # 工具函数
|
|
140
|
+
│ ├── Cookie.js # Cookie工具
|
|
141
|
+
│ ├── StreamParser.js # 流式消息解析器
|
|
142
|
+
│ ├── Uuid.js # UUID生成器
|
|
143
|
+
│ └── WorkletSource.js # Audio Worklet源码
|
|
144
|
+
├── examples/ # 示例代码
|
|
145
|
+
├── dist/ # 打包文件
|
|
146
|
+
├── package.json # 项目配置
|
|
147
|
+
└── vue.config.js # Vue CLI配置
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## 核心功能说明
|
|
151
|
+
|
|
152
|
+
### 1. 消息处理流程
|
|
153
|
+
|
|
154
|
+
1. 用户输入消息
|
|
155
|
+
2. 调用 `handleSend` 方法发送消息
|
|
156
|
+
3. 创建用户消息记录
|
|
157
|
+
4. 创建AI回复消息记录
|
|
158
|
+
5. 发送请求到API接口
|
|
159
|
+
6. 使用 `StreamParser` 处理流式响应
|
|
160
|
+
7. 实时更新AI回复内容
|
|
161
|
+
|
|
162
|
+
### 2. 音频处理
|
|
163
|
+
|
|
164
|
+
- 使用 `audioMixin` 处理音频相关功能
|
|
165
|
+
- 支持麦克风录音
|
|
166
|
+
- 支持音频播放控制(播放、暂停、停止)
|
|
167
|
+
- 使用 WebSocket 实时传输音频数据
|
|
168
|
+
|
|
169
|
+
### 3. WebSocket通信
|
|
170
|
+
|
|
171
|
+
- 建立WebSocket连接进行语音通信
|
|
172
|
+
- 支持自动重连机制
|
|
173
|
+
- 处理服务端推送的各种消息类型
|
|
174
|
+
|
|
175
|
+
### 4. 拖拽功能
|
|
176
|
+
|
|
177
|
+
- 支持聊天窗口拖拽定位
|
|
178
|
+
- 限制窗口在视口范围内
|
|
179
|
+
- 平滑拖拽动画效果
|
|
180
|
+
|
|
181
|
+
## 浏览器支持
|
|
182
|
+
|
|
183
|
+
- Chrome (推荐)
|
|
184
|
+
- Firefox
|
|
185
|
+
- Safari
|
|
186
|
+
- Edge
|
|
187
|
+
|
|
188
|
+
## 开发与构建
|
|
189
|
+
|
|
190
|
+
### 开发
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
npm run serve
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### 构建
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
npm run build
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
## 许可证
|
|
203
|
+
|
|
204
|
+
MIT License
|
|
205
|
+
|
|
206
|
+
## 作者信息
|
|
207
|
+
|
|
208
|
+
- 公司:邦业科技
|
|
209
|
+
- 邮箱:xuepengfei@bonyear.com
|
|
210
|
+
|
|
211
|
+
## 更新日志
|
|
212
|
+
|
|
213
|
+
### v0.3.12
|
|
214
|
+
- 修复了一些已知问题
|
|
215
|
+
- 优化了音频处理性能
|
|
216
|
+
|
|
217
|
+
### v0.3.10
|
|
218
|
+
- 新增拖拽功能
|
|
219
|
+
- 优化了消息流式处理
|
|
220
|
+
|
|
221
|
+
### v0.3.0
|
|
222
|
+
- 初始版本发布
|
|
223
|
+
- 支持基本的聊天功能
|
|
224
|
+
- 支持语音识别和音频播放
|
|
@@ -62,12 +62,15 @@ export default {
|
|
|
62
62
|
// 重置解析器
|
|
63
63
|
this.streamParser.reset();
|
|
64
64
|
|
|
65
|
+
const controller = new AbortController();
|
|
66
|
+
|
|
65
67
|
try {
|
|
66
68
|
const startTime = Date.now();
|
|
67
69
|
const token = getCookie('bonyear-access_token') || `44e7f112-63f3-429d-908d-2c97ec380de2`;
|
|
68
70
|
|
|
69
71
|
const response = await fetch(API_URL, {
|
|
70
72
|
method: 'POST',
|
|
73
|
+
signal: controller.signal,
|
|
71
74
|
headers: {
|
|
72
75
|
'Content-Type': 'application/json',
|
|
73
76
|
'Authorization': `Bearer ${token}`,
|
package/dist/index.common.js
CHANGED
|
@@ -31315,7 +31315,7 @@ const TIME_JUMP_POINTS_URL = '/minio/lingxiaoai/timeJumpPoints.json'; // 语音u
|
|
|
31315
31315
|
methods: {
|
|
31316
31316
|
initWebSocket() {
|
|
31317
31317
|
try {
|
|
31318
|
-
this.ws = new WebSocket(
|
|
31318
|
+
this.ws = new WebSocket('ws://10.2.233.41:9999');
|
|
31319
31319
|
this.ws.binaryType = 'arraybuffer';
|
|
31320
31320
|
this.ws.onopen = async () => {
|
|
31321
31321
|
console.log('WebSocket 连接成功');
|
|
@@ -31613,11 +31613,13 @@ const getCookie = cname => {
|
|
|
31613
31613
|
|
|
31614
31614
|
// 重置解析器
|
|
31615
31615
|
this.streamParser.reset();
|
|
31616
|
+
const controller = new AbortController();
|
|
31616
31617
|
try {
|
|
31617
31618
|
const startTime = Date.now();
|
|
31618
31619
|
const token = getCookie('bonyear-access_token') || `44e7f112-63f3-429d-908d-2c97ec380de2`;
|
|
31619
31620
|
const response = await fetch(API_URL, {
|
|
31620
31621
|
method: 'POST',
|
|
31622
|
+
signal: controller.signal,
|
|
31621
31623
|
headers: {
|
|
31622
31624
|
'Content-Type': 'application/json',
|
|
31623
31625
|
'Authorization': `Bearer ${token}`
|