AI · 자동화
말로 폰을 조종하는 AI 오퍼레이터를 만들며
Mobile Mirror AI는 우리가 만든 것 중 가장 욕심을 낸 프로젝트입니다. 목표는 단순했습니다. “말 한마디로 폰을 조작한다.” 그런데 이걸 제대로 하려니 생각보다 많은 조각이 필요했습니다.
화면이 아니라 ‘객체’를 이해시키기
처음엔 화면 좌표를 눌렀습니다. 하지만 기종·해상도가 조금만 달라도 깨졌습니다. 그래서
각 폰에서 도는 Flutter 앱이 접근성 트리(/tree)를 넘겨주게 하고, PC의 파이썬
데스크톱은 그 트리에서 “로그인 버튼” 같은 요소를 찾아 눌렀습니다. 위치가 바뀌어도
그 버튼을 찾아 누르니 훨씬 안정적이었습니다. 화면은 MJPEG로 실시간 미러링했습니다.
같은 말을 두 번 시키지 않는다 — 임베딩 회상
매번 LLM을 부르면 느리고 결과도 흔들립니다. 그래서 한 번 가르친 작업을 768차원 벡터로 임베딩해두고(nomic-embed), 다음에 비슷한 명령이 오면 코사인 유사도(≥0.88)로 찾아 LLM 없이 즉시 재실행했습니다. “같은 뜻의 다른 표현”도 다시 학습할 필요가 없어졌습니다.
느린 이해는 한 번만. 그다음부터는 기억으로 즉시 실행한다.
복합 명령은 회상보다 먼저 쪼갠다
“크롬 실행 후 유튜브 실행” 같은 이어진 명령을 통째로 회상하면 엉뚱한 걸 떠올립니다. 그래서 플랜 분해를 회상보다 먼저 결정적으로 돌려, 명령을 단계로 나눈 뒤 각각 처리했습니다. 오회상이 확 줄었습니다.
현실적인 디테일들
- 다중 기기 발견 — 와이파이 서브넷 스캔과 USB(
adb forward)를 함께 써 연결된 폰을 자동으로 찾습니다. - OCR 인증 연동 — ARS/웹 OTP를 OCR로 읽어 키패드까지 자동 입력.
- 잠금 해제 — 사용자가 한 번 그린 패턴/PIN을 학습해 재현.
- GPU 상주 — Ollama
keep_alive로 모델을 GPU에 띄워둬 응답 지연을 줄였습니다.
실기기 3대로 스캔·연결·미러링·자연어 제어·상태 표시(배터리/CPU/메모리/온도)까지 검증했습니다. 완전 무인은 아니지만, 중요한 단계엔 확인을 남겨두면 꽤 믿고 맡길 수 있었습니다.