그저께 AI 버튜버 쪽으로 개발해보려고 했었는데, 이러한 이유들로 로컬 AI 캐릭터 쪽으로 방향을 바꾸는 게 더 좋을 것 같다고 생각했습니다. 전체적인 구상은 AI 버튜버와 비슷하지만, 로컬에 중점을 맞춘 버전이라고 보면 될 것 같습니다.
요즘 AI와 여자친구 롤플레이 대화를 즐기는 사람들이 많아지고 있는 것 같습니다. 롤플레이 AI를 제공하는 서비스나 프로그램들은 많지만, 대부분 사용자가 물어보는 질문에만 답하는 느낌이지 능동적으로 사용자에게 말을 거는 느낌은 아니었습니다.
진짜 여자친구 같은 느낌을 주려면 단순히 대화만 주고받는 것이 아니라, 내가 하는 활동이나 오늘 뭘 했는지에 대해 관심을 가지고 물어봐주는 것이 핵심이라고 생각했습니다.
이를 구현하기 위해 PC에서 어떤 프로그램이 실행되고 있는지, 어떤 인터넷 창이 열려있는지를 모니터링하거나, 전체 화면을 스크린샷으로 캡처해서 비전 모델로 분석하는 아이디어를 떠올렸습니다. 이렇게 하면 AI 여친이 나와 같은 화면을 보고 있다는 느낌을 줄 수 있지 않을까 생각했거든요.
여기서 중요한 것 중 하나는 총 딜레이를 감소시키는 것입니다. 로컬은 1대1 대화이고, 모델의 성능도 어느 정도 좋아야 하겠지만 너무 딜레이가 생긴다면 오히려 자연스럽지 않을 것입니다. 딱 사람이 적당히 생각하고 말을 하는 정도의 딜레이가 적당할 것 같습니다.
일단 개발 순서는 사용자와 대화하는거부터 시작해보겠습니다. 사용자와 대화하는 모델을 먼저 만들어보려고 합니다.
idle 상태도 있어야겠죠. 채팅이 안 올라올 때나 주제를 환기하고 싶을 때 일상 대화를 해보는 것입니다. 또는 거짓으로 지어낸 썰 같은 것을 푸는 것도 좋을 것 같아요.
모델은 제미나이 API를 사용할 것입니다. 4대 대형 모델 API 서비스(ChatGPT, Gemini, Claude, Grok)를 모두 테스트해본 결과 제미나이 모델이 비전 능력이 가장 좋았습니다. 또한 모델의 성능도 좋았고요.그리고 추후에는 로컬 모델로 확장할거 같습니다.
stream으로 날아온 응답이 다 도착할 때까지 마냥 기다릴 수는 없습니다. 이 사이에서도 지연을 최소화해야 하는데, stream 형식으로 날아올 때마다 즉각적으로 TTS로 변환해서 출력하게 하면 될 것 같습니다.
생각해보니 장기기억을 하는 기능이 있어야 하네요. 이건 RAG로 구현해야 될 것 같고, 벡터 데이터베이스는 Qdrant를 쓸 생각입니다. 채팅이 점점 길어지면 그만큼 인풋 토큰 비용이 커지거나 느려지기 때문에 대화를 5개 정도만 남겨놓고 앞 내용은 요약하거나 RAG에 메모리로 저장하는 방식을 고려하고 있습니다. JSON 형식 출력을 활용해서 RAG 데이터, 요약 데이터, 응답 데이터 이런 형식으로 출력하면 어떨까 생각도 하고 있습니다.
그 다음 단계는 이미지 인식입니다. 단순히 채팅만 하는 것이 아니라 화면을 보고 직접 마우스나 키보드 등을 조작하는 능력을 부여해주는 거죠. 스크린샷 분석은 이미지 특징 추출로 하면 될 것 같은데, 제미나이 모델의 비전 능력이 생각보다 좋아서 그냥 바로 이미지를 넣어서 응답을 생성하도록 해도 좋을 것 같습니다. 이미지 특징 추출을 로컬로 돌리면 그만큼 레이턴시가 발생하니까요.
게임하고 연동할 수도 있을까요? 오버워치나 롤, 발로란트 이런 게임들은 Overwolf에서 API를 제공합니다. 아니면 다른 API를 이용할 수도 있고요. 사용자가 하고 있는 게임 화면을 보고 대화를 하는 것입니다
MCP 서버랑도 연결할 수 있겠네요. 로컬 툴을 써서 기능을 확장할 수도 있겠습니다.
Live2D 또는 Mate Engine과 연동하는 작업은 가장 후순위가 될 것 같습니다. 모델의 행동 같은 경우도 괄호 안에 이 말에 대한 행동을 넣어서 포즈를 짓게 하면 좋을 것 같고, Live2D와 연동시키면 좋을 것 같습니다.
이후에도 다른 기능을 추가하고 싶은 게 있을 때마다 이 글을 업데이트하겠습니다.
소스코드는 오픈 소스로 공개할 예정입니다.
긴 글 읽어주셔서 감사합니다.