AISmarteasy – 시맨틱 커널 포크로 개발하기 5f – Worker – Audio
소프트웨어 봇 까지는 챗 방식의 텍스트 인터페이스도 중요하다.
그러나 가전이나 하드웨어 봇이라면, 텍스트로 커뮤니케이션 하기는 쉽지 않다. 오디오 인터페이스가 기본이 될 것 같다.
봇은 한계나 비용으로 인해 소프트 시대를 거쳐 하드웨어 시대로 넘어갈 것 같다. 하드웨어 봇 시대에 텍스트 인터페이스는 과거 유산이 될 것 같다. 하드웨어 봇은 사람과 비슷하니, 음성이 의사 전달 수단이 기본이고 그 다음 감각적인 부분들이 있을 것 같다.
하드웨어 봇을 생각해서 음성-말로 상호작용 한다면, 주의해야 할 것은 사람들은 아무때나 말을 건다는 거다. 상대는 들리는 말을 듣고 대응한다. 음성 녹음 버튼을 누루고 재생하면서 상호작용 할 수 없다.
음성으로 상호작용 할 때는 소음이나, 내가 전달하고자 하는 대상이 아닌 경우에도 내 음성을 들을 수 있다는 거다. 지금도 버스 타고 갈 때 음성으로 크게 전화하는 사람이 있긴 하지만, 대부분 카톡으로 텍스트로 대화한다. 두 가지 모드를 다 지원해야 한다. 텍스트로 잘 할 해야 할 때는 텍스트로, 음성으로 잘 할 수 있을 때는 음성으로. 상황에 맞게.
[음성 지원]
- 오디오를 사용하지 않아야 할 상황이 있을 수 있다. 오디오로 의사소통할 지 여부를 설정할 수 있어야 한다.
- 오디오가 있는 지 없는지 오디오 감지(audio detection) 기능이 있어야 한다.
- 오디오 감지가 가능하면, 오디오 없음(침묵; silence)으로 의사 전달을 할 수 있다. 잠깐 말하기를 멈추거나 좀 길게 말하기를 멈출 수 있다. 침묵 길이로, 말하기 멈춤과 말하기 종료라는 의사 표현이 가능하다.
- 녹음 시작이나 종료 버튼을 두지 않아도 된다. 가전 제품이나 하드웨어 봇에서 이런 것으로 의사 소통하는 것은 많이 불편하다.
- 말하기가 중단 될 때 마다 녹음된 오디오 파일을 whisper와 같은 음성 인식 ai 모델에 전달해 텍스트로 변환한다. 음성 인식은 비동기로 처리되어야 할 수 있기 때문에, 오디오 녹음 과정과 제어가 섞어지 않도록 한다. 녹음된 파일을 복사해서 ai 모델에 전달한다.
- 말하기가 종료 되면 음성 녹음을 끝낸다. 이미 중단을 통해 녹음은 끝난 상태다. 변환 된 텍스트를 프롬프트로 llm에게 전달하고 응답을 받는다. 응답을 받고나야 다음 뭘 말할 지를 정하니까, 응답 받으면 다시 이 과정을 시작하면 된다.
* 사용자가 오디오 감지 시작 설정을 하면, 음성 감지를 시작 한다. 소리가 나면 – 사람의 소리가 나면 – 그냥 소리인지 사람 소리인지 구분할 수 있어야 함 – 한 번의 말하기를 위한 음성 감지를 시작하면 된다. 말하기는 잠시 멈췄다가 할 수도 있고 끝낼 수도 있다. 말하기를 멈추는 것은 여러 번 가능하다. 말하기를 멈췄으면 끝내려고 하는지를 알기 위해 계속 들어야 한다. 말하기를 끝냈음을 나타내는 길이가 멈춤을 여러 번 했을 때 보다 더 길다면, 멈춤 다음의 멈춤은 처리 할 필요가 없는 멈춤이다. 말하기가 멈추면 변환 된 텍스트로 llm에게 전달하고 응답 받으면 된다.
[설계 결정]
- 오디오 처리를 위해 NAudio를 사용한다.
- 음성 지원 ai모델은 openai의 위스퍼를 사용한다.
- 오디오 감지는 우선은 소리의 크기로 한다. 사람 소리인지 구분은 차후에 한다.