@tencentcloud/sdk-mcp 1.3.4 → 1.3.5
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/package.json +1 -1
- package/resource/doc/chatuikit/android/features/theme.md +363 -0
- package/resource/doc/chatuikit/android/workflow.md +0 -0
- package/resource/doc/chatuikit/{android/client_api_android.md → faq/android_sdk/client-api.md} +0 -1
- package/resource/doc/chatuikit/faq/{native_sdk/faq.md → common/product.md} +8 -0
- package/resource/doc/chatuikit/faq/flutter_sdk/faq.md +54 -0
- package/resource/doc/chatuikit/faq/web_sdk/faq.md +1 -1
- package/resource/doc/chatuikit/flutter/features/theme.md +379 -0
- package/resource/doc/chatuikit/flutter/workflow.md +816 -0
- package/resource/doc/chatuikit/iOS/features/theme.md +416 -0
- package/resource/doc/chatuikit/iOS/workflow.md +0 -0
- package/resource/doc/chatuikit/react/components/chat-setting.md +124 -0
- package/resource/doc/chatuikit/react/components/contact-list.md +1331 -0
- package/resource/doc/chatuikit/react/components/search.md +885 -0
- package/resource/doc/chatuikit/vue/components/chat-setting.md +88 -0
- package/resource/doc/chatuikit/vue/components/contact-list.md +679 -0
- package/resource/doc/chatuikit/vue/components/search.md +1384 -0
- package/resource/doc/livekit/live/android/workflow.md +137 -4
- package/resource/doc/livekit/live/flutter/live-audience-list.md +337 -0
- package/resource/doc/livekit/live/flutter/live-audio-effect.md +739 -0
- package/resource/doc/livekit/live/flutter/live-barrage.md +578 -0
- package/resource/doc/livekit/live/flutter/live-base-beauty.md +484 -0
- package/resource/doc/livekit/live/flutter/live-co-guest-interaction.md +606 -0
- package/resource/doc/livekit/live/flutter/live-gift.md +812 -0
- package/resource/doc/livekit/live/flutter/live-host-interaction.md +1113 -0
- package/resource/doc/livekit/live/flutter/live-integration.md +1029 -0
- package/resource/doc/livekit/live/flutter/live-live-list.md +861 -0
- package/resource/doc/livekit/live/ios/live-audience-list.md +335 -0
- package/resource/doc/livekit/live/ios/live-audio-effect.md +373 -0
- package/resource/doc/livekit/live/ios/live-barrage.md +529 -0
- package/resource/doc/livekit/live/ios/live-base-beauty.md +237 -0
- package/resource/doc/livekit/live/ios/live-co-guest-interaction.md +483 -0
- package/resource/doc/livekit/live/ios/live-gift.md +785 -0
- package/resource/doc/livekit/live/ios/live-host-interaction.md +743 -0
- package/resource/doc/livekit/live/ios/live-integration.md +822 -0
- package/resource/doc/livekit/live/ios/live-live-list.md +535 -0
- package/resource/doc/livekit/live/ios/workflow.md +352 -0
- package/resource/doc/rtcengine/faq/web/web.md +2 -2
- package/resource/doc/rtcengine/web/how_to_integrated_web_sdk.md +2 -2
- package/resource/doc/rtcengine/web/plugin/20-advanced-customized-capture-rendering.md +84 -0
- package/resource/doc/rtcengine/web/plugin/21-advanced-auto-play-policy.md +86 -0
- package/resource/doc/rtcengine/web/plugin/22-advanced-audio-mixer.md +220 -0
- package/resource/doc/rtcengine/web/plugin/23-advanced-support-detection.md +217 -0
- package/resource/doc/rtcengine/web/plugin/24-advanced-network-quality.md +137 -0
- package/resource/doc/rtcengine/web/plugin/25-advanced-device-change.md +97 -0
- package/resource/doc/rtcengine/web/plugin/26-advanced-publish-cdn-stream.md +453 -0
- package/resource/doc/rtcengine/web/plugin/27-advanced-small-stream.md +180 -0
- package/resource/doc/rtcengine/web/plugin/28-advanced-beauty.md +349 -0
- package/resource/doc/rtcengine/web/plugin/29-advanced-water-mark.md +149 -0
- package/resource/doc/rtcengine/web/plugin/30-advanced-cross-room-link.md +96 -0
- package/resource/doc/rtcengine/web/plugin/31-advanced-plugins-overview.md +405 -0
- package/resource/doc/rtcengine/web/plugin/34-advanced-proxy.md +244 -0
- package/resource/doc/rtcengine/web/plugin/35-advanced-ai-denoiser.md +84 -0
- package/resource/doc/rtcengine/web/plugin/36-advanced-virtual-background.md +202 -0
- package/resource/doc/rtcengine/web/plugin/37-advanced-voice-changer.md +98 -0
- package/resource/doc/rtcengine/web/plugin/38-advanced-basic-beauty.md +95 -0
- package/resource/doc/rtcengine/web/plugin/39-advanced-video-decoder.md +33 -0
- package/resource/doc/rtcengine/web/plugin/40-advanced-video-mixer.md +380 -0
- package/resource/doc/rtcengine/web/plugin/41-advanced-small-stream-auto-switcher.md +91 -0
- package/resource/doc/rtcengine/web/plugin/42-advanced-realtime-transcriber.md +314 -0
- package/resource/doc/rtcengine/web/plugin/43-advanced-face-detection.md +180 -0
- package/tools/chat/get-native-chat-feature-detail.js +30 -0
- package/tools/chat/get-native-chat-feature-detail.js.map +1 -0
- package/tools/chat/get-native-chat-integration.js +30 -12
- package/tools/chat/get-native-chat-integration.js.map +1 -1
- package/tools/common/get-faq.js +2 -4
- package/tools/common/get-faq.js.map +1 -1
- package/tools/definitions/get_native_chat_feature_detail_def.js +32 -0
- package/tools/definitions/get_native_chat_feature_detail_def.js.map +1 -0
- package/tools/definitions/get_native_chat_uikit_integration_def.js +18 -6
- package/tools/definitions/get_native_chat_uikit_integration_def.js.map +1 -1
- package/tools/definitions/{get_native_live_extra_features_def.js → get_native_live_uikit_extra_features_def.js} +3 -3
- package/tools/definitions/get_native_live_uikit_extra_features_def.js.map +1 -0
- package/tools/definitions/{get_native_live_interaction_def.js → get_native_live_uikit_interaction_def.js} +3 -3
- package/tools/definitions/get_native_live_uikit_interaction_def.js.map +1 -0
- package/tools/definitions/get_web_chat_uikit_component_detail_def.js +46 -7
- package/tools/definitions/get_web_chat_uikit_component_detail_def.js.map +1 -1
- package/tools/index.js +6 -4
- package/tools/index.js.map +1 -1
- package/tools/live/{get_native_live_extra_features.js → get_native_live_uikit_extra_features.js} +4 -4
- package/tools/live/get_native_live_uikit_extra_features.js.map +1 -0
- package/tools/live/{get_native_live_interaction.js → get_native_live_uikit_interaction.js} +4 -4
- package/tools/live/get_native_live_uikit_interaction.js.map +1 -0
- package/tools/rtcengine/get-trtc-web-sdk-faq.js +1 -1
- package/tools/rtcengine/get-trtc-web-sdk-plugin.js +45 -0
- package/tools/rtcengine/get-trtc-web-sdk-plugin.js.map +1 -0
- package/utils/handle-component-name.js +0 -16
- package/utils/handle-component-name.js.map +1 -1
- package/utils/report-cls-client.js +1 -1
- package/utils/report-es-client.js +1 -1
- package/resource/doc/chatuikit/android/integrate_tuichat_only_android.md +0 -382
- package/resource/doc/chatuikit/android/ui_api_android.md +0 -418
- package/resource/doc/chatuikit/iOS/integrate_tuichat_only_iOS.md +0 -993
- package/resource/doc/chatuikit/iOS/ui_api_iOS.md +0 -526
- package/tools/definitions/get_native_live_extra_features_def.js.map +0 -1
- package/tools/definitions/get_native_live_interaction_def.js.map +0 -1
- package/tools/live/get_native_live_extra_features.js.map +0 -1
- package/tools/live/get_native_live_interaction.js.map +0 -1
- /package/resource/doc/chatuikit/android/{integrate_tuikit_android.md → integration.md} +0 -0
- /package/resource/doc/chatuikit/{flutter/client_api_Flutter.md → faq/flutter_sdk/client-api.md} +0 -0
- /package/resource/doc/chatuikit/{iOS/client_api_iOS.md → faq/ios_sdk/client-api.md} +0 -0
- /package/resource/doc/chatuikit/flutter/{integrate_tuikit_Flutter.md → integration.md} +0 -0
- /package/resource/doc/chatuikit/iOS/{integrate_tuikit_iOS.md → integration.md} +0 -0
- /package/resource/doc/chatuikit/react/components/{chatheader.md → chat-header.md} +0 -0
- /package/resource/doc/chatuikit/vue/components/{chatheader.md → chat-header.md} +0 -0
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
## 功能描述
|
|
2
|
+
|
|
3
|
+
本文主要介绍如何使用实时传译插件来启动实时语音转文字(ASR)和翻译能力。该插件可以将房间内用户的语音实时转换为文字,并支持翻译成多种语言。
|
|
4
|
+
|
|
5
|
+
## 前提条件
|
|
6
|
+
|
|
7
|
+
- TRTC Web SDK 版本 >= 5.15.0
|
|
8
|
+
|
|
9
|
+
## 实现流程
|
|
10
|
+
|
|
11
|
+
### 引入并注册插件
|
|
12
|
+
|
|
13
|
+
```javascript
|
|
14
|
+
import TRTC from 'trtc-sdk-v5';
|
|
15
|
+
import RealtimeTranscriber from 'trtc-sdk-v5/plugins/realtime-transcriber';
|
|
16
|
+
|
|
17
|
+
const trtc = TRTC.create({ plugins: [RealtimeTranscriber] });
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### 启动插件
|
|
21
|
+
|
|
22
|
+
启动插件后会返回一个 `transcriberRobotId`,用于后续停止该转录任务。
|
|
23
|
+
|
|
24
|
+
```javascript
|
|
25
|
+
const transcriberRobotId = await trtc.startPlugin('RealtimeTranscriber', {
|
|
26
|
+
sourceLanguage: 'zh',
|
|
27
|
+
translationLanguages: ['en', 'ja'],
|
|
28
|
+
userIdsToTranscribe: 'all',
|
|
29
|
+
});
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### 监听转录消息
|
|
33
|
+
|
|
34
|
+
通过监听 `REALTIME_TRANSCRIBER_MESSAGE` 事件来获取转录结果。
|
|
35
|
+
|
|
36
|
+
```javascript
|
|
37
|
+
trtc.on(TRTC.EVENT.REALTIME_TRANSCRIBER_MESSAGE, (event) => {
|
|
38
|
+
console.log(`${event.speakerUserId}: ${event.sourceText}`);
|
|
39
|
+
if (event.translationTexts) {
|
|
40
|
+
Object.entries(event.translationTexts).forEach(([lang, text]) => {
|
|
41
|
+
console.log(` ${lang}: ${text}`);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### 监听状态变化
|
|
48
|
+
|
|
49
|
+
通过监听 `REALTIME_TRANSCRIBER_STATE_CHANGED` 事件来获取转录任务的状态变化。
|
|
50
|
+
|
|
51
|
+
```javascript
|
|
52
|
+
trtc.on(TRTC.EVENT.REALTIME_TRANSCRIBER_STATE_CHANGED, (event) => {
|
|
53
|
+
console.log(`转录任务状态: ${event.state}, robotId: ${event.transcriberRobotId}`);
|
|
54
|
+
});
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### 停止插件
|
|
58
|
+
|
|
59
|
+
```javascript
|
|
60
|
+
await trtc.stopPlugin('RealtimeTranscriber', { transcriberRobotId });
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## 使用示例
|
|
64
|
+
|
|
65
|
+
### ASR 场景:转录房间内的音频为文字
|
|
66
|
+
|
|
67
|
+
```javascript
|
|
68
|
+
// 启动转录任务
|
|
69
|
+
const robotId = await trtc.startPlugin('RealtimeTranscriber', {
|
|
70
|
+
sourceLanguage: 'zh'
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
// 监听转录消息
|
|
74
|
+
trtc.on(TRTC.EVENT.REALTIME_TRANSCRIBER_MESSAGE, (data) => {
|
|
75
|
+
console.log(data.speakerUserId + ' says: ' + data.sourceText);
|
|
76
|
+
});
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### 翻译场景:将指定用户的语音翻译成多种语言
|
|
80
|
+
|
|
81
|
+
```javascript
|
|
82
|
+
// 启动转录任务,转录 userA 的语音并翻译成法语和英语
|
|
83
|
+
const robotId = await trtc.startPlugin('RealtimeTranscriber', {
|
|
84
|
+
sourceLanguage: 'zh',
|
|
85
|
+
translationLanguages: ['fr', 'en'],
|
|
86
|
+
userIdsToTranscribe: 'userA'
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
// 监听转录消息
|
|
90
|
+
trtc.on(TRTC.EVENT.REALTIME_TRANSCRIBER_MESSAGE, (data) => {
|
|
91
|
+
console.log(`👤 ${data.speakerUserId}:`);
|
|
92
|
+
console.log(` 原文: ${data.sourceText}`);
|
|
93
|
+
|
|
94
|
+
if (data.translationTexts) {
|
|
95
|
+
Object.entries(data.translationTexts).forEach(([lang, text]) => {
|
|
96
|
+
console.log(` ${lang.toUpperCase()}: ${text}`);
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### 转录多个指定用户
|
|
103
|
+
|
|
104
|
+
```javascript
|
|
105
|
+
const robotId = await trtc.startPlugin('RealtimeTranscriber', {
|
|
106
|
+
sourceLanguage: 'en',
|
|
107
|
+
translationLanguages: ['zh', 'ja'],
|
|
108
|
+
userIdsToTranscribe: ['userA', 'userB', 'userC']
|
|
109
|
+
});
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## API 说明
|
|
113
|
+
|
|
114
|
+
### trtc.startPlugin('RealtimeTranscriber', options)
|
|
115
|
+
|
|
116
|
+
用于启动实时转录任务。
|
|
117
|
+
|
|
118
|
+
**options: RealtimeTranscriberStartOptions**
|
|
119
|
+
|
|
120
|
+
| Name | Type | Required | Description |
|
|
121
|
+
|------|------|----------|-------------|
|
|
122
|
+
| sourceLanguage | `string` | 必填 | 源语言代码,目前仅支持 `'zh'`、`'en'` |
|
|
123
|
+
| translationLanguages | `string` \| `string[]` | 选填 | 翻译目标语言,支持单个语言或语言数组,如 `'en'` 或 `['en', 'ja']` |
|
|
124
|
+
| userIdsToTranscribe | `string` \| `string[]` | 选填 | 要转录的用户 ID,默认为 `'all'` 转录所有用户,也可指定单个或多个用户 ID |
|
|
125
|
+
| transcriberRobotId | `string` | 选填 | 自定义转录机器人 ID,不传则自动生成 |
|
|
126
|
+
|
|
127
|
+
**Returns: Promise\<string\>**
|
|
128
|
+
|
|
129
|
+
返回转录任务的 `transcriberRobotId`,用于后续停止任务。
|
|
130
|
+
|
|
131
|
+
**Example:**
|
|
132
|
+
|
|
133
|
+
```javascript
|
|
134
|
+
const robotId = await trtc.startPlugin('RealtimeTranscriber', {
|
|
135
|
+
sourceLanguage: 'zh',
|
|
136
|
+
translationLanguages: ['en', 'ja'],
|
|
137
|
+
userIdsToTranscribe: 'all',
|
|
138
|
+
});
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### trtc.stopPlugin('RealtimeTranscriber', options)
|
|
142
|
+
|
|
143
|
+
用于停止实时转录任务。
|
|
144
|
+
|
|
145
|
+
**options**
|
|
146
|
+
|
|
147
|
+
| Name | Type | Required | Description |
|
|
148
|
+
|------|------|----------|-------------|
|
|
149
|
+
| transcriberRobotId | `string` | 必填 | 启动时返回的转录机器人 ID |
|
|
150
|
+
|
|
151
|
+
**Example:**
|
|
152
|
+
|
|
153
|
+
```javascript
|
|
154
|
+
await trtc.stopPlugin('RealtimeTranscriber', { transcriberRobotId: robotId });
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## 事件说明
|
|
158
|
+
|
|
159
|
+
### TRTC.EVENT.REALTIME_TRANSCRIBER_STATE_CHANGED
|
|
160
|
+
|
|
161
|
+
转录任务状态变化事件。
|
|
162
|
+
|
|
163
|
+
**RealtimeTranscriberStateEvent**
|
|
164
|
+
|
|
165
|
+
| Name | Type | Description |
|
|
166
|
+
|------|------|-------------|
|
|
167
|
+
| state | `'started'` \| `'stopped'` | 转录任务状态 |
|
|
168
|
+
| roomId | `string` \| `number` | 房间 ID |
|
|
169
|
+
| transcriberRobotId | `string` | 转录机器人 ID |
|
|
170
|
+
| sourceLanguage | `string` | 源语言(可选) |
|
|
171
|
+
| error | `number` | 错误码(可选) |
|
|
172
|
+
| errorMessage | `string` | 错误信息(可选) |
|
|
173
|
+
|
|
174
|
+
**Example:**
|
|
175
|
+
|
|
176
|
+
```javascript
|
|
177
|
+
trtc.on(TRTC.EVENT.REALTIME_TRANSCRIBER_STATE_CHANGED, (event) => {
|
|
178
|
+
if (event.state === 'started') {
|
|
179
|
+
console.log('转录任务已启动');
|
|
180
|
+
} else if (event.state === 'stopped') {
|
|
181
|
+
console.log('转录任务已停止');
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### TRTC.EVENT.REALTIME_TRANSCRIBER_MESSAGE
|
|
187
|
+
|
|
188
|
+
转录消息事件,当有新的转录结果时触发。
|
|
189
|
+
|
|
190
|
+
**RealtimeTranscriberMessageEvent**
|
|
191
|
+
|
|
192
|
+
| Name | Type | Description |
|
|
193
|
+
|------|------|-------------|
|
|
194
|
+
| segmentId | `string` | 语音片段 ID,用于标识一段连续的语音 |
|
|
195
|
+
| speakerUserId | `string` | 说话人的用户 ID |
|
|
196
|
+
| sourceText | `string` | 转录的原文文本 |
|
|
197
|
+
| translationTexts | `Array<{ language: string, text: string }>` | 翻译文本数组,如 `[{ language: 'en', text: 'hello' }, { language: 'ja', text: 'こんにちは' }]` |
|
|
198
|
+
| timestamp | `number` | 时间戳 |
|
|
199
|
+
| isCompleted | `boolean` | 该语音片段是否已完成。`false` 表示中间结果(实时更新),`true` 表示最终结果 |
|
|
200
|
+
| robotId | `string` | 转录机器人 ID |
|
|
201
|
+
|
|
202
|
+
**Example:**
|
|
203
|
+
|
|
204
|
+
```javascript
|
|
205
|
+
trtc.on(TRTC.EVENT.REALTIME_TRANSCRIBER_MESSAGE, (event) => {
|
|
206
|
+
const { speakerUserId, sourceText, translationTexts, isCompleted } = event;
|
|
207
|
+
|
|
208
|
+
// 显示实时转录结果
|
|
209
|
+
console.log(`[${isCompleted ? '完成' : '进行中'}] ${speakerUserId}: ${sourceText}`);
|
|
210
|
+
|
|
211
|
+
// 显示翻译结果
|
|
212
|
+
if (translationTexts) {
|
|
213
|
+
translationTexts.forEach(({ language, text }) => {
|
|
214
|
+
console.log(` ${language}: ${text}`);
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
// 取消监听
|
|
220
|
+
trtc.off(TRTC.EVENT.REALTIME_TRANSCRIBER_MESSAGE, handler);
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
## 支持的语言
|
|
224
|
+
|
|
225
|
+
### ASR 源语言
|
|
226
|
+
|
|
227
|
+
| 语言 | 代码 |
|
|
228
|
+
|------|------|
|
|
229
|
+
| 中文 | `zh` |
|
|
230
|
+
| 英语 | `en` |
|
|
231
|
+
|
|
232
|
+
<!--
|
|
233
|
+
| 中文繁体 | `zh-tw` |
|
|
234
|
+
| 中国方言 | `zh-dialect` |
|
|
235
|
+
| 中国粤语 | `zh-yue` |
|
|
236
|
+
| 越南语 | `vi` |
|
|
237
|
+
| 日语 | `ja` |
|
|
238
|
+
| 韩语 | `ko` |
|
|
239
|
+
| 印度尼西亚语 | `id` |
|
|
240
|
+
| 泰语 | `th` |
|
|
241
|
+
| 葡萄牙语 | `pt` |
|
|
242
|
+
| 土耳其语 | `tr` |
|
|
243
|
+
| 阿拉伯语 | `ar` |
|
|
244
|
+
| 西班牙语 | `es` |
|
|
245
|
+
| 印地语 | `hi` |
|
|
246
|
+
| 法语 | `fr` |
|
|
247
|
+
| 马来语 | `ms` |
|
|
248
|
+
| 菲律宾语 | `fil` |
|
|
249
|
+
| 德语 | `de` |
|
|
250
|
+
| 意大利语 | `it` |
|
|
251
|
+
| 俄语 | `ru` |
|
|
252
|
+
| 瑞典语 | `sv` |
|
|
253
|
+
| 丹麦语 | `da` |
|
|
254
|
+
| 挪威语 | `no` |
|
|
255
|
+
-->
|
|
256
|
+
|
|
257
|
+
### 翻译目标语言
|
|
258
|
+
|
|
259
|
+
| 语言 | 代码 |
|
|
260
|
+
|------|------|
|
|
261
|
+
| 中文 | `zh` |
|
|
262
|
+
| 英语 | `en` |
|
|
263
|
+
| 越南语 | `vi` |
|
|
264
|
+
| 日语 | `ja` |
|
|
265
|
+
| 韩语 | `ko` |
|
|
266
|
+
| 印度尼西亚语 | `id` |
|
|
267
|
+
| 泰语 | `th` |
|
|
268
|
+
| 葡萄牙语 | `pt` |
|
|
269
|
+
| 阿拉伯语 | `ar` |
|
|
270
|
+
| 西班牙语 | `es` |
|
|
271
|
+
| 法语 | `fr` |
|
|
272
|
+
| 马来语 | `ms` |
|
|
273
|
+
| 德语 | `de` |
|
|
274
|
+
| 意大利语 | `it` |
|
|
275
|
+
| 俄语 | `ru` |
|
|
276
|
+
|
|
277
|
+
## 常见问题
|
|
278
|
+
|
|
279
|
+
**1. 如何区分中间结果和最终结果?**
|
|
280
|
+
|
|
281
|
+
通过 `REALTIME_TRANSCRIBER_MESSAGE` 事件中的 `isCompleted` 字段判断。当 `isCompleted` 为 `false` 时,表示当前是实时更新的中间结果;当 `isCompleted` 为 `true` 时,表示该语音片段已完成,返回最终结果。
|
|
282
|
+
|
|
283
|
+
```javascript
|
|
284
|
+
trtc.on(TRTC.EVENT.REALTIME_TRANSCRIBER_MESSAGE, (event) => {
|
|
285
|
+
if (event.isCompleted) {
|
|
286
|
+
// 最终结果,可以存储或展示
|
|
287
|
+
saveSubtitle(event);
|
|
288
|
+
} else {
|
|
289
|
+
// 中间结果,可以实时更新 UI
|
|
290
|
+
updateLiveCaption(event);
|
|
291
|
+
}
|
|
292
|
+
});
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
**2. 如何根据 segmentId 合并字幕?**
|
|
296
|
+
|
|
297
|
+
每个连续的语音片段会有相同的 `segmentId`,可以根据此 ID 进行字幕的更新和合并:
|
|
298
|
+
|
|
299
|
+
```javascript
|
|
300
|
+
const subtitleMap = new Map();
|
|
301
|
+
|
|
302
|
+
trtc.on(TRTC.EVENT.REALTIME_TRANSCRIBER_MESSAGE, (event) => {
|
|
303
|
+
subtitleMap.set(event.segmentId, event);
|
|
304
|
+
|
|
305
|
+
if (event.isCompleted) {
|
|
306
|
+
// 语音片段完成,可以归档
|
|
307
|
+
archiveSubtitle(subtitleMap.get(event.segmentId));
|
|
308
|
+
}
|
|
309
|
+
});
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
**3. 如何节省带宽?**
|
|
313
|
+
|
|
314
|
+
当不需要接收转录消息时,移除 `REALTIME_TRANSCRIBER_MESSAGE` 事件的所有监听器,插件会自动暂停接收消息以节省带宽。当重新添加监听器时,会自动恢复接收消息。
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
## 功能描述
|
|
2
|
+
|
|
3
|
+
本文档详细介绍了如何使用 TRTC Web SDK 的人脸检测插件,实时检测摄像头视频流中的人脸状态变化。该插件采用智能防抖逻辑,仅在人脸出现/消失状态真正变化时触发回调,避免因光线变化或短暂遮挡导致的误报。
|
|
4
|
+
|
|
5
|
+
## 前提条件
|
|
6
|
+
|
|
7
|
+
- TRTC Web SDK 版本 >= 5.15.0
|
|
8
|
+
- 需要先开启摄像头视频流
|
|
9
|
+
|
|
10
|
+
### 平台兼容性
|
|
11
|
+
|
|
12
|
+
| 平台 | 操作系统 | 浏览器版本 | 备注 |
|
|
13
|
+
|------|----------|------------|------|
|
|
14
|
+
| Web | Windows | Chrome 90+、Firefox 90+、Edge 97+ | 建议使用最新版 Chrome 浏览器(开启浏览器硬件加速) |
|
|
15
|
+
| Web | Mac | Chrome 98+、Firefox 96+、Safari 15+ | 2019年及以上 MacBook |
|
|
16
|
+
| Web | Android | 微信内嵌浏览器、Chrome、Firefox、小米浏览器| 建议使用微信内嵌、Chrome 或火狐浏览器等主流浏览器 |
|
|
17
|
+
| Web | iOS | 微信内嵌浏览器、Chrome、Safari、Firefox | 建议使用 Chrome 或 Safari 浏览器 |
|
|
18
|
+
|
|
19
|
+
## 实现流程
|
|
20
|
+
|
|
21
|
+
### 部署静态资源
|
|
22
|
+
|
|
23
|
+
该插件依赖一些静态资源文件,为保证浏览器可以正常加载和运行这些文件,你需要完成以下步骤:
|
|
24
|
+
|
|
25
|
+
1. 将 `node_modules/trtc-sdk-v5/assets` 目录发布至 CDN 或者静态资源服务器中。
|
|
26
|
+
2. 在创建 trtc 实例时传入您的 CDN 地址给 assetsPath 参数,例如: `TRTC.create({ assetsPath: 'https://xxxx/assets' })`,SDK 会按需加载相关资源文件。
|
|
27
|
+
|
|
28
|
+
> - 若您的版本低于 `v5.10.0`,您需要下载解压 https://web.sdk.qcloud.com/trtc/webrtc/v5/assets/assets.zip 后,发布至 CDN 或者静态资源服务器中。
|
|
29
|
+
> - 如果目录下文件的 Host URL 与网页应用的 Host URL 不一致,则需要开启访问文件域名的 CORS 策略。
|
|
30
|
+
> - 不能把目录文件放在 HTTP 服务下,因为在 HTTPS 域名下加载 HTTP 资源会被浏览器安全策略禁止。
|
|
31
|
+
|
|
32
|
+
### 引入并注册插件
|
|
33
|
+
|
|
34
|
+
```javascript
|
|
35
|
+
import { FaceDetection } from 'trtc-sdk-v5/plugins/video-effect/face-detection';
|
|
36
|
+
|
|
37
|
+
const trtc = TRTC.create({
|
|
38
|
+
plugins: [FaceDetection],
|
|
39
|
+
assetsPath: 'https://xxxx/assets' // 替换为您的静态资源地址
|
|
40
|
+
});
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### 开启本地摄像头
|
|
44
|
+
|
|
45
|
+
```javascript
|
|
46
|
+
await trtc.startLocalVideo();
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### 开启人脸检测插件
|
|
50
|
+
|
|
51
|
+
```javascript
|
|
52
|
+
await trtc.startPlugin('FaceDetection', {
|
|
53
|
+
onFaceDetectionStateChanged: (hasFace) => {
|
|
54
|
+
if (hasFace) {
|
|
55
|
+
console.log('检测到人脸出现');
|
|
56
|
+
// 执行人脸出现时的业务逻辑
|
|
57
|
+
} else {
|
|
58
|
+
console.log('检测到人脸消失');
|
|
59
|
+
// 执行人脸消失时的业务逻辑
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
detectionInterval: 300, // 检测间隔,单位ms (可选,默认300)
|
|
63
|
+
minConfidence: 0.8, // 最小置信度阈值 (可选,默认0.8)
|
|
64
|
+
missingTimeout: 1000 // 人脸消失确认时间,单位ms (可选,默认1000)
|
|
65
|
+
});
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### 按需更新参数
|
|
69
|
+
|
|
70
|
+
```javascript
|
|
71
|
+
// 更新检测参数 - 提高检测灵敏度
|
|
72
|
+
await trtc.updatePlugin('FaceDetection', {
|
|
73
|
+
onFaceDetectionStateChanged: (hasFace) => {
|
|
74
|
+
console.log('更新后的检测状态:', hasFace);
|
|
75
|
+
},
|
|
76
|
+
detectionInterval: 200, // 缩短检测间隔,提高实时性
|
|
77
|
+
minConfidence: 0.7, // 降低置信度阈值,提高检测灵敏度
|
|
78
|
+
missingTimeout: 1500 // 延长消失确认时间,减少误报
|
|
79
|
+
});
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### 关闭人脸检测
|
|
83
|
+
|
|
84
|
+
```javascript
|
|
85
|
+
await trtc.stopPlugin('FaceDetection');
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## 核心特性
|
|
89
|
+
|
|
90
|
+
### 智能防抖逻辑
|
|
91
|
+
|
|
92
|
+
插件采用**非对称防抖机制**,确保状态变化的准确性:
|
|
93
|
+
|
|
94
|
+
- **人脸出现(true)**:立即触发,实时响应
|
|
95
|
+
- **人脸消失(false)**:延迟触发,需满足 `missingTimeout` 条件才确认
|
|
96
|
+
|
|
97
|
+
该设计有效避免了因以下情况导致的误报:
|
|
98
|
+
- 人脸短暂转头或低头
|
|
99
|
+
- 光线瞬间变化
|
|
100
|
+
- 物体短暂遮挡
|
|
101
|
+
|
|
102
|
+
### 视频流状态同步
|
|
103
|
+
|
|
104
|
+
当本地视频流状态变化时,插件会自动处理:
|
|
105
|
+
|
|
106
|
+
| 场景 | 插件行为 | 回调触发 |
|
|
107
|
+
|------|----------|----------|
|
|
108
|
+
| 视频静音(Mute) | 暂停检测 | 触发一次 `hasFace: false` |
|
|
109
|
+
| 视频恢复(Unmute) | 恢复检测 | 根据实际状态触发相应回调 |
|
|
110
|
+
|
|
111
|
+
## API 说明
|
|
112
|
+
|
|
113
|
+
### trtc.startPlugin('FaceDetection', options)
|
|
114
|
+
|
|
115
|
+
用于开启人脸检测插件。
|
|
116
|
+
|
|
117
|
+
#### options
|
|
118
|
+
|
|
119
|
+
| Name | Type | Attributes | Description |
|
|
120
|
+
|------|------|------------|-------------|
|
|
121
|
+
| onFaceDetectionStateChanged | `(hasFace: boolean) => void` | 必填 | 人脸状态变化回调函数(仅在状态真正变化时触发) |
|
|
122
|
+
| detectionInterval | number | 选填 | 检测间隔时间(ms),范围 100-5000,默认 300 |
|
|
123
|
+
| minConfidence | number | 选填 | 最小人脸置信度阈值,范围 0-1,默认 0.8 |
|
|
124
|
+
| missingTimeout | number | 选填 | 人脸消失确认时间(ms),范围 0-5000,默认 1000 |
|
|
125
|
+
|
|
126
|
+
**Example:**
|
|
127
|
+
|
|
128
|
+
```javascript
|
|
129
|
+
await trtc.startPlugin('FaceDetection', {
|
|
130
|
+
onFaceDetectionStateChanged: (hasFace) => {
|
|
131
|
+
if (hasFace) {
|
|
132
|
+
console.log('人脸出现');
|
|
133
|
+
} else {
|
|
134
|
+
console.log('人脸消失');
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
detectionInterval: 300,
|
|
138
|
+
minConfidence: 0.8,
|
|
139
|
+
missingTimeout: 1000
|
|
140
|
+
});
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### trtc.updatePlugin('FaceDetection', options)
|
|
144
|
+
|
|
145
|
+
可修改人脸检测参数。
|
|
146
|
+
|
|
147
|
+
#### options
|
|
148
|
+
|
|
149
|
+
| Name | Type | Attributes | Description |
|
|
150
|
+
|------|------|------------|-------------|
|
|
151
|
+
| onFaceDetectionStateChanged | `(hasFace: boolean) => void` | 选填 | 人脸状态变化回调函数 |
|
|
152
|
+
| detectionInterval | number | 选填 | 检测间隔时间(ms),范围 100-5000 |
|
|
153
|
+
| minConfidence | number | 选填 | 最小人脸置信度阈值,范围 0-1 |
|
|
154
|
+
| missingTimeout | number | 选填 | 人脸消失确认时间(ms),范围 0-5000 |
|
|
155
|
+
|
|
156
|
+
**Example:**
|
|
157
|
+
|
|
158
|
+
```javascript
|
|
159
|
+
await trtc.updatePlugin('FaceDetection', {
|
|
160
|
+
detectionInterval: 200,
|
|
161
|
+
minConfidence: 0.7,
|
|
162
|
+
missingTimeout: 1500
|
|
163
|
+
});
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### trtc.stopPlugin('FaceDetection')
|
|
167
|
+
|
|
168
|
+
关闭人脸检测。
|
|
169
|
+
|
|
170
|
+
## 常见问题
|
|
171
|
+
|
|
172
|
+
**1. 如何调整检测的灵敏度?**
|
|
173
|
+
|
|
174
|
+
可以通过以下参数组合调整:
|
|
175
|
+
- **提高灵敏度**:降低 `minConfidence`,缩短 `detectionInterval`
|
|
176
|
+
- **降低灵敏度**:提高 `minConfidence`,延长 `missingTimeout`
|
|
177
|
+
|
|
178
|
+
**2. 视频流恢复后需要重新开启检测吗?**
|
|
179
|
+
|
|
180
|
+
不需要。插件会自动处理视频流状态变化,恢复后会继续检测。
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { GET_NATIVE_CHAT_FEATURE_DETAIL_DEFINITION } from '../definitions/get_native_chat_feature_detail_def.js';
|
|
3
|
+
import { getDocContent } from '../../utils/get-doc-content.js';
|
|
4
|
+
import { reportCLSClient } from '../../utils/report-cls-client.js';
|
|
5
|
+
import { handleFramework } from '../../utils/handle-framework.js';
|
|
6
|
+
function getResultText(params) {
|
|
7
|
+
const { framework, featureName = '' } = params;
|
|
8
|
+
reportCLSClient({
|
|
9
|
+
method: 'get_native_chat_feature_detail',
|
|
10
|
+
info: featureName,
|
|
11
|
+
framework: framework,
|
|
12
|
+
});
|
|
13
|
+
return getDocContent(['chatuikit', `${handleFramework(framework)}`, 'features', `${featureName}.md`]);
|
|
14
|
+
}
|
|
15
|
+
const registryGetNativeChatFeatureDetailTool = (mcpServer) => {
|
|
16
|
+
const { name, description, parameter_descriptions } = GET_NATIVE_CHAT_FEATURE_DETAIL_DEFINITION;
|
|
17
|
+
mcpServer.tool(name, description, {
|
|
18
|
+
framework: z.enum(['andriod', 'ios', 'flutter']).describe(parameter_descriptions.framework),
|
|
19
|
+
featureName: z.string().describe(parameter_descriptions.featureName),
|
|
20
|
+
}, (params) => ({
|
|
21
|
+
content: [
|
|
22
|
+
{
|
|
23
|
+
type: 'text',
|
|
24
|
+
text: getResultText(params),
|
|
25
|
+
}
|
|
26
|
+
]
|
|
27
|
+
}));
|
|
28
|
+
};
|
|
29
|
+
export { registryGetNativeChatFeatureDetailTool };
|
|
30
|
+
//# sourceMappingURL=get-native-chat-feature-detail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-native-chat-feature-detail.js","sourceRoot":"","sources":["../../../src/tools/chat/get-native-chat-feature-detail.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,yCAAyC,EAAE,MAAM,sDAAsD,CAAC;AACjH,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAGlE,SAAS,aAAa,CAAC,MAA2B;IAChD,MAAM,EAAE,SAAS,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC;IAC/C,eAAe,CAAC;QACd,MAAM,EAAE,gCAAgC;QACxC,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,SAAS;KACrB,CAAC,CAAC;IACH,OAAO,aAAa,CAAC,CAAC,WAAW,EAAE,GAAG,eAAe,CAAC,SAAS,CAAC,EAAE,EAAE,UAAU,EAAE,GAAG,WAAW,KAAK,CAAC,CAAC,CAAC;AACxG,CAAC;AAED,MAAM,sCAAsC,GAAG,CAAC,SAAoB,EAAE,EAAE;IACtE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,sBAAsB,EAAE,GAAG,yCAAyC,CAAC;IAChG,SAAS,CAAC,IAAI,CACZ,IAAI,EACJ,WAAW,EACX;QACE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,SAAS,CAAC;QAC3F,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC,WAAW,CAAC;KACrE,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACd,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC;aAC5B;SACF;KACF,CAAC,CAAC,CAAC;AACR,CAAC,CAAC;AACF,OAAO,EAAE,sCAAsC,EAAE,CAAC"}
|
|
@@ -2,26 +2,44 @@ import { z } from 'zod';
|
|
|
2
2
|
import { GET_NATIVE_CHAT_UIKIT_INTEGRATION_DEFINITION } from '../definitions/get_native_chat_uikit_integration_def.js';
|
|
3
3
|
import { getDocContent } from '../../utils/get-doc-content.js';
|
|
4
4
|
import { reportCLSClient } from '../../utils/report-cls-client.js';
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
import { generateStructuredResult } from '../../utils/generate-structured-result.js';
|
|
6
|
+
async function getResultText(params) {
|
|
7
|
+
const { framework = '', goals = [] } = params;
|
|
7
8
|
reportCLSClient({
|
|
8
9
|
method: 'get_native_chat_uikit_integration',
|
|
9
|
-
|
|
10
|
+
info: goals.join(','),
|
|
11
|
+
framework,
|
|
10
12
|
});
|
|
11
|
-
|
|
13
|
+
// 获取工作流指令
|
|
14
|
+
const baseInstructions = getDocContent(['chatuikit', framework, 'workflow.md']);
|
|
15
|
+
// 批量读取目标文档并生成结构化结果
|
|
16
|
+
const result = await generateStructuredResult({
|
|
17
|
+
baseInstructions,
|
|
18
|
+
goals,
|
|
19
|
+
framework,
|
|
20
|
+
pathMap: {
|
|
21
|
+
[goals[0]]: ['chatuikit', framework, 'integration.md'],
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
return result;
|
|
12
25
|
}
|
|
13
26
|
const registryGetNativeChatIntegrationTool = (mcpServer) => {
|
|
14
27
|
const { name, description, parameter_descriptions } = GET_NATIVE_CHAT_UIKIT_INTEGRATION_DEFINITION;
|
|
15
28
|
mcpServer.tool(name, description, {
|
|
16
29
|
framework: z.enum(['flutter', 'android', 'ios']).describe(parameter_descriptions.framework),
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
30
|
+
goals: z.array(z.enum(['full-featured', 'chat-only'])).describe(parameter_descriptions.goals)
|
|
31
|
+
}, async (params) => {
|
|
32
|
+
const result = await getResultText(params);
|
|
33
|
+
return {
|
|
34
|
+
content: [
|
|
35
|
+
{
|
|
36
|
+
type: 'text',
|
|
37
|
+
text: result.llm_code_generation_instructions_md,
|
|
38
|
+
}
|
|
39
|
+
],
|
|
40
|
+
result: result,
|
|
41
|
+
};
|
|
42
|
+
});
|
|
25
43
|
};
|
|
26
44
|
export { registryGetNativeChatIntegrationTool };
|
|
27
45
|
//# sourceMappingURL=get-native-chat-integration.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-native-chat-integration.js","sourceRoot":"","sources":["../../../src/tools/chat/get-native-chat-integration.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,4CAA4C,EAAE,MAAM,yDAAyD,CAAC;AACvH,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"get-native-chat-integration.js","sourceRoot":"","sources":["../../../src/tools/chat/get-native-chat-integration.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,4CAA4C,EAAE,MAAM,yDAAyD,CAAC;AACvH,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AAErF,KAAK,UAAU,aAAa,CAAC,MAA2B;IACtD,MAAM,EAAE,SAAS,GAAG,EAAE,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC;IAC9C,eAAe,CAAC;QACd,MAAM,EAAE,mCAAmC;QAC3C,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;QACrB,SAAS;KACV,CAAC,CAAC;IACH,UAAU;IACV,MAAM,gBAAgB,GAAG,aAAa,CAAC,CAAC,WAAW,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IAChF,mBAAmB;IACnB,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC;QAC5C,gBAAgB;QAChB,KAAK;QACL,SAAS;QACT,OAAO,EAAE;YACP,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,gBAAgB,CAAC;SACvD;KACF,CAAC,CAAA;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,oCAAoC,GAAG,CAAC,SAAoB,EAAE,EAAE;IACpE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,sBAAsB,EAAE,GAAG,4CAA4C,CAAC;IACnG,SAAS,CAAC,IAAI,CACZ,IAAI,EACJ,WAAW,EACX;QACE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,SAAS,CAAC;QAC3F,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,KAAK,CAAC;KAC9F,EACD,KAAK,EAAE,MAAW,EAAE,EAAE;QACpB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,CAAA;QAC1C,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,MAAM,CAAC,mCAAmC;iBACjD;aACF;YACD,MAAM,EAAE,MAAM;SACf,CAAA;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,OAAO,EAAE,oCAAoC,EAAE,CAAC"}
|
package/tools/common/get-faq.js
CHANGED
|
@@ -11,8 +11,6 @@ const PRODUCT_DOC_MAP = {
|
|
|
11
11
|
};
|
|
12
12
|
const WEB_FRAMEWORKS = ['react', 'vue', 'web'];
|
|
13
13
|
const NATIVE_FRAMEWORKS = ['android', 'ios', 'flutter'];
|
|
14
|
-
const WEB_SDK_DIR = 'web_sdk';
|
|
15
|
-
const NATIVE_SDK_DIR = 'native_sdk';
|
|
16
14
|
function getResultText(params) {
|
|
17
15
|
const { query = '', product = '', framework = '' } = params;
|
|
18
16
|
const basePath = PRODUCT_DOC_MAP[product];
|
|
@@ -32,10 +30,10 @@ function getResultText(params) {
|
|
|
32
30
|
// Step 2: SDK FAQ Search (SDK Path)
|
|
33
31
|
let sdkDir = '';
|
|
34
32
|
if (WEB_FRAMEWORKS.includes(framework)) {
|
|
35
|
-
sdkDir =
|
|
33
|
+
sdkDir = 'web_sdk';
|
|
36
34
|
}
|
|
37
35
|
else if (NATIVE_FRAMEWORKS.includes(framework)) {
|
|
38
|
-
sdkDir =
|
|
36
|
+
sdkDir = `${framework}_sdk`;
|
|
39
37
|
}
|
|
40
38
|
const sdkSearchContent = getDocContent([basePath, 'faq', sdkDir]);
|
|
41
39
|
// Step 3: General Knowledge Search (Server Error Codes, Billing, Console, REST API, etc.) (Common Path)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-faq.js","sourceRoot":"","sources":["../../../src/tools/common/get-faq.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE,MAAM,eAAe,GAA2B;IAC9C,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE,YAAY;IAClB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,WAAW;CACvB,CAAC;AACF,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAC/C,MAAM,iBAAiB,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"get-faq.js","sourceRoot":"","sources":["../../../src/tools/common/get-faq.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
const TOOL_DESCRIPTION = `
|
|
2
|
+
【核心用途】:这是一个 Native 聊天应用 UIKit 功能详情工具,专门用于提供 Native Chat TUIKit 中各项功能的详细说明、用法和示例代码。
|
|
3
|
+
|
|
4
|
+
【功能范围】:
|
|
5
|
+
检索任一功能的详细文档,包括功能实现方法、API 调用、代码示例等
|
|
6
|
+
|
|
7
|
+
【核心功能模块】:本工具涵盖 Native Chat TUIKit 的全部核心功能,包括:
|
|
8
|
+
|
|
9
|
+
**📋 核心功能列表:**
|
|
10
|
+
1. **主题定制** (theme):主题样式定制功能,支持自定义颜色、字体、圆角、间距等视觉样式,适用于实现品牌化 UI、深色模式、个性化外观等场景
|
|
11
|
+
|
|
12
|
+
【关键词】:'功能详情', 'TUIKit', 'Native', 'Android', 'iOS', 'Flutter', '主题', 'theme', 'TUITheme', '主题定制', '样式定制', '深色模式', 'dark mode', '品牌化', '颜色', '字体', 'UI 定制'。
|
|
13
|
+
|
|
14
|
+
【支持平台】:Android、iOS 和 Flutter。
|
|
15
|
+
|
|
16
|
+
【强制约束】:
|
|
17
|
+
1. 平台选择约束:如果用户在提示词中**没有明确指定** Android、iOS 或 Flutter 平台,必须优先调用 'present_framework_choice' 工具,引导用户进行选择。
|
|
18
|
+
|
|
19
|
+
2. **功能名称必须精确匹配**:featureName 参数必须从以下列表中选择,不支持模糊匹配:
|
|
20
|
+
- 'theme':主题定制(颜色、字体、圆角、间距等视觉样式定制)
|
|
21
|
+
`;
|
|
22
|
+
const PARAMETER_DESCRIPTIONS = {
|
|
23
|
+
framework: 'Native Chat UIKit 功能详情支持的平台/框架类型。可选值:android, ios, flutter。',
|
|
24
|
+
featureName: `Native Chat UIKit 功能的具体名称,可选值:
|
|
25
|
+
- 'theme': 主题定制(颜色、字体、圆角、间距等视觉样式定制)`
|
|
26
|
+
};
|
|
27
|
+
export const GET_NATIVE_CHAT_FEATURE_DETAIL_DEFINITION = {
|
|
28
|
+
name: 'get_native_chat_feature_detail',
|
|
29
|
+
description: TOOL_DESCRIPTION,
|
|
30
|
+
parameter_descriptions: PARAMETER_DESCRIPTIONS,
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=get_native_chat_feature_detail_def.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get_native_chat_feature_detail_def.js","sourceRoot":"","sources":["../../../src/tools/definitions/get_native_chat_feature_detail_def.ts"],"names":[],"mappings":"AAAA,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;CAoBxB,CAAC;AAEF,MAAM,sBAAsB,GAAG;IAC7B,SAAS,EAAE,6DAA6D;IACxE,WAAW,EAAE;oCACqB;CACnC,CAAC;AAGF,MAAM,CAAC,MAAM,yCAAyC,GAAG;IACvD,IAAI,EAAE,gCAAgC;IACtC,WAAW,EAAE,gBAAgB;IAC7B,sBAAsB,EAAE,sBAAsB;CAC/C,CAAC"}
|