Spring/프로젝트 코드 리뷰
Asterisk : AI 음성처리 시스템 흐름 및 설정
code2772
2024. 11. 8. 10:37
728x90
반응형
Asterisk와 AI 음성처리 시스템의 대화 흐름을 정리하면서 간단하게 예시를 들어보겠습니다.
사전에 Asterisk PBK 간단한 설명/설정과 구조에 대해서 확인하기 위해서는 하단 링크를 이동하세요
https://hunseop2772.tistory.com/363
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
이러한 대화 시스템은:
- 사용자의 음성을 텍스트로 변환
- 텍스트에서 의도를 파악
- 적절한 응답을 생성
- 응답을 음성으로 변환하여 전달 하는 과정을 거칩니다.
반응형