더 작은 모델을 더 큰 작업에 효과적으로 활용하기 위한 '애플리케이션' 사용법
Using "applications" to make a smaller model more effective at bigger tasks.
핵심 요약
에이전트의 작업 범위를 제한하고 상태를 유지하는 '애플리케이션' 구조를 도입해 소형 모델의 성능을 극대화하는 방법입니다.
- 애플리케이션 구조 — 에이전트의 작업 범위를 제한하고 전용 도구와 상태를 제공하여 모델의 실수를 방지함
- 성능 최적화 — 소형 모델(Gemma 2 4B 등)에서도 복잡한 작업을 수행할 수 있도록 컨텍스트 관리 효율을 높임
- 상태 유지 — 에이전트가 애플리케이션을 나갔다 돌아와도 이전 작업 상태를 그대로 유지할 수 있음
- 도구 단순화 — 복잡한 도구 대신 간단한 인터페이스를 제공하여 모델의 입력 오류를 줄임
원문에 개인정보가 섞여 있어서 지우고 다시 올림.
내 개인용 JARVIS를 위해 떠올린 아이디어를 데모로 만들어 봤음. 에이전트가 뭘 보고 있는지 쉽게 확인하려고 브라우저 기반의 디스플레이를 대충 분위기 있게 짜봤다.
에이전트한테 특정 애플리케이션이랑 비슷한 수준의 제한된 범위만 줬음. 이 앱들 안에서 수행할 수 있는 동작도 제한했고, 앱을 나갈 때 정보가 날아가지 않게(존재 여부랑 다시 돌아가는 툴만 남음) 전용 클립보드랑 스크래치 패드도 따로 만들었다. 지금까지 만든 앱은 딱 2개인데, 하나는 모델용 텍스트 전용 웹 브라우저고, 다른 하나는 내 PC 같은 컴퓨터 시스템을 제어하는 인터페이스임.
이 앱들(스크립트 안에서는 워크플로우라고 부름)은 원래 컴퓨터 제어 앱에 있던 툴 20개랑 웹 브라우징 앱 툴 3개를 싹 다 대체함. 로컬 모델들이 URL이나 정확해야 하는 텍스트를 자꾸 찐빠내는 게 문제였는데, 이걸 해결하려고 간단한 동사랑 숫자(open 1, copy 2 등)로 조작하는 메뉴 방식을 도입했다.
에이전트는 필요한 만큼 앱을 열 수 있고, 각 앱은 상태가 계속 유지됨. 그러니까 나갔다가 다시 돌아와도 나갔던 그 상태 그대로임. 앱을 끄고 나오면 나머지 100개 정도의 툴(한꺼번에 다 쓸 순 없고 그룹별로 요청 가능)을 쓸 수 있는 일반 모드로 돌아오게 해놨음.
여기서 시킨 작업은 내 프로젝트 카 부품 찾는 거였는데, 이게 좀 희귀한 거라 에이전트한테 관리 좀 도와달라고 했거든. 예전에 대화하면서 구하기 힘든 부품 파는 곳들을 몇 군데 알려줬더니, 그중에서 있을 법한 곳을 딱 골라서 검색하더라.
원래는 gemma4 26b(unsloth QaT Q4_K_XL) 쓰려고 만든 건데, 더 작고 성능 떨어지는 모델에서도 돌아가는지 보여주려고 gemma4 E4B(이것도 unsloth QaT Q4_K_XL)로 테스트해 봤음. 신기하게도 이 워크플로우 환경에서는 26b보다 성능이 더 잘 나오는 것 같더라. 26B는 내가 준 전용 계획 툴(매 턴마다 에이전트의 '계획'을 컨텍스트 맨 끝에 고정 블록으로 박아두는 거)을 좀 꺼리는 경향이 있었거든.
llama.cpp 기준으로 MTP 정확도에 따라 70~85 t/s 정도 나오고, 작업 끝날 때쯤 컨텍스트 10k 토큰 쌓였을 때 프리필은 800 t/s 찍힘. RX6600XT에서 vulkan 백엔드로 돌리는 중임.
나 같은 거 처음 만든 사람은 아니겠지만, 내가 짠 것보다 더 잘 만들 수 있는 사람도 분명 있을 거라 생각함. 그래도 나처럼 에이전트 아키텍처 만드는 사람들한테 도움 될까 싶어서 공유해 본다. 핵심은 에이전트가 앱에 들어갈 때 딱 제한된 툴셋이랑 적은 양의 컨텍스트만 들고 가게 하는 거임. 사용자 입력이랑 에이전트가 관리하는 필드 몇 개 정도만 같이 가져가고 나머지는 다 쳐냄. 앱에서 나오면 다시 전체 컨텍스트를 돌려받는 방식이지.



