
기능 | AI 스마트 고객 서비스 시나리오의 적용 |
RTC | 스트리밍 전송 기술은 음성 및 비디오 데이터의 연속성과 안정성을 보장하여 지연과 지터를 줄이고 실제 고객 서비스 통화에 비슷한 고수준의 체험을 제공합니다. 사용자는 실제 상담사와 대화하듯이 스마트 고객 서비스 시스템과 더 자연스러운 대화를 나눌 수 있으며, 이러한 인터랙티브는 사용자 만족도를 크게 향상시킬 수 있습니다. |
Conversational AI | Tencent Conversational AI 솔루션은 고객이 여러 AI 대형 모듈 서비스를 유연하게 접속할 수 있도록 지원하며, AI와 사용자 간의 RTC 인터랙티브를 구현하여 업무 시나리오에 부합하는 Conversational AI 능력을 구축합니다. Tencent Real-Time Communication(Tencent RTC)의 글로벌 저지연 전송을 기반으로 음성 대화 지연 시간이 1초에 불과하며 대화 효과가 자연스럽고 사실적이며, 접속이 간편하고 즉시 사용할 수 있습니다. |
STT | STT 모듈은 사용자의 음성 스트림을 실시간으로 포착하여 텍스트로 변환한 후 LLM에 전송하여 처리합니다. STT 모듈은 TRTC의 초저지연 오디오 파이프라인과 고급 오디오 처리 능력, AI 노이즈 감소 및 에코 제거를 기반으로 하여, 소음이 많은 환경에서도 선명하고 정확한 전사를 제공합니다. |
LLM | LLM 기술은 지능형 음성 고객 서비스가 대화의 맥락을 더 잘 이해할 수 있도록 하여 일관된 대화 교류를 가능하게 합니다. LLM은 대화의 의미와 맥락 정보를 포착하고사용자 의도를 인식하며, 이전 대화 내용을 현재 대화 내용과 연결할 수 있습니다. |
TTS | 제3자 TTS 연동을 지원합니다.모듈에 개인화된 학습 데이터를 도입하거나 모듈 매개변수를 조정하여 특정 요구 사항에 부합하는 음성 출력을 생성할 수 있습니다. 지능형 음성 고객 서비스는 사용자의 선호도나 특정 시나리오의 요구에 따라 다양한 음성 스타일을 제공할 수 있습니다. |



TRTCAppSceneAudioCall 또는 디지털 휴먼 영상 고객 서비스: TRTCAppSceneVideoCall을 사용하는 것을 권장합니다.// 마이크 수집을 시작하고 현재 시나리오를 음성 모드(고소음 억제 능력, 강약 네트워크 저항성)로 설정합니다.mCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_SPEECH);
self.trtcCloud = [TRTCCloud sharedInstance];// 마이크 수집을 시작하고 현재 시나리오를 음성 모드(고소음 억제 능력, 강약 네트워크 저항성)로 설정합니다.[self.trtcCloud startLocalAudio:TRTCAudioQualitySpeech];
// 마이크 수집을 시작하고 현재 시나리오를 음성 모드(고소음 억제 능력, 강약 네트워크 저항성)로 설정합니다.trtcCloud.startLocalAudio(TRTCAudioQuality.speech);
await trtc.startLocalAudio({ option: { profile: TRTC.TYPE.AUDIO_PROFILE_STANDARD }});
// 마이크 수집을 시작하고 현재 scene을 음성 모드로 설정합니다.// 높은 노이즈 억제 능력을 가지며 강약 네트워크 저항력이 있습니다.ITRTCCloud* trtcCloud = CRTCWindowsApp::GetInstance()->trtc_cloud_;trtcCloud->startLocalAudio(TRTCAudioQualitySpeech);
// 마이크 수집을 시작하고 현재 scene을 음성 모드로 설정합니다.// 높은 노이즈 억제 능력을 가지며 강약 네트워크 저항력이 있습니다.AppDelegate *appDelegate = (AppDelegate *)[[NSApplication sharedApplication] delegate];[appDelegate.trtcCloud startLocalAudio:TRTCAudioQualitySpeech];
STTConfig, LLMConfig, TTSConfig에 입력합니다.STTConfig 구성 방법을 설명합니다.{"Language": "zh","VadSilenceTime": 1000}
LLMConfig 구성 방법을 설명합니다.필드 | 유형 | 필수 | 설명 |
LLMType | String | 예 | 대형 모델 유형으로, OpenAI API 프로토콜을 준수하는 대형 모델은 모두 openai로 입력합니다. |
Model | String | 예 | 구체적인 모듈 이름, 예를 들어 gpt-4o, deepseek-chat. |
APIKey | String | 예 | 대형 모델의 APIKey. |
APIUrl | String | 예 | 대형 모델의 APIUrl. |
Streaming | Boolean | 아니요 | 스트리밍 여부입니다. 기본값은 false이며 true 입력을 권장합니다. |
SystemPrompt | String | 아니요 | 시스템 프롬프트. |
Timeout | Float | 아니요 | 초과 시간입니다. 값의 범위는 [1, 50]이며 기본값은 3초입니다(단위: 초). |
History | Integer | 아니요 | LLM의 컨텍스트 라운드 설정합니다.기본값은 0(컨텍스트 관리 없음)이며 최대값은 50(최근 50라운드의 컨텍스트 관리 제공)입니다. |
MaxTokens | Integer | 아니요 | 출력 텍스트의 최대 token 제한. |
Temperature | Float | 아니요 | 샘플링 온도. |
TopP | Float | 아니요 | 샘플링 선택 범위로 출력 token의 다양성을 제어합니다. |
UserMessages | Object[] | 아니요 | 사용자 프롬프트. |
MetaInfo | Object | 아니요 | 커스텀 매개변수는 요청의 body에 포함되어 대형 모듈에 전달됩니다. |
{"LLMType": "openai","Model": "gpt-4o","APIKey": "api-key","APIUrl": "https://api.openai.com/v1/chat/completions","Streaming": true,"SystemPrompt": "개인 비서입니다""Timeout": 3.0,"History": 5,"MetaInfo": {},"MaxTokens": 4096,"Temperature": 0.8,"TopP": 0.8,"UserMessages": [{"Role": "user","Content": "content"},{"Role": "assistant","Content": "content"}]}
TTSConfig 구성 방법을 설명합니다.필드 | 유형 | 필수 | 설명 |
TTSType | String | 예 | 고정값: 'flow'. |
VoiceId | String | 예 | |
Model | String | 예 | TTS 모델 버전입니다. 현재 기본값: flow_01_turbo. |
Speed | Float | 아니요 | 말속도입니다. 범위: [0.5, 2.0]. 기본값: 1.0. |
Volume | Float | 아니요 | 음량입니다. 범위: [0, 10]. 기본값: 1.0. |
Pitch | Integer | 아니요 | 음조 조정입니다. 범위: [-12, 12]. 기본값: 0. |
Language | String | 아니요 | 언어 ID: zh(중국어), en(영어), yue(광둥어). |
{"TTSType": "flow","VoiceId": "v-female-R2s4N9qJ","Model": "flow_01_turbo","Speed": 1.0,"Volume": 1.0,"Pitch": 0,"Language": "zh"}
STTConfig, LLMConfig 및 TTSConfig 구성 설명:RoomId는 클라이언트가 입장한 RoomId와 일치해야 하며, 방 번호 유형(숫자 방 번호, 문자열 방 번호)도 동일해야 합니다(즉, 로봇과 사용자가 동일한 방에 있는지 확인해야 합니다).TargetUserId는 클라이언트 사용자가 방에 입장할 때 사용한 UserId와 일치해야 합니다.LLMConfig와 TTSConfig는 모두 JSON 문자열이며 Conversational AI를 성공적으로 시작하려면 올바르게 구성해야 합니다.{"type": 10000, // 10000은 실시간 자막 전송을 나타냅니다"sender": "user_a", // 발화자의 userid입니다"receiver": [], // 수신자 userid 목록입니다.해당 메시지는 실제로 방 내에서 브로드캐스트됩니다"payload": {"text":"", // 음성에서 인식된 텍스트입니다"translation_text":"", // 번역된 텍스트."start_time":"00:00:01", // 이 문장의 시작 시간입니다"end_time":"00:00:02", // 이 문장의 종료 시간입니다"roundid": "xxxxx", // 한 라운드 대화의 고유 식별자입니다"end": true // true인 경우, 이 문장이 완전한 문장임을 나타냅니다}}
{"type": 10001, // AI 로봇의 상태"sender": "user_a", // 발신자 userid입니다, 여기는 로봇의 id입니다."receiver": [], // 수신자 userid 목록입니다.해당 메시지는 실제로 방 내에서 브로드캐스트됩니다."payload": {"roundid": "xxx", // 한 라운드 대화의 고유 식별자입니다"timestamp": 123,"state": 1, // 1 듣는 중 2 생각 중 3 말하는 중 4 중단됨.}}
@Overridepublic void onRecvCustomCmdMsg(String userId, int cmdID, int seq, byte[] message) {String data = new String(message, StandardCharsets.UTF_8);try {JSONObject jsonData = new JSONObject(data);Log.i(TAG, String.format("receive custom msg from %s cmdId: %d seq: %d data: %s", userId, cmdID, seq, data));} catch (JSONException e) {Log.e(TAG, "onRecvCustomCmdMsg err");throw new RuntimeException(e);}}
func onRecvCustomCmdMsgUserId(_ userId: String, cmdID: Int, seq: UInt32, message: Data) {if cmdID == 1 {do {if let jsonObject = try JSONSerialization.jsonObject(with: message, options: []) as? [String: Any] {print("Dictionary: \\(jsonObject)")} else {print("The data is not a dictionary.")}} catch {print("Error parsing JSON: \\(error)")}}}
trtcClient.on(TRTC.EVENT.CUSTOM_MESSAGE, (event) => {let data = new TextDecoder().decode(event.data);let jsonData = JSON.parse(data);console.log(`receive custom msg from ${event.userId} cmdId: ${event.cmdId} seq: ${event.seq} data: ${data}`);if (jsonData.type == 10000 && jsonData.payload.end == false) {// 자막 중간 상태} else if (jsonData.type == 10000 && jsonData.payload.end == true) {// 한 마디가 끝났습니다}});
void onRecvCustomCmdMsg(const char* userId, int cmdID, int seq,const uint8_t* message, uint32_t msgLen) {std::string data;if (message != nullptr && msgLen > 0) {data.assign(reinterpret_cast<const char*>(message), msgLen);}if (cmdID == 1) {try {auto j = nlohmann::json::parse(data);std::cout << "Dictionary: " << j.dump() << std::endl;} catch (const std::exception& e) {std::cerr << "Error parsing JSON: " << e.what() << std::endl;}return;}}
void onRecvCustomCmdMsg(String userId, int cmdID, int seq, String message) {if (cmdID == 1) {try {final decoded = json.decode(message);if (decoded is Map<String, dynamic>) {print('Dictionary: $decoded');} else {print('The data is not a dictionary. Raw: $decoded');}} catch (e) {print('Error parsing JSON: $e');}return;}}
type | 설명 |
20000 | 커스텀 텍스트를 전송하여 ASR 프로세스를 건너뛰고 AI Service와 직접 텍스트로 소통합니다. |
20001 | 중단 신호를 전송하여 대화를 중단합니다. |
{"type": 20000, // 클라이언트에서 커스텀 텍스트 메시지를 전송합니다"sender": "user_a", // 발신자 userid입니다. 서버는 해당 userid가 유효한지 확인합니다"receiver": ["user_bot"], // 수신자 userid 목록입니다.로봇 userid만 기입하면 되며, 서버에서 해당 userid의 유효성을 확인합니다"payload": {"id": "uuid", // 메시지 ID입니다.문제 해결 시 uuid를 사용할 수 있습니다"message": "xxx", // 메시지 내용입니다"timestamp": 123 // 타임스탬프입니다.문제 해결에 사용할 수 있습니다}}
{"type": 20001, // 클라이언트에서 중단 신호를 전송합니다"sender": "user_a", // 발신자 userid입니다. 서버는 해당 userid가 유효한지 확인합니다"receiver": ["user_bot"], // 수신자 userid 목록입니다.로봇 userid만 기입하면 되며, 서버에서 해당 userid의 유효성을 확인합니다"payload": {"id": "uuid", // 메시지 ID입니다.문제 해결 시 uuid를 사용할 수 있습니다"timestamp": 123 // 타임스탬프입니다.문제 해결에 사용할 수 있습니다}}
appkey, accesstoken, virtualmanProjectId를 가져옵니다.{"AvatarType" : "tencent", // 디지털 휴먼 유형입니다.현재 tencent만 지원합니다"Appkey" : "appkey", // 디지털 휴먼 서비스의 appkey입니다"AccessToken" : "accesstoken", // 디지털 휴먼 서비스의 accesstoken입니다"VirtualmanProjectId" : "virtualmanProjectId", // 디지털 휴먼 서비스의 virtualmanProjectId입니다"AvatarUserID" : "robot_xxxx", // RTC Engine 디지털 휴먼 사용자 userID입니다"DriverType": 1, // 디지털 휴먼 구동 방식(순수 텍스트 구동)"AvatarUserSig" : "eJw1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" // RTC Engine 디지털 휴먼 사용자 서명입니다}
trtc.on(TRTC.EVENT.REMOTE_VIDEO_AVAILABLE, ({ userId, streamType }) => {// To play the video image, you need to place an HTMLElement in the DOM,// which can be a div tag, assuming its id is `${userId}_${streamType}`const view = `${userId}_${streamType}`;trtc.startRemoteVideo({ userId, streamType, view });});
onUserVideoAvailable(userId, true) 알림을 수신하면 해당 화면에 재생 가능한 비디오 프레임이 도착한 것입니다.startRemoteView 인터페이스를 호출하여 원격 사용자의 비디오 화면을 재생할 수 있습니다.// 원격 사용자 robot_xxxx의 메인 비디오 스트림 화면 재생trtcCloud.startRemoteView("robot_xxxx", TRTCVideoStreamType.big, remoteViewId);
onUserVideoAvailable(userId, true) 알림을 수신하면 해당 화면에 재생 가능한 비디오 프레임이 도착한 것입니다.startRemoteView를 호출하여 원격 비디오 화면을 재생합니다.// 원격 화면 재생TXCloudVideoView cameraVideo = findViewById(R.id.txcvv_main_local);mCloud.startRemoteView("robot_xxxx", TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG, cameraVideo); // 고화질 대형 화면으로 원격 비디오 콘텐츠 재생
onUserVideoAvailable(userId, YES) 알림을 수신하면 해당 화면에 재생 가능한 비디오 프레임이 도착한 것입니다.startRemoteView를 호출하여 원격 비디오 화면을 재생합니다.- (void)startRemoteView {// 원격 화면 재생AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];[appDelegate.trtcCloud startRemoteView:@"robot_xxxx" streamType:TRTCVideoStreamTypeBig view:self.remoteVideoView];}
{"type": "function","function": {"name": "transfer_to_agent","description": "사용자가 명시적으로 인공 서비스를 요청하거나, 문제가 AI 능력을 초과하거나, 불만/환불 분쟁과 관련된 경우 호출합니다. 단순한 잡담이나 불평에는 호출하지 않습니다.","parameters": {"type": "object","properties": {"reason": { "type": "string", "description": "인공 서비스 전환 사유" },"department": { "type": "string", "enum": ["A/S", "기술", "불만"], "description": "대상 스킬 그룹" },"urgency": { "type": "string", "enum": ["low", "high"], "description": "긴급도" }},"required": ["reason"]}}}
LLMConfig 필드를 통해 STT 변환 후의 텍스트를 외부 LLM 또는 에이전트 플랫폼으로 전달합니다. 따라서 '커스텀 지식 베이스 주입/RAG 구현'의 본질은 LLM 단계에서 검색 기능을 갖춘 백엔드 또는 플랫폼을 연동하는 것입니다. RTC Engine은 각 LLM 요청에 다음 HTTP 요청 헤더를 자동으로 주입하며, 이는 비즈니스 백엔드에서 사용자 수준의 지식 베이스 라우팅, 인증 또는 로그 기록 등에 활용할 수 있습니다.요청 헤더 | 설명 |
X-Task-Id | 현재 AI 대화의 고유 작업 식별자입니다. |
X-Request-Id | 요청 식별자로, 동일 요청 재시도 시 일관되게 유지됩니다. |
X-Sdk-App-Id | TRTC 앱의 SdkAppId입니다. |
X-User-Id | 현재 대화의 사용자 ID입니다. |
X-Room-Id | 현재 TRTC 대화의 방 ID입니다. |
X-Room-Id-Type | 방 ID 유형입니다. "0" = 숫자형, "1" = 문자열형. |
/v1/chat/completions 인터페이스를 자체 구현하며, RTC Engine은 이를 일반 OpenAI 모델 호출로 간주합니다. 업무 인터페이스 내부에서 '지식 베이스 검색 → 컨텍스트 병합 → 실제 대형 모델 호출 → 스트리밍 반환'을 완료하며, RAG 로직은 완전히 자체 제어 가능합니다.LLMConfig를 통해 RTC Engine Conversational AI에 연동합니다.LLMConfig를 통해 RTC Engine Conversational AI에 연동합니다.LLMConfig 필드를 통해 주입되며, 중첩하여 사용할 수 있습니다. 아래에서는 LLMConfig에서 컨텍스트와 관련된 세 가지 필드, 즉 세 가지 메모리 계층을 소개합니다.필드 | 메모리 레이어 | 콘텐츠 | 정확도 | 시간 범위 | 관리 주체 |
SystemPrompt | 장기 기억 | 기본 인물 설정 + 사용자 장기 선호도 LLM 요약 | 중(요약) | 장기 | 비즈니스 측에서 요약을 유지 관리하고 병합합니다. |
UserMessages | 단기 기억 | 최근 N개의 외부 이전 메시지 기록 원문 | High(원문) | 단기 | 비즈니스 측에서 대화를 시작할 때 주입합니다. |
History | 통화 내 기억 | 현재 RTC Engine 통화 과정 중의 다중 대화 차례 | High(원문) | 해당 통화 | TRTC에서 자동으로 관리하며, 최대 50라운드입니다. |
SystemPrompt에 고객 서비스 담당자 설정 및 해당 사용자의 장기 프로필 요약을 작성하고, UserMessages에 사용자의 최근 상담 원문을 주입하며, History를 통해 현재 음성 통화 내 다중 라운드의 연속성을 확보합니다.{"LLMType": "openai","Model": "gpt-5.5","APIKey": "<your_openai_api_key>","APIUrl": "https://api.openai.com/v1/chat/completions","Streaming": true,"SystemPrompt": "당신은 특정 전자상거래 플랫폼의 AI 고객 서비스 어시스턴트로서, 오더 조회, 반품/교환, 물류 추적 및 상품 상담을 담당하며, 간결하고 친절하게 답변합니다.\\n\\n[사용자 장기 메모리 요약]\\n- 사용자 닉네임: 소명, 블랙 카드 회원, 간결하고 직접적인 응답 선호\\n- 자주 구매하는 카테고리: 디지털 3C, 이전 반품 분쟁 없음\\n- 지난 통화에서 '블루투스 이어폰 오른쪽 귀 소리 없음'을 상담했으며, 재페어링을 권장함","Timeout": 3.0,"History": 10,"UserMessages": [{ "Role": "user", "Content": "지난주에 구매한 이어폰을 반품하려고 합니다" },{ "Role": "assistant", "Content": "네, 귀하의 오더 NO.20260528001(블루투스 이어폰)은 7일 무이유 기간 내에 있으며, 반품을 처리해 드릴 수 있습니다." },{ "Role": "user", "Content": "환불은 얼마나 걸리나요?" },{ "Role": "assistant", "Content": "상품이 반송되어 수령된 후 1~3 영업일 이내에 결제 계좌로 환불됩니다." }]}
UserMessages의 단기 상담 원문과 SystemPrompt의 장기 요약 데이터는 어떻게 가져오나요?UserMessages 항목이 많을수록 LLM의 각 호출 시 Token 소모량이 증가하고 소요 시간이 길어지므로, 실제 요구 사항과 비용을 고려하여 적절히 구성해야 합니다.SystemPrompt 요약은 300 Token 이내로 제어하는 것이 좋으며, 너무 길어서 대화 컨텍스트 창을 과도하게 차지하여 LLM 첫 Token 지연 시간에 영향을 주지 않도록 해야 합니다.AgentConfig.InterruptSpeechDuration 및 STTConfig.VadSilenceTime 매개변수를 설정하여 중단 지연 시간을 높이거나 낮출 수 있습니다. 오인 중단 확률을 줄이기 위해 원거리 음성 억제 기능을 함께 활성화하는 것이 좋습니다.STTConfig.VadLevel을 2 또는 3으로 설정하면 우수한 원거리 음성 억제 성능을 얻을 수 있습니다.매개변수 | 유형 | 설명 |
AgentConfig.InterruptSpeechDuration | Integer | InterruptMode가 0일 때 사용되며 단위는 밀리초이고 기본값은 500ms입니다. 서버가 지속적으로 InterruptSpeechDuration 밀리초 동안 사람의 목소리를 감지하면 대화를 중단합니다. 예시 값: 500 |
STTConfig.VadSilenceTime | Integer | 음성 인식 VAD 시간의 범위는 [240, 2000]이며 기본값은 1000(단위: ms)입니다. 값이 작을수록 음성 인식 문장 분할이 더 빨라집니다. 예시 값: 1000 |
STTConfig.VadLevel | Integer | VAD의 원거리 음성 억제 기능(ASR 인식 효과에는 영향을 미치지 않음)의 범위는 [0, 5]이며 기본값은 0으로, 원거리 음성 억제 기능을 활성화하지 않음을 나타냅니다. 2로 설정하는 것을 권장하며, 이는 양호한 원거리 음성 억제 기능을 제공합니다. 소음이 많은 사무실 환경에서는 3으로, 더욱 소음이 심한 환경에서는 4 또는 5로 설정할 수 있습니다. 높은 VadLevel은 단일 음절을 잡음으로 필터링할 수 있으므로 주의하십시오. 예시 값: 2 |
metainfo라는 커스텀 필드를 추가할 수 있습니다. AI 서비스가 metainfo를 감지한 후, 커스텀 메시지를 통해 클라이언트 SDK로 푸시하여 metainfo의 전달을 완료합니다.chat.completion.chunk 객체를 스트리밍 방식으로 반환할 때, 동시에 meta.info의 chunk을 반환합니다.{"id":"chatcmpl-123","object":"chat.completion.chunk","created":1694268190,"model":"gpt-xxxx", "system_fingerprint": "fp_xxxx", "choices":[{"index":0,"delta":{"role":"assistant","content":""},"logprobs":null,"finish_reason":null}]}{"id":"chatcmpl-123","object":"chat.completion.chunk","created":1694268190,"model":"gpt-xxxx", "system_fingerprint": "fp_xxxx", "choices":[{"index":0,"delta":{"content":"Hello"},"logprobs":null,"finish_reason":null}]}// 다음과 같은 커스텀 메시지 추가합니다{"id":"chatcmpl-123","type":"meta.info","created":1694268190,"metainfo": {}}{"id":"chatcmpl-123","object":"chat.completion.chunk","created":1694268190,"model":"gpt-xxxx", "system_fingerprint": "fp_xxxx", "choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}]}
metainfo를 감지한 후 RTC Engine의 커스텀 메시지를 통해 전송합니다. 클라이언트는 SDK 콜백의 onRecvCustomCmdMsg 인터페이스를 통해 수신할 수 있습니다.{"type": 10002, // 커스텀 메시지"sender": "user_a", // 발신자 userid입니다, 여기는 로봇의 id입니다."receiver": [], // 수신자 userid 목록입니다.해당 메시지는 실제로 방 내에서 브로드캐스트됩니다."roundid": "xxxxxx","payload": {} // metainfo}
StartAIConversation의 RoomId가 클라이언트가 입장한 RoomId와 일치하고, 방 번호 유형(RoomIdType)도 일치하는지 확인합니다.LLMConfig와 TTSConfig의 JSON 문자열 형식이 올바른지 확인합니다.SecretId / SecretKey)가 유효하고, QcloudTRTCFullAccess 전체 읽기/쓰기 접근 권한이 부여되었는지 확인합니다.서비스 유형 | 오류 코드 | 에러의 설명 |
STT(ASR) | 30100 | 요청 시간 초과. |
| 30102 | 내부 오류. |
LLM | 30200 | LLM 요청 시간 초과. |
| 30201 | LLM 요청이 빈도 제한됩니다. |
| 30202 | LLM 서비스 반환 실패. |
TTS | 30300 | TTS 서비스 요청 시간 초과. |
| 30301 | TTS 요청이 빈도 제한됩니다. |
| 30302 | TTS 서비스 반환 실패. |
llm error Timeout on reading data from socket과 같은 메시지가 표시되면 일반적으로 LLM 요청이 시간 초과된 것입니다. LLMConfig의 Timeout 매개변수 값을 적절히 높일 수 있습니다(기본값은 3초). 또한 LLM의 첫 패킷 소요 시간이 3초를 초과하면 높은 대화 지연이 AI 대화 경험에 영향을 미칩니다. 특별한 요구 사항이 없는 경우 LLM의 첫 패킷 소요 시간을 최적화하는 것이 좋으며, 대화 지연 최적화를 참조하십시오.AgentConfig.FilterOneWord 매개변수가 false로 설정되었는지 확인하십시오(기본값은 true이며, 이는 사용자가 한 단어만 말한 문장을 필터링함을 의미합니다).매개변수 | 유형 | 설명 |
FilterOneWord | Boolean | 사용자가 한 글자만 말한 문장을 필터링할지 여부입니다. true는 필터링을 의미하고, false는 필터링하지 않음을 의미하며, 기본값은 true입니다. 예시 값: true |
onError 콜백에서 발생합니다. 일반적인 오류는 다음 표를 참조하십시오:오류 | 오류 코드 | 에러의 설명 |
ERR_TRTC_USER_SIG_CHECK_FAILED | -100018 | UserSig 검증에 실패했습니다. 서명이 올바른지 또는 만료되었는지 확인하십시오. |
ERR_TRTC_CONNECT_SERVER_TIMEOUT | -3308 | 방 입장 요청 시간 초과. 네트워크 연결이 끊겼는지 또는 VPN이 켜져 있는지 확인하십시오. |
ERR_TRTC_INVALID_SDK_APPID | -3317 | 입장 매개변수 SDKAppID 오류. TRTCParams.sdkAppId이 비어 있는지 확인하십시오. |
ERR_MIC_NOT_AUTHORIZED | -1317 | 마이크 장치에 권한이 없습니다. |
피드백