피드로 돌아가기
Dev.toAI/ML
원문 읽기
PyQt6와 Local LLM 기반의 Screen-Aware AI 어시스턴트 구축
How I built a screen-aware AI assistant in Python – full stack breakdown (PyQt6 + Whisper + Ollama)
AI 요약
Context
사용자 화면 인지 기반의 실시간 AI 응답 시스템 구축 필요성 대두. API 비용 및 지연 시간을 최소화하면서 윈도우 환경에서 원활하게 동작하는 Local-first AI 에이전트 설계 지향.
Technical Solution
- pynput 백그라운드 스레드와 PyQt6 메인 스레드 간 Thread Safety 확보를 위해 QMetaObject.invokeMethod 및 Qt.QueuedConnection 기반의 이벤트 루프 설계
- API 페이로드 최적화를 위해 mss 라이브러리로 캡처한 이미지를 JPEG Quality 75 수준으로 압축하여 전송 효율 증대
- CPU 환경에서의 실시간성 확보를 위해 Whisper base.en 모델(142MB)을 채택하여 STT 처리 속도 최적화
- Vision API의 인물 식별 거부 제약을 해결하기 위해 Regex 기반의 is_identity_question 필터를 통한 조건부 스크린샷 전송 로직 구현
- CompanionManager 클래스의 전략 패턴 적용을 통해 Ollama, OpenAI, Claude 등 다중 AI Provider의 인터페이스 단일화
- 외부 프로세스로 동작하는 Ollama의 배포 복잡성을 해결하기 위해 별도의 Setup Wizard를 통한 설치 자동화 구현
실천 포인트
1. GUI 프레임워크 사용 시 백그라운드 스레드에서 UI를 직접 수정하지 말고 QueuedConnection 등을 통한 스레드 간 통신 구조를 설계할 것
2. Vision LLM 도입 시 API 정책(인물 인식 제한 등)을 사전에 분석하여 전처리 필터링 계층을 구축할 것
3. 로컬 LLM 배포 시 런타임 의존성 문제를 해결하기 위해 별도의 설치 관리자나 컨테이너 전략을 검토할 것