내 두 AI 작업이 하나의 마우스를 두고 계속 싸웠던 이유
병렬 에이전트 데모는 두 작업이 동일한 마우스를 사용하려고 하기 전까지는 아주 멋져 보입니다.
한 작업은 사이트에 로그인합니다. 다른 작업은 브라우저를 엽니다. 세 번째 작업은 간단한 질문에 답하려고 시도합니다. 그러다 갑자기 시스템이 엉뚱한 곳을 클릭하거나 오류를 보고합니다. 이것은 지능의 문제가 아닙니다. 리소스의 문제입니다.
CliGate를 구축하면서 데스크톱 자동화에 관한 뼈아픈 교훈을 얻었습니다.
코드 작업은 병렬로 실행될 수 있습니다. 런타임 세션이 작동하는 동안 날씨를 검색할 수 있습니다. 백그라운드 요약 작업은 무엇도 차단할 필요가 없습니다.
데스크톱은 다릅니다. 키보드 하나, 마우스 하나, 화면 하나뿐입니다. 만약 두 에이전트가 해당 화면을 자신이 소유하고 있다고 생각하면, 서로를 방해하게 됩니다.
새로운 작업이 들어오면 기존 작업을 취소하는 것이 저의 첫 번째 본능이었습니다. 하지만 그것은 잘못된 판단이었습니다.
"어디까지 진행됐나요?"라고 묻는 사용자 때문에 로그인 흐름이 끊겨서는 안 됩니다. 날씨를 묻는 사용자 때문에 데스크톱 작업이 중단되어서도 안 됩니다. 가장 최악의 버그는 에이전트가 다른 활성 실행을 보고 실수로 자기 자신을 취소할 때 발생합니다.
저는 동시성(concurrency)을 프롬프트의 문제로 취급하는 것을 멈춰야 했습니다. 대신 리소스의 문제로 다루어야 했습니다.
저는 세 가지 새로운 규칙을 세웠습니다:
- 독립적인 작업은 병렬로 실행한다.
- 데스크톱이 필요한 작업은 대기열(queue)에 추가한다.
- 취소는 사용자가 요청할 때만 수행한다.
CliGate에서 데스크톱 입력은 임대(lease)처럼 작동합니다. 어떤 작업이 마우스를 사용 중이라면, 그 작업이 임대권을 갖습니다. 다른 작업들은 기다려야 합니다.
새로운 로직은 다음과 같은 흐름을 따릅니다:
- 새로운 작업이 도착합니다.
- 데스크톱이 필요한가요?
- 아니라면, 병렬로 실행합니다.
- 그렇고 데스크톱이 비어 있다면, 사용합니다.
- 그렇고 데스크톱이 사용 중이라면, 대기열에 추가합니다.
- 사용자가 중단을 요청할 때만 취소합니다.
이 변화를 통해 혼란스러운 오류를 예측 가능한 동작으로 바꿀 수 있었습니다. 클릭을 재시도하며 더 많은 간섭을 일으키는 대신, 이제 어시스턴트는 사실대로 말합니다: "데스크톱이 사용 중입니다. 대기열에 추가되었으며, 사용 가능해지면 시작하겠습니다."
또한 자기 자신을 취소하는 것을 방지하기 위한 규칙도 추가했습니다. 에이전트는 자신의 활성 실행을 취소 대상으로 목록에 올려서는 안 됩니다.
AI 도구를 만들 때 너무 영리하게 굴려고 하면 종종 실패합니다. 사용자에게 필요한 것은 마법이 아닙니다. 그들에게 필요한 것은 단순한 로직입니다:
- 작업 간 충돌이 없다면, 실행하게 둡니다.
- 물리적 리소스를 두고 충돌한다면, 대기열에 넣습니다.
- 사용자가 상태를 물으면, 알려줍니다.
- 사용자가 중단을 요청하면, 중단합니다.
만약 당신의 AI가 데스크톱을 제어한다면, 이 점을 기억하세요. 병렬 작업은 괜찮지만, 물리적 리소스에는 소유권이 필요합니다.
Source: https://dev.to/codekingai/my-two-ai-tasks-kept-fighting-for-the-same-mouse-1hij