Spring/프로젝트 코드 리뷰

Asterisk : AI 음성처리 시스템 흐름 및 설정

code2772 2024. 11. 8. 10:37
728x90
반응형

 

Asterisk와 AI 음성처리 시스템의 대화 흐름을 정리하면서 간단하게 예시를 들어보겠습니다.

 

사전에 Asterisk PBK 간단한 설명/설정과 구조에 대해서 확인하기 위해서는 하단 링크를 이동하세요

 

https://hunseop2772.tistory.com/363

 

Asterisk PBK 란? 간단한 설명/설정과 구조

Asterisk PBX( 사설교환기) 1. 개요통신회사에서 음성 및 메세징 발송 관리를 하면서 이번에  Astrisk를 활용한 음성 메세지 시스템을 구축하면서 간단하게 공부한 내용을 정리하게 되었다. Asterisk란

hunseop2772.tistory.com

 

 

1. 기본 대화 흐름도

 

 

2. 실제 대화 예시와 처리 과정

[dialog-flow]
; 1. 초기 인사
exten => s,1,Answer()
same => n,Playback(welcome)    ; "안녕하세요, AI 상담 시스템입니다."

; 2. 사용자 의도 파악
exten => intent,1,AGI(ai_handler.py,intent_recognition)
same => n,GotoIf($[${INTENT} = "inquiry"]?inquiry)    ; 문의사항
same => n,GotoIf($[${INTENT} = "complaint"]?complaint) ; 불만사항
same => n,GotoIf($[${INTENT} = "transfer"]?transfer)  ; 상담원 연결

; 3. 상황별 응답
[inquiry]
exten => s,1,NoOp(문의사항 처리)
same => n,AGI(tts_engine.py,"어떤 내용을 문의하시겠습니까?")
same => n,WaitForResponse()

[complaint]
exten => s,1,NoOp(불만사항 처리)
same => n,AGI(tts_engine.py,"불편을 드려 죄송합니다. 어떤 문제가 있으셨나요?")
same => n,WaitForResponse()

[transfer]
exten => s,1,NoOp(상담원 연결)
same => n,AGI(tts_engine.py,"상담원과 연결해드리겠습니다. 잠시만 기다려주세요.")
same => n,Queue(support)

 

3. 대화 시나리오 예시

시나리오 1: 일반 문의

시스템: "안녕하세요, AI 상담 시스템입니다. 무엇을 도와드릴까요?"
사용자: "인터넷 요금제 문의하고 싶습니다."
시스템: "인터넷 요금제 안내해 드리겠습니다. 원하시는 속도가 있으신가요?"
사용자: "100메가 요금제 알고 싶어요."
시스템: "100메가 요금제는 월 35,000원입니다. 자세한 설명을 들으시겠습니까?"

시나리오 2: 불만사항 처리

시스템: "안녕하세요, AI 상담 시스템입니다."
사용자: "인터넷이 자꾸 끊깁니다."
시스템: "불편을 드려 죄송합니다. 언제부터 문제가 발생했나요?"
사용자: "어제부터요."
시스템: "네, 확인해보니 해당 지역에 일시적인 장애가 있었네요. 지금은 복구된 상태입니다. 현재도 문제가 있으신가요?"

 

4. 대화 처리 코드 예시

class DialogManager:
    def __init__(self):
        self.context = {}# 대화 컨텍스트 저장

    def process_input(self, user_input):
        """사용자 입력 처리"""
# 음성을 텍스트로 변환
        text = self.speech_to_text(user_input)

# 의도 파악
        intent = self.analyze_intent(text)

# 응답 생성
        response = self.generate_response(intent, text)

# 텍스트를 음성으로 변환
        audio = self.text_to_speech(response)

        return audio

    def analyze_intent(self, text):
        """사용자 의도 분석"""
        intents = {
            '요금제': 'pricing',
            '문의': 'inquiry',
            '불만': 'complaint',
            '상담원': 'transfer'
        }

        for key, value in intents.items():
            if key in text:
                return value
        return 'unknown'

    def generate_response(self, intent, text):
        """응답 생성"""
        responses = {
            'pricing': '요금제 안내해드리겠습니다.',
            'inquiry': '어떤 내용을 문의하시겠습니까?',
            'complaint': '불편을 드려 죄송합니다.',
            'transfer': '상담원과 연결해드리겠습니다.'
        }

        return responses.get(intent, '죄송합니다. 다시 한 번 말씀해 주시겠습니까?')

 

5. 대화 품질 모니터링

[dialog-monitor]
; 대화 품질 모니터링
exten => _X.,1,Set(DIALOG_START=${EPOCH})
same => n,Set(CONFIDENCE_SCORE=${ASR_CONFIDENCE})
same => n,GotoIf($[${CONFIDENCE_SCORE} < 0.6]?clarify:continue)

; 명확화 요청
exten => clarify,1,AGI(tts_engine.py,"죄송합니다. 다시 한 번 말씀해 주시겠습니까?")
same => n,Goto(dialog-flow,s,1)

; 대화 지속
exten => continue,1,NoOp(대화 계속)
same => n,Return

이러한 대화 시스템은:

  1. 사용자의 음성을 텍스트로 변환
  2. 텍스트에서 의도를 파악
  3. 적절한 응답을 생성
  4. 응답을 음성으로 변환하여 전달 하는 과정을 거칩니다.
반응형