é»è©±èªåå¿çã·ã¹ãã ã®QAã®ããã®èªåå¿çã·ã¹ãã ãäœã£ã話
ã¯ããã«
ããã«ã¡ã¯ãé»è©±AI SaaS IVRyã®AIãšã³ãžãã¢ã®çºç°ã§ãã
IVRyã¯åŸæ¥ã®ããã·ã¥åã®èªåå¿çã·ã¹ãã ã«çãŸãããLLMãç©æ¥µçã«æŽ»çšããAIé³å£°å¯Ÿè©±ã·ã¹ãã ãéçºããŠããŸãã2023幎åé ã«AI察話ã·ã¹ãã ã®éçºãéå§ããŠãã1幎åãå€ãã®äŒæ¥ã«å®éã«å°å
¥ãããã»ãŒæ¯é±æ°æ©èœãæ¹åã®ãªãªãŒã¹ãè¡ããŸã§ã«æé·ããŸããã
ããããå®éã®é³å£°å¯Ÿè©±ãããŒã¹ãšããAIé»è©±ã¢ããªã±ãŒã·ã§ã³ã®éçºã¯ãåŸæ¥ã®Webã¢ããªã±ãŒã·ã§ã³éçºãšã¯ç°ãªãç¬èªã®èª²é¡ãæ±ããŠããŸããæ¯é±ã®æ°æ©èœãæ¹ä¿®ãå®å®çã«ãªãªãŒã¹ããããšã¯ã決ããŠå®¹æãªã¿ã¹ã¯ã§ã¯ãããŸããã
æ¬èšäºã§ã¯ãé«éãã€å®å
šãªãªãªãŒã¹ãå®çŸããããã®QAã®å·¥å€«ã«ã€ããŠã玹ä»ããŸãã
QAã®éèŠæ§
ãããã¯ãéçºã«ãããŠãå質ä¿èšŒïŒQAïŒããã»ã¹ã¯æ¥µããŠéèŠãªåœ¹å²ãæãããŸããç¹ã«ãé«éãªãªãªãŒã¹ãµã€ã¯ã«ãç®æããœãããŠã§ã¢éçºã«ãããŠããã®éèŠæ§ã¯ãŸããŸãé«ãŸã£ãŠããŸãã
AIé»è©±ã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãã«ãããŠãWebã¢ããªã±ãŒã·ã§ã³ãšã®æå€§ã®éãã¯ãå®éã«é»è©±ããããŠã®ãã¹ããå¿ èŠããšããç¹ã§ãã
é»è©±èªåå¿çãµãŒãã¹ã«ãããŠãé»è©±ãç¹ãããªãããšã¯èŽåœçã§ãã
é³å£°ã®ã¯ãªãªãã£ãèªç¶ãªäŒè©±ã®æµããªã©ãå®éã®é話ã§ããæ€èšŒã§ããªãèŠçŽ ã倿°ååšããŸãã
äŸãã°ïŒ
- èªã¿äžãããã¹ãã®èšå®ã¯æ£ãããŠãAIãèªã¿æ¹ãééã£ãŠèªã¿äžããŠããŸã
- äž»èªãçç¥ããŠçºè©±ãããšèªèãããªã
- ãã€ãºã«ããèªè粟床ã«åé¡ã¯ãªãã
ãªã©ãããªãšãŒã·ã§ã³ã¯æ§ã ã§ãã
ãŸããIVRyã§ã¯æ åœè ã«ããã«ãŒã«èšå®æ©èœããé話履æŽããããŸãããã以äžã®ç¹ã確èªãå¿ èŠã§ãïŒ
- èšå®ãããã«ãŒã«éãã®ã·ããªãªãå®è¡ãããŠããã
- é話履æŽãçä¿¡éç¥ãšãã£ãé»è©±ä»¥å€ã®éšåïŒäž»ã«Webã¢ããªã±ãŒã·ã§ã³ïŒã®åäœã«åé¡ããªãã
ãã®ããã«é»è©±æåãšWebã¢ããªã±ãŒã·ã§ã³ã®äž¡æ¹ãåžžã«æ°ã«ãããªããéçºãããå¿ èŠããããŸãã
æ¢åã®QAææ³ã®éç
éåžžã®Webã¢ããªã±ãŒã·ã§ã³ã§ããã°èªåã§QAãè¡ãããŒã«ã¯è²ã ãšããããã§ããã§ããå®éã«é»è©±ããããå Žåã¯ã¹ã¿ã³ããŒããªãœãªã¥ãŒã·ã§ã³ãèŠã€ããããšã¯ã§ããŸããã§ããã
ãŸããã¯ã©ãŠããœãŒã·ã³ã°ãªã©ãå©çšããããšã§å®äŸ¡ã«ãã¹ããå®è¡ã§ããªããæ€èšããŸãããã以äžã®çç±ããæå¿µããŸããïŒ
- å®éã«é話ããããã«å人ã®é»è©±ãå©çšããªããã°ãªããªã
- QAã®ããã«çްããæç€ºãæ¯åäœæããå¿ èŠããã(ãã®éããã£ãŠãããä¿èšŒããªã)
- çµäºãŸã§ã®æéãšã³ã¹ããèŠèŸŒãããæ°è»œã«ãã¹ããå®è¡ã§ããªã
次ã«ãã·ã¹ãã ã§èªååã§ããªããèããŸãããã¢ã€ãã¢ãšããŠãããã·ã¥ãããŒã¹ãšããIVRã®å Žåã¯ãå®éã«DTMFä¿¡å·ãçºä¿¡ããããšã§èªååãã§ãããã§ãã(æ¬èšäºã§ã¯ç޹ä»ããŸãããããã¡ãã®èªååããŒã«ãäœæããŸããïŒ
ããããé³å£°èªèãããŒã¹ã«ããã·ã¹ãã ã®å Žåã¯ããã€ãã®ããŒãã«ãä¹ãè¶ããªããã°ãªããŸããã
- ã·ã¹ãã åŽã®çºè©±ã®ç¶æ³ãèªè
- å®éã«çºè©±ãè¡ã
- ãã®çµæãè©äŸ¡ãã
ããã€ãèãããã®ã®ããªããªããã®ããŒãã«ããã¹ãŠã¯ãªã¢ã§ãããçµå±äººéãé 匵ãããšã§æ ä¿ããŠããŸãããããããµãŒãã¹èŠæš¡ã倧ãããªãã«ã€ããŠããããéçãæ¥ããããæ¬è °ããããŠæ€èšãé²ããŸãããçµæã以äžã®ããæ¹ã«è¡ãçããŸããã
é³å£°èªèAIã«å¯Ÿããæ¶é»ã·ãã¥ã¬ãŒã·ã§ã³æ©èœ
åºæ¬çãªã¢ã€ãã¢
SpeechToText(以äžSTT)ãå©çšããIVRSystemã®çºè©±å
容ãèªèããTextToSpeech(以äžTTS)ãå©çšããŠãã®ã¬ã¹ãã³ã¹é³å£°ãçæããŸãã
ãªã¢ã«ã¿ã€ã ã«é³å£°å
容ãååŸããçºè©±ã®åãç®(IVRSystemåŽã®çºè©±çµäº)ãèŠã€ãããã
Twilioã®MediaStreamæ©èœãå©çšããŸãããã®ãšããStreamåè©ã§ track="inbound" ãæå®ããŠãããšIVRSystemããã®çºè©±ã®ã¿ãååŸããããšãã§ããŸãã
åŠçã®æµã
- ãã¹ãã±ãŒã¹ã®äŒè©±ã¹ã¯ãªãããçšæ
- ã·ã¹ãã ã§IVRSystemã«å®éã«æ¶é»
- IVRSystemåŽã®çºè©±ãèªèããã¬ã¹ãã³ã¹çºè©±ãåãããã©ãããå€å®ã
- ã·ããªãªã«å¿ããŠTTSé³å£°ãåç
- IVRSystemåŽãçºè©±ã«å¿ããŠæ¬¡ã®çºè©±ããããªã
- (4ã«æ»ãçºè©±çµäºãŸã§ã«ãŒã)
- å®äºåŸãé話履æŽãé¢é£ã¢ã¯ã·ã§ã³ãæåŸ éãã§ããããæ¯èŒ
å®éã®èªåãã¹ãé話
å®éã®é話é³å£°ããèããã ããã
å®éã®é話é³å£°
ãµã³ãã«ã§ã¯TTSé³å£°ãå©çšããŠãããããè¥å¹²ã®äžèªç¶ãã¯ãããŸãããå®éã«é»è©±ãã§ããŠããã®ããæåŸ
éãåããŠããã®ãããšããæäœéå®ãããã©ã€ã³ã¯èªåã§æ€èšŒã§ãããã§ãã
ã¡ãªã¿ã«ãæ¬èšäºã§ã¯TTSãããŒã¹ã«ç޹ä»ããŠããŸãããå®éã®é²é³é³å£°ãæµãããšãã§ããã®ã§ããããããšãããªã¢ãªãã£ããå¯Ÿè©±ã§æ€èšŒãå¯èœã§ãã
æ€èšŒã·ã¹ãã æŠèŠ
æŠèŠå³
- Caller
- ãã¹ãçšã®æ¶é»ãè¡ããåŠçãšããŠã¯é»è©±ãããããã®æã«Twilioã®åæ¹åã¹ããªãŒã æ©èœãå©çšããŠãã¹ãã·ã¹ãã çšã®websocketã«åããŠinboundæ¥ç¶ãæ§ç¯ããŸããããã«ããããã¹ã察象ã·ã¹ãã ããã®èªåå¿ççºè©±ãé³å£°ã¹ããªãŒã ãšããŠååŸã§ããŸãã
- DialogHandler
- ååŸããé³å£°ã¹ããªãŒã ãå ã«äŒè©±ãå¶åŸ¡ãããé³å£°ãçããŒã¿ãããŠååŸã§ããã®ã§ããã®å 容ãå ã«ãã¹ãã·ã¹ãã ã®æ¬¡ã®è¡åãæ±ºå®ã»ããªã¬ãŒã§ããŸãã
- ä»åã¯ãIVRSystemã®çºè©±ãçµãã£ããããã·ããªãªã«æ²¿ã£ãŠå¿çããããããšãè¡ããŸããé©åœãªææ³ã§çµè©±ãæ€ç¥ããããã·ããªãªã®æ¬¡ã®çºè©±ã«é²ãããã«ãããšãæ¬äŒŒçã«é»è©±ãé²ããããšãã§ããŸãã
- Evaluator
- èªåã§å®è¡ãããçºè©±ã®å±¥æŽãååŸããæå³éãã«åããããè©äŸ¡ããŸãã
- TwilioããŒã¹ã§ããã°Twilioãããã°ãååŸã§ããŸãããã¢ããªã±ãŒã·ã§ã³åŽã§ä¿åãããã°ã®å 容ãããšã«è©äŸ¡ããããšãå¯èœã§ãã(ãã¹ããååã§ããããã«ãã°ãåºããŠããå¿ èŠããããŸã)
- æ¥ä»èªèãªã©æé垯ã«ãã£ãŠå€åãããã®ãããå Žåãç·šéè·é¢ã«ããè©äŸ¡ããããªã©ã®å·¥å€«ãå¿ èŠã§ãã
â»å³äžã®call.createãªã©ã¯twilioã®åŠçãã€ã¡ãŒãžããŠããŸãã
ãã¹ãã·ããªãªäŸ
"scenarios": [
{
"title": "Test Case 1",
"push_actions": [
{
"send_digit": "2"
},
{
"send_digit": "1"
}
],
"speech_actions": [
{
"say": "ã¢ã€ããªãŒã®çºç°ã§ãã"
},
{
"say": "ç°äžãã"
},
{
"say": "ãŒããããããŒããã€ãããããµã³ããšã³ããŽããã¯ãã·ãããããã§ã"
},
{
"say": "ã¯ã"
},
{
"say": "é話ã®ãã¹ããããŠããŸã"
}
],
"expect": [
{
"action": "notification",
"notification_text": "以äžã®å
容ã§ãåãåãããæ¿ããŸããã\n\nã客æ§ã®äŒç€Ÿåãšãåå: ã¢ã€ããªãŒã®çºç°\næ
åœè
: ç°äžãã\né»è©±çªå·: 08012345678\nãåãåããå
容: é話ã®ãã¹ããããŠããŸãã\nâ»é³å£°èªèçµæã¯äžæ£ç¢ºãªå¯èœæ§ããããŸã"
},
{
"action": "complete"
}
]
},
æ¬äŒŒã³ãŒã
æ¬äŒŒã³ãŒãã§ã¯ãããŸããã以äžã®ãããªå 容ã§å®çŸã§ããŸãã
class Caller:
function initiate_call():
twiml = create_twiml_with_stream()
Twilio.calls.create(twiml, to, from)
function create_twiml_with_stream():
twiml = new VoiceResponse()
twiml.append(Pause(length=5))
start = Start()
stream = Stream(
name="TestStream",
url="wss://your-websocket-url.com/ws",
track="inbound"
)
stream.parameter(name="TestCaseId", value=scenario_id)
start.append(stream)
twiml.append(start)
twiml.append(Pause(length=60))
twiml.append(Hangup())
return twiml
class DialogHandler:
initialize WebSocket connection
function process_dialog():
receive media stream from Twilio via WebSocket
payload = process_audio(media_stream)
if is_IVRsystem_speaking:
manage_IVRsystem_turn(payload)
else:
manage_system_turn(payload)
function manage_IVRsystem_turn(payload):
if detect_end_turn(payload):
end_IVRsystem_turn()
start_system_turn()
else:
reset IVRsystem_silence_duration
function manage_system_turn(payload):
if not system_speaking:
start_system_speaking()
elif detect_IVRsystem_speech(payload):
if detect_end_turn(payload):
end_system_turn()
start_IVRsystem_turn()
class Evaluator:
function evaluate_results():
retrieve call logs from DB
compare actual responses with expected responses
calculate performance metrics
generate evaluation report
å°å ¥å¹æ
ãã®èªåãã¹ãæŠç¥ã®å°å
¥ã«ããã芳ç¹ã«ããŠ100以äžèŠãããã«30åçšåºŠã®æ¶é»ãå¿
èŠã ã£ããšãããèªååã§ããŸããã人åã§1æéå²ããŠããäœæ¥ãèªååã§ããããšã¯éåžžã«å€§ããã§ãã
å®éã«æ¶é»ããQAã¯ã倿Žãå
¥ããç®æã«ç¹ã«éå®ããããšãã§ããããã«ãªã£ãã®ã§å¹çãè¯ããªããå質æ
ä¿ã ãã§ãªãããªãªãŒã¹é »åºŠã®åäžã«ãç¹ãããŸããã
ä»åŸã®åãçµã¿
çŸåšã®ææ³ã¯äºåã«äœæããã·ããªãªãšæ±ºããããæèšã«ããQAãäžå¿ã§ãã
ä»åŸã¯ã·ããªãªããŒã¹ã§ã¯ãªããAIã«End-to-Endã§å¯Ÿè©±ãããŠå質ãè©äŸ¡ããããèªã¿äžãã®ã€ã³ãããŒã·ã§ã³ã®è©äŸ¡ãããã€ãºåã§ã®å¯Ÿè©±ç¶æ³ã®åçŸãªã©ãèªååã§ãããšãããã©ãã©ãå¢ãããŠããããšèããŠããŸãã
ãŸãšã
AI察話ãããã¯ããæ°å€ãçºè¡šãããŠããŸããããããã¯ããšããŠæäŸããã«ã¯å質æ ä¿ãéèŠã§ããIVRyã§ã¯å®éã«æ¶é»ããããšãããŸã§èªååããå¹ççãªéçºãšå質æ ä¿ã«åãçµãã§ããŸãã
ãšã¯ãããå®éã«çºè©±ãããšããè©äŸ¡ã¯é»è©±ã¢ããªã±ãŒã·ã§ã³ã§ã¯ã©ãããŠãå¿
èŠã§ãã
èªåã®é»è©±QAã®ä»çµã¿ãäœã£ãŠãããšããããŸã å°ãªãã®ã§ã¯ãªãã§ããããã
ãèå³ããæ¹ãæ¯éIVRyã§æ°ããQAãéæããŠã¿ãŠãã ããïŒïŒ
Discussion