212 lines
6.4 KiB
TypeScript
212 lines
6.4 KiB
TypeScript
/**
|
||
* Copyright 2025 Beijing Volcano Engine Technology Co., Ltd. All Rights Reserved.
|
||
* SPDX-license-identifier: BSD-3-Clause
|
||
*/
|
||
|
||
import {
|
||
TTS_CLUSTER,
|
||
ARK_V3_MODEL_ID,
|
||
ModelSourceType,
|
||
SCENE,
|
||
Prompt,
|
||
Welcome,
|
||
Model,
|
||
Voice,
|
||
LLM_BOT_ID,
|
||
AI_MODEL,
|
||
AI_MODE_MAP,
|
||
AI_MODEL_MODE,
|
||
} from '.';
|
||
|
||
export const CONVERSATION_SIGNATURE = 'conversation';
|
||
|
||
/**
|
||
* @brief RTC & AIGC 配置。
|
||
* @notes 更多参数请参考
|
||
* https://www.volcengine.com/docs/6348/1404673?s=g
|
||
*/
|
||
export class ConfigFactory {
|
||
BaseConfig = {
|
||
/**
|
||
* @note 必填, RTC AppId 可于 https://console.volcengine.com/rtc/listRTC?s=g 中获取。
|
||
*/
|
||
AppId: '67e11a296ff39301ed7429aa',
|
||
/**
|
||
* @brief 非必填, 按需填充。
|
||
*/
|
||
BusinessId: undefined,
|
||
/**
|
||
* @brief 必填, 房间 ID, 自定义即可,例如 "Room123"。
|
||
*/
|
||
// RoomId: 'demo01',
|
||
// /**
|
||
// * @brief 必填, 当前和 AI 对话的用户的 ID, 自定义即可,例如 "User123"。
|
||
// */
|
||
// UserId: 'demo01',
|
||
// /**
|
||
// * @brief 必填, RTC Token, 由 AppId、RoomId、UserId、时间戳等等信息计算得出。
|
||
// * 测试跑通时,可于 https://console.volcengine.com/rtc/listRTC?s=g 列表中,
|
||
// * 找到对应 AppId 行中 "操作" 列的 "临时Token" 按钮点击进行生成, 用于本地 RTC 通信进房鉴权校验。
|
||
// * 正式使用时可参考 https://www.volcengine.com/docs/6348/70121?s=g 通过代码生成 Token。
|
||
// * 建议先使用临时 Token 尝试跑通。
|
||
// * @note 生成临时 Token 时, 页面上的 RoomId / UserId 填的与此处的 RoomId / UserId 保持一致。
|
||
// */
|
||
// Token: '00167e11a296ff39301ed7429aaQgCBehoDv2DnZz+b8GcGAGRlbW8wMQYAZGVtbzAxBgAAAD+b8GcBAD+b8GcCAD+b8GcDAD+b8GcEAD+b8GcFAD+b8GcgANQXUJb6Yt/biLcxDjYTT6Y/jJR3QRGoF3lUAfBn0ltq',
|
||
/**
|
||
* @brief 必填, TTS(语音合成) AppId, 可于 https://console.volcengine.com/speech/app?s=g 中获取, 若无可先创建应用。
|
||
* @note 创建应用时, 需要选择 "语音合成" 服务, 并选择对应的 App 进行绑定。
|
||
*/
|
||
TTSAppId: '6735945315',
|
||
/**
|
||
* @brief 已开通需要的语音合成服务的token。
|
||
* 使用火山引擎双向流式语音合成服务时必填。
|
||
*/
|
||
TTSToken: undefined,
|
||
/**
|
||
* @brief 必填, ASR(语音识别) AppId, 可于 https://console.volcengine.com/speech/app?s=g 中获取, 若无可先创建应用。
|
||
* @note 创建应用时, 需要按需根据语言选择 "流式语音识别" 服务, 并选择对应的 App 进行绑定。
|
||
*/
|
||
ASRAppId: '1322261305',
|
||
/**
|
||
* @brief 已开通流式语音识别大模型服务 AppId 对应的 Access Token。
|
||
* 使用流式语音识别大模型服务时该参数为必填。
|
||
*/
|
||
ASRToken: undefined,
|
||
};
|
||
|
||
Model: AI_MODEL = Model[SCENE.CUSTOM];
|
||
|
||
/**
|
||
* @note 必填, 音色 ID, 可具体看定义。
|
||
* 音色 ID 获取方式可查看 VOICE_TYPE 定义
|
||
* 此处已有默认值, 不影响跑通, 可按需修改。
|
||
*/
|
||
VoiceType = Voice[SCENE.CUSTOM];
|
||
|
||
/**
|
||
* @note 大模型 System 角色预设指令, 可用于控制模型输出, 类似 Prompt 的概念。
|
||
*/
|
||
Prompt = Prompt[SCENE.CUSTOM];
|
||
|
||
/**
|
||
* @note 智能体启动后的欢迎词。
|
||
*/
|
||
WelcomeSpeech = Welcome[SCENE.CUSTOM];
|
||
|
||
ModeSourceType = ModelSourceType.Available;
|
||
|
||
/**
|
||
* @note 非必填, 第三方模型才需要使用, 用火山方舟模型时无需关注。
|
||
*/
|
||
Url? = '';
|
||
|
||
/**
|
||
* @note 非必填, 第三方模型才需要使用, 用火山方舟模型时无需关注。
|
||
*/
|
||
APIKey? = '';
|
||
|
||
/**
|
||
* @brief AI Robot 名
|
||
* @default RobotMan_
|
||
*/
|
||
BotName = 'RobotMan_';
|
||
|
||
/**
|
||
* @brief 是否为打断模式
|
||
*/
|
||
InterruptMode = false;
|
||
|
||
get LLMConfig() {
|
||
const params: Record<string, unknown> = {
|
||
Mode: AI_MODE_MAP[this.Model || ''] || AI_MODEL_MODE.CUSTOM,
|
||
EndPointId: ARK_V3_MODEL_ID[this.Model],
|
||
BotId: LLM_BOT_ID[this.Model],
|
||
MaxTokens: 1024,
|
||
Temperature: 0.5,
|
||
TopP: 0.3,
|
||
SystemMessages: [this.Prompt as string],
|
||
UserMessages:[],
|
||
Prefill: true,
|
||
ModelName: this.Model,
|
||
ModelVersion: '1.0',
|
||
WelcomeSpeech: this.WelcomeSpeech,
|
||
ModeSourceType: this.ModeSourceType,
|
||
APIKey: this.APIKey,
|
||
Url: this.Url,
|
||
Feature: JSON.stringify({ Http: true }),
|
||
};
|
||
if (this.Model === AI_MODEL.VISION) {
|
||
params.VisionConfig = {
|
||
Enable: true,
|
||
};
|
||
}
|
||
return params;
|
||
}
|
||
|
||
get ASRConfig() {
|
||
return {
|
||
Provider: 'volcano',
|
||
ProviderParams: {
|
||
/**
|
||
* @note 本示例代码使用的是小模型语音识别, 如感觉 ASR 效果不佳,可尝试使用大模型进行语音识别。
|
||
* 大模型的使用详情可参考 https://www.volcengine.com/docs/6348/1404673#volcanolmasrconfig?s=g
|
||
*/
|
||
Mode: 'smallmodel',
|
||
AppId: this.BaseConfig.ASRAppId,
|
||
...(this.BaseConfig.ASRToken ? { AccessToken: this.BaseConfig.ASRToken } : {}),
|
||
/**
|
||
* @note 具体流式语音识别服务对应的 Cluster ID,可在流式语音服务控制台开通对应服务后查询。
|
||
* 具体链接为: https://console.volcengine.com/speech/service/16?s=g
|
||
*/
|
||
Cluster: 'volcengine_streaming_common',
|
||
},
|
||
VADConfig: {
|
||
SilenceTime: 600,
|
||
SilenceThreshold: 200,
|
||
},
|
||
VolumeGain: 0.3,
|
||
};
|
||
}
|
||
|
||
get TTSConfig() {
|
||
return {
|
||
Provider: 'volcano',
|
||
ProviderParams: {
|
||
app: {
|
||
AppId: this.BaseConfig.TTSAppId,
|
||
...(this.BaseConfig.TTSToken ? { Token: this.BaseConfig.TTSToken } : {}),
|
||
Cluster: TTS_CLUSTER.TTS,
|
||
},
|
||
audio: {
|
||
voice_type: this.VoiceType,
|
||
speed_ratio: 1.0,
|
||
},
|
||
},
|
||
IgnoreBracketText: [1, 2, 3, 4, 5],
|
||
BidirectionAdditions:{
|
||
disable_markdown_filter:true,
|
||
}
|
||
};
|
||
}
|
||
|
||
get aigcConfig() {
|
||
return {
|
||
Config: {
|
||
LLMConfig: this.LLMConfig,
|
||
TTSConfig: this.TTSConfig,
|
||
ASRConfig: this.ASRConfig,
|
||
InterruptMode: this.InterruptMode ? 0 : 1,
|
||
SubtitleConfig: {
|
||
SubtitleMode: 0,
|
||
},
|
||
},
|
||
AgentConfig: {
|
||
UserId: this.BotName,
|
||
WelcomeMessage: this.WelcomeSpeech,
|
||
EnableConversationStateCallback: true,
|
||
ServerMessageSignatureForRTS: CONVERSATION_SIGNATURE,
|
||
},
|
||
};
|
||
}
|
||
}
|