Claude가 제대로 작동하지 않는 이유
요약
사용자의 화면 활동을 로컬에서 관찰하여 문맥을 기억하는 AI 어시스턴트 'Clippy Vision'을 소개합니다. 비전 모델의 연산 비용을 줄이기 위해 3단계 분류 파이프라인과 지각 해싱 기술을 적용했습니다.
핵심 포인트
- 로컬 환경에서 작동하여 데이터 프라이버시를 보장함
- 3단계 분류 파이프라인으로 LLM 추론 호출 37% 절감
- 지각 해싱과 유니온 파인드로 중복 프레임 처리 효율화
- ReAct 에이전트와 SQL 생성을 통한 정밀한 정보 추출
- Ollama, Qwen3-VL, SQLite 등 오픈소스 스택 활용
성능이 나빠서가 아닙니다. 5분 전에 당신이 무엇을 하고 있었는지 전혀 모르기 때문입니다.
저는 다섯 개의 탭을 열어두고 머릿속에 절반 정도의 연구 흐름을 담고 있을 때가 있는데, Claude나 ChatGPT와 채팅을 시작하는 순간 다시 제로(zero) 상태에서 시작해야 했습니다. 내 AI 도구들에게 나 자신을 다시 설명하는 일은 금방 지루해졌습니다. 그래서 이를 해결하기 위해 무언가를 만들었습니다.
Clippy Vision은 완전히 로컬(local)에서 작동하는 화면 메모리 어시스턴트입니다. 이 도구는 사용자의 창(windows), 클립보드(clipboard), 스크린샷(screenshots)을 수동적으로 관찰하며, "아까 X에 대해 무엇을 읽고 있었지?"와 같이 자신의 활동에 대해 질문할 수 있게 해줍니다. 그러면 AI는 사용자에게 문맥(context)을 묻는 대신 자신의 기록에서 실제 답변을 찾아냅니다.
모든 것은 사용자의 기기에서 실행됩니다. 클라우드 호출(cloud calls)은 없으며, 어떤 데이터도 기기를 떠나지 않습니다.
단순한 접근 방식의 문제점
가장 뻔한 첫 번째 설계는 모든 것을 스크린샷으로 찍고, 모든 프레임을 비전 모델(vision model)에 통과시킨 뒤 그 출력을 저장하는 것입니다. 이는 GPU를 빠르게 녹여버리고, 이전 프레임과 의미 있게 변하지 않은 수많은 프레임에 추론(inference) 비용을 낭비하게 만듭니다.
따라서 실제 파이프라인(pipeline)은 연산(compute)을 언제 사용할지에 대해 더 스마트해야 했습니다.
3단계 분류 파이프라인 (3-tier classification pipeline): 프레임은 먼저 규칙(rules)을 거치고, 그다음 휴리스틱(heuristics)을 거치며, 실제로 필요할 때만 LLM/비전 레이어(vision layer)로 격상됩니다. 대부분의 프레임은 비전 모델에 전혀 닿지 않습니다. 저의 자체 벤치마킹(3일간의 실제 활동 동안 900개의 스크린샷) 결과, 이를 통해 LLM 추론 호출을 37% 줄일 수 있었습니다.
지각 해싱(Perceptual hashing) + 유니온 파인드(union-find) 중복 제거: 거의 동일한 프레임(창을 전환하지 않았거나 화면에 실제로 변한 것이 없는 경우)은 재처리되기 전에 포착되어 건너뛰어집니다. 이는 단계별 분류에 더해 비전 모델의 작업량을 추가로 23% 감소시켰습니다. 중복 프레임을 그룹화하기 위한 유니온 파인드(union-find) 접근 방식은 사실 이 부분을 연구하는 동안 제안받은 것이지, 제가 스스로 생각해낸 것은 아니었지만 문제에 아주 깔끔하게 들어맞는 해결책이 되었습니다.
점진적 메모리 요약 (Progressive memory summarization): 모든 것을 영구적으로 계속 보관하기만 한다면 가공되지 않은 활동 기록 (Raw activity history)이 빠르게 팽창합니다. 요약 (Summarization)을 사용하면 모든 가공되지 않은 프레임을 무기한 저장할 필요 없이 저장된 기록을 계속 사용할 수 있는 상태로 유지할 수 있습니다.
SQL 생성 도구를 탑재한 ReAct 에이전트: 이 부분이 실제로 여러분의 질문에 답을 해주는 핵심입니다. 단순히 가공되지 않은 기록을 LLM에 쏟아붓는 대신, 저장된 활동에 대해 SQL 쿼리를 생성하고 실행하여 사용자가 질문한 내용과 정확히 관련된 정보만을 추출할 수 있는 에이전트가 존재합니다.
기술 스택 (Tech Stack)
로컬 추론 (Local inference)을 위한 Ollama
비전 레이어 (Vision layer)를 위한 Qwen3-VL-4B
저장을 위한 SQLite
MCP 서버 통합
데스크톱 앱을 위한 Electron
현재 상태
이 프로젝트는 한동안 저의 데일리 드라이버 (Daily driver)로 사용되어 왔으며, 현재로서는 대부분의 날에 Claude나 ChatGPT보다 먼저 실행될 정도로 익숙해졌습니다. 며칠 전 공개적으로 출시했으며, 오픈 소스(Open source)로 제공되고 있고, 이미 첫 외부 기여자(이 글을 읽고 계신다면 감사합니다)를 맞이했습니다.
더 깊이 파고들고 싶다면 해결해야 할 과제들이 여전히 많이 남아 있습니다. 채팅 UI에서 마크다운 (Markdown)이 아직 제대로 렌더링되지 않으며, 대화 삭제 버튼이 없고, 경우에 따라 미리 가져온 컨텍스트 (Prefetched context)가 답변을 압도할 수 있으며, Linux/Mac 지원이 아직 되지 않습니다 (현재는 Windows 전용).
궁금하시다면 이것저것 살펴보고, 이슈 (Issue)를 제기하거나 기존 이슈들을 확인해 보세요. 저장소(Repo)는 여기 있습니다: https://github.com/protocorn/clippy-vision
다른 사람들은 무엇을 하고 있는지 궁금하다면
만약 비슷한 분야(로컬 비전 파이프라인, 지속적인 화면 모니터링, 자신의 활동에 대한 에이전트 기반 검색 등)에서 무언가를 구축한 분이 있다면, 연산량과 신선도 사이의 트레이드오프 (Compute/freshness tradeoff)를 어떻게 처리했는지 진심으로 의견을 나누고 싶습니다. 이 부분은 제가 가장 많은 시간을 할애한 부분이며, 제가 아직 시도해보지 못한 더 나은 접근 방식들이 분명히 있을 것이라 확신합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기