예산 & 안전¶
스쿼드 예산은 실행이 허용한 것보다 많은 토큰이나 시간을 사용하기 전에 실행을 일시정지합니다. 예산은 켜기 전까지 꺼져 있고, 각 한도도 설정하기 전까지는 꺼져 있습니다.
예산 켜기¶
예산은 스쿼드 페이지의 ⋯ 메뉴나 예산 미터의 한도 설정에서 엽니다. 새 스쿼드에는 예산이 없는데, 설정 마법사는 예산을 만들지 않고 예산 미터에는 꺼짐이 표시됩니다.
- 맨 위의 예산 스위치를 켭니다. 아직 설정한 한도가 없다면 예산은 사용량만 기록합니다.
- 각 한도에는 한도 없음이 표시됩니다. 한도 설정을 누르면 해당 한도 하나가 권장값으로 켜지고, 슬라이더로 값을 조절할 수 있습니다. 한도 해제를 누르면 다시 꺼집니다.
설정한 한도만 적용되고 나머지 한도는 꺼진 채로 남습니다. 바꾼 내용은 바꾸는 즉시 저장되며, 완료를 누르면 대화 상자가 닫히죠. 스위치를 꺼도 설정한 값은 남아 있으므로 다시 켜면 그대로 돌아옵니다.
예산은 예산이 켜져 있는 동안 제출한 실행에 적용됩니다. 예산이 있는 실행은 각 태스크를 시작하기 전에 저장된 예산을 다시 읽으므로, 높인 한도나 해제한 한도, 꺼 둔 스위치는 다음 태스크부터 반영됩니다. 예산이 꺼져 있을 때 제출한 실행에는 예산이 적용되지 않습니다.
이전 버전에서 저장한 예산
한도를 하나씩 켤 수 있기 전에 저장한 예산에는 모든 한도가 들어 있고, 저장된 값 그대로 모든 한도가 켜진 상태로 불러옵니다. 따로 바꾸지 않았다면 해당 값은 예전 기본값인데, 여기에는 여러 라운드를 도는 로컬 모델 태스크가 넘을 수 있는 작업당 10,000 토큰도 포함됩니다. 원하지 않는 한도는 높이거나 해제하세요.
토큰을 세는 방법¶
태스크의 모델 라운드는 라운드마다 응답과, 이전 라운드보다 늘어난 프롬프트만큼을 셉니다. 첫 라운드는 프롬프트 전체를 세죠. 도구 호출 루프는 라운드마다 대화 전체를 다시 보내므로, 라운드마다 프롬프트 전체를 세면 대화의 앞부분을 라운드 수만큼 거듭 세게 됩니다.
예를 들어 첫 프롬프트가 6,000 토큰인 태스크가 도구 호출 라운드 10번과 최종 답변을 거친다고 해 보죠. 라운드마다 응답은 1,500 토큰이고 도구 결과가 3,000 토큰씩 늘어난다면, 예산은 6,000 + 11 × 1,500 + 10 × 4,500 = 67,500 토큰, 곧 마지막 프롬프트와 모든 응답을 합한 만큼을 셉니다. 같은 태스크에 대해 모델 서버가 처리한 프롬프트와 완성 토큰은 330,000이고, 스쿼드 분석에는 이 값이 표시됩니다.
이 방식은 작업당, 에이전트당, 실행당 한도에 똑같이 적용되고, 플래너 호출과, 컨테이너 모드 에이전트의 러너가 컨테이너가 끝났을 때 보고하는 사용량에도 적용됩니다. 번들 에이전트 러너는 Anthropic 캐시 쓰기와 캐시 읽기 토큰을 프롬프트 토큰으로 셉니다. 사용량을 보고하지 않는 사용자 지정 이미지에는 토큰 한도가 적용되지 않는데, 해당 태스크는 그대로 실행되고 실행 로그에 토큰 한도가 적용되지 않았다고 기록됩니다. 원격 에이전트의 모델 호출은 원격 노드에서 실행되므로 여기서 세지 않습니다.
토큰 한도¶
| 설정 | 권장값 | 설명 |
|---|---|---|
| 실행당 토큰 | 3,000,000 | 실행 전체에서 사용할 수 있는 토큰 |
| 에이전트당 토큰 | 1,000,000 | 에이전트 하나가 실행 한 번에 사용할 수 있는 토큰 |
| 작업당 토큰 | 200,000 | 태스크를 한 번 시도할 때 사용할 수 있는 토큰. 다시 실행한 태스크는 처음부터 다시 셉니다 |
계획 한도¶
| 설정 | 권장값 | 설명 |
|---|---|---|
| 계획당 작업 수 | 20 | 플래너가 만들 수 있는 태스크 수. 이보다 많은 태스크로 편집한 플랜은 승인 시 거부됩니다 |
| 재계획 횟수 | 3 | 플랜이 거부된 뒤 다시 계획할 수 있는 횟수. 한도를 넘는 거부는 받아들여지지 않습니다 |
| 작업당 도구 라운드 | 20 | 태스크의 도구 호출 라운드를 이 값(최대 500)과 에이전트 자체의 최대 도구 호출 라운드 중 작은 값으로 제한하며, 이후 에이전트는 최종 답변을 냅니다. 한도에 도달해도 실행은 일시정지되지 않습니다 |
제한 시간¶
| 설정 | 권장값 | 설명 |
|---|---|---|
| 실행 제한 시간 | 6시간 | 실행 시작부터의 실행 시간입니다. 일시정지된 시간과, 앱 재시작부터 중단된 실행을 재개하기까지의 시간은 세지 않습니다 |
| 기본 작업 제한 시간 | 30분 | 작업 제한 시간을 따로 정하지 않은 에이전트의 태스크 하나에 허용되는 시간이며, 모델 응답을 받을 때마다 확인합니다. 컨테이너 태스크는 컨테이너가 끝나고 토큰 사용량을 보고했을 때 확인하며, 컨테이너를 시작하는 데 걸린 시간도 포함합니다 |
권장값을 정한 방법¶
권장값은 로컬 모델에서 보통 수준의 실행이 들어가도록 여유를 두었으므로, 한도를 켜도 원래 끝났을 작업이 멈추지 않습니다:
- 작업당 토큰: 위 예시 같은 보통 태스크는 67,500 토큰이고, 128K 컨텍스트 창을 채우면서 4,000 토큰짜리 응답을 11번 내는 태스크는 175,000 토큰 정도인데요, 둘 다 200,000 안에 들어갑니다.
- 에이전트당 토큰: 태스크 20개짜리 플랜을 작업 에이전트 세 명이 나누면 한 에이전트가 태스크 7개, 약 470,000 토큰을 맡는데, 1,000,000은 이 값의 두 배 정도입니다.
- 실행당 토큰: 보통 태스크 20개와 플래너를 합하면 약 1,380,000 토큰이고, 3,000,000은 이 값의 두 배 정도입니다.
- 기본 작업 제한 시간: 모델 호출 한 번에 1분 정도라면 보통 태스크는 11분쯤 걸리고, 30분은 이 시간의 세 배 정도입니다.
- 실행 제한 시간: 태스크는 하나씩 실행되므로 보통 태스크 20개에 3시간 반쯤 걸리는데, 6시간이면 느린 태스크가 섞여도 여유가 있습니다.
에이전트별 제한 시간¶
스쿼드의 각 에이전트는 구성 화면의 설정에서 최대 도구 호출 라운드, 최대 토큰 옆에 자체 제한 시간 두 가지를 가지며, 스쿼드의 예산이 켜져 있는지와 관계없이 적용됩니다.
| 설정 | 기본값 | 범위 | 설명 |
|---|---|---|---|
| 작업 제한 시간 | 스쿼드 기본값 | 1~120분 | 해당 에이전트에 배정된 태스크 하나의 최대 시간입니다. 이 에이전트의 태스크에는 예산의 기본 작업 제한 시간 대신 이 값을 사용합니다. 따로 정하지 않으면 예산의 값을 따르고, 예산이 꺼져 있거나 예산에 작업 제한 시간이 없으면 작업 제한 시간이 없습니다. 예산의 제한과 마찬가지로 모델 응답을 받을 때마다 확인하며, 제한을 넘긴 태스크는 멈추고 실행은 일시정지됩니다. 한도 설정을 누르면 30분에서 시작합니다 |
| LLM 응답 제한 시간 | 모델에 따라 다름(아래 참고) | 30~540초 | 이 에이전트의 태스크가 모델을 한 번 호출할 때, 응답 전체를 받기까지 걸릴 수 있는 총시간입니다. 총시간 기준이라 응답이 들어오는 중이어도 시간이 다 되면 끊기고, 시간을 넘긴 호출은 Request timed out after N seconds 오류로 태스크를 실패시킵니다 |
두 제한은 재는 대상이 다릅니다. 태스크 하나는 도구 호출을 사이에 두고 모델을 여러 번 호출하는데, 느린 로컬 모델이 큰 파일을 도구 호출 한 번에 써 내려가는 경우처럼 긴 호출 하나가 끝날 수 있는지는 LLM 응답 제한 시간이 정합니다. 작업 제한 시간은 태스크 전체를 제한하지만 모델 응답 사이에만 확인하므로, 진행 중인 호출을 끊지는 못하죠.
원격 에이전트(등록된 원격 프로필에서 추가한 에이전트)에는 작업 제한 시간만 표시됩니다. 원격 에이전트의 모델 호출은 원격 노드에서 해당 노드의 설정으로 실행되기 때문입니다.
모델 실행 위치에 따른 기본값¶
제한을 따로 정하지 않은 에이전트의 기본값은 모델이 실행되는 위치에 따라 정해집니다. 에이전트 설정의 각 항목 아래에 해당 모델의 기본값이 표시되며, 기본값 사용을 누르면 변경한 LLM 응답 제한 시간이 기본값으로 돌아갑니다.
| 모델 실행 위치 | LLM 응답 제한 시간 | 최대 토큰 |
|---|---|---|
| 클라우드 프로바이더(Anthropic, API 키 또는 ChatGPT 로그인으로 연결한 OpenAI, Azure OpenAI, Gemini) | 300초 | 32,768 |
| 현재 컴퓨터, 클러스터의 노드, 직접 운영하는 서버(Ollama, LM Studio, vLLM, 원격 llama.cpp 또는 MLxcel, OpenAI 호환 엔드포인트) | 540초 | 8,192 |
모델 목록에서 해당 프로바이더의 모델을 고른 에이전트만 클라우드 프로바이더로 판단합니다. 현재 컴퓨터에 로드한 모델이나 설정 > 모델의 기본 모델처럼 프로바이더가 기록되지 않은 모델은 직접 운영하는 모델로 판단합니다. 최대 토큰을 따로 정하지 않은 태스크는 모델 컨텍스트 윈도우의 4분의 1을 넘겨 요청하지 않으므로, 나머지는 프롬프트와 태스크의 도구 라운드에 사용됩니다. 직접 운영하는 모델이라면 8K 윈도우에서 2,048토큰, 16K에서 4,096토큰, 32K 이상에서 8,192토큰입니다.
로컬 모델은 초당 10~50토큰을 생성하므로, 라우터가 허용하는 최대치인 540초가 있어야 큰 파일을 도구 호출 한 번에 쓰는 것 같은 긴 응답 하나를 끝낼 수 있습니다.
라우터의 제한 시간¶
스쿼드 태스크의 모델 호출은 앱의 라우터를 거치는데, 라우터에도 스트리밍이 아닌 요청에 대한 자체 제한 시간이 있습니다(timeouts.request.standard.total, 기본 300초, 요청 타임아웃과 헬스 체크 참고). 에이전트의 LLM 응답 제한 시간이 이보다 길면(직접 운영하는 모델을 사용하는 에이전트의 기본값 540초 포함), 실행은 첫 태스크 전에 라우터 설정에 해당 에이전트 모델의 모델별 재정의를 넣어 라우터의 제한을 늘리고, 그래서 라우터가 호출을 먼저 끊지 않습니다. 이 재정의는 라우터의 제한을 늘리기만 하고 실행할 때마다 다시 기록되므로, 라우터 설정을 저장하면서 재정의가 빠지더라도 다음 실행에서 복구됩니다.
최댓값 540초는 번들 라우터가 해당 제한에 허용하는 최대치입니다. 클러스터의 다른 컴퓨터에 있는 모델은 그 컴퓨터의 라우터도 거치는데, 그 라우터는 자체 제한 시간을 따로 가지므로 원격 모델에 더 긴 시간이 필요하면 해당 컴퓨터에서도 늘려야 합니다.
도구 실행 제한 시간은 다른 설정입니다
에이전트와 코워크 설정의 도구 실행 제한 시간은 명령 하나처럼 도구 호출 한 번을 제한할 뿐, 모델의 응답 시간을 늘리지는 않습니다. 느린 모델에 시간을 더 주려면 스쿼드 에이전트의 LLM 응답 제한 시간을 늘리세요.
경고 임계값¶
경고 기준(기본값 80%)은 센 토큰이 실행당 토큰의 해당 비율에 도달하거나, 실행 시간이 실행 제한 시간의 해당 비율에 도달하면 실행마다 한 번 squad:budget-warning을 발생시킵니다. 이 두 한도 말고는 재는 것이 없으므로, 둘 중 하나가 설정되어 있을 때만 표시되죠. 알림에는 둘 중 어느 것인지가 표시됩니다.
실시간 예산 추적¶
스쿼드 개요의 예산 미터는 현재 실행을 설정된 한도와 비교해 보여 줍니다:
- 센 토큰, 실행당 토큰이 설정되어 있으면 해당 한도와 비교
- 실행 시간, 실행 제한 시간이 설정되어 있을 때. 실행이 일시정지된 동안에는 시계가 멈춥니다
- 플랜의 태스크 수, 계획당 작업 수가 설정되어 있을 때
예산이 꺼진 스쿼드의 예산 미터에는 꺼짐과 한도 설정이 표시됩니다.
예산 미터의 토큰 수는 스쿼드 분석과 에이전트 카드의 처리한 토큰보다 작습니다. 처리한 토큰은 라운드마다 대화를 다시 세기 때문입니다. 미터의 토큰 행 옆 ?에서 이 차이를 확인할 수 있습니다.
안전 이벤트¶
예산 경고¶
센 토큰이나 실행 시간이 경고 임계값에 도달하면 squad:budget-warning 이벤트가 발생하고 예산 미터가 주황색으로 바뀝니다.
한도에 도달했을 때¶
토큰 또는 시간 한도에 도달하면 실행이 일시정지됩니다:
- 실행 중인 태스크는 현재 모델 응답 이후 멈추고, 해당 한도로 멈춘 것으로 기록됩니다. 도구 호출 라운드를 모두 사용한 에이전트가 내는 최종 답변도 여기에 포함되며, 컨테이너 태스크는 컨테이너가 끝났을 때 확인합니다
- 새로운 태스크는 시작되지 않습니다
squad:execution-paused와squad:budget-exceeded가 발생합니다. 이벤트에는 한도(limit), 멈춘 태스크(taskId), 해당 태스크의 에이전트(agentId)가 실리고,reason에 수치가 들어갑니다- 실행 카드에 어떤 한도였는지와 태스크, 해결 방법이 표시되고, 알림은 실행이 일시정지되었다고 알립니다
| 한도 | 실행 카드가 제공하는 동작 |
|---|---|
| 작업당 토큰, 기본 작업 제한 시간 | 이 작업 다시 실행, 그리고 예산을 해당 한도에서 여는 한도 변경 |
| 에이전트 자체의 작업 제한 시간 | 이 작업 다시 실행, 그리고 에이전트 설정 열기 |
| 에이전트당 토큰, 실행당 토큰, 실행 제한 시간, 계획당 작업 수 | 예산을 해당 한도에서 여는 한도 변경 |
재개하면 멈춘 태스크가 다시 대기열에 들어가므로 이 태스크에 의존하는 태스크도 그대로 실행됩니다. 태스크를 다시 실행하기 전에 한도를 한 번 더 확인하는데요:
- 작업별 한도가 태스크를 멈춘 값 이하로 그대로라면, 태스크를 시작하지 않고 실행을 다시 일시정지합니다. 한도를 높이거나 해제한 뒤 재개하세요. 같은 한도로 태스크를 다시 실행하려면 이 작업 다시 실행을 누르세요. 태스크를 다시 시도하고 실행을 재개합니다.
- 실행 전체에 걸린 한도는 태스크마다 시작하기 전에 확인하므로, 여전히 한도를 넘는 실행은 다시 일시정지됩니다.
- 멈춘 태스크 없이 실행을 끝내려면 실행이 일시정지된 동안 해당 태스크를 건너뛰기하세요. 이 태스크에 의존하는 태스크도 함께 건너뜁니다.
기록된 사용량이 10,000,000 토큰 이상이면 예산이 허용하는 최대 한도에 도달한 것이므로 한도를 높여도 실행을 재개할 수 없습니다. 남은 태스크를 건너뛰어 실행을 완료하거나 취소하세요.
태스크 수와 재계획 한도는 동작을 거부하기도 합니다. 플래너는 더 많은 태스크를 만들 수 없고, 태스크가 너무 많은 승인은 거부되며, 재계획 한도를 넘는 거부는 받아들여지지 않고 플랜은 승인 대기 상태로 남습니다.
긴급 중지¶
긴급 중지는 운영자가 직접 실행합니다. 예산 미터의 긴급 중지, POST /api/v1/squads/{id}/emergency-stop, 또는 aigo squad emergency-stop을 사용하세요. 스쿼드의 실행 중인 모든 실행을 즉시 중지합니다:
- 실행 중인 태스크가 즉시 중단되고, 컨테이너 태스크의 컨테이너도 함께 중지됩니다. 정지 시점에 실행 중이던 도구 호출은 이미 반영되었을 수 있습니다. 태스크가 컨테이너가 아닌 앱 안에서 실행된 경우 이런 호출은 중단되었다는 오류와 함께 실패한 호출로 기록되므로, 반영되었을 수 있는 부작용을 감사 로그의 도구 실행 탭과 실행 이벤트에서 확인할 수 있습니다
- 대기 중인 태스크가 취소됩니다
- 각 실행의 상태가 실패로 변경되는데, 예산 한도가 아니라 긴급 중지로 멈춘 것으로 기록되고 실패한 작업 다시 실행으로 끝내지 못한 작업을 다시 시작할 수 있습니다
squad:emergency-stopped이벤트가 사유와 함께 발생합니다
없어진 설정¶
동시 에이전트와 에이전트 유휴 제한 시간은 더 이상 표시되지 않습니다. 실행은 태스크를 하나씩 시작하므로 실행 하나에서 동시에 일하는 에이전트는 하나뿐이라 동시 실행 수를 정해도 아무것도 제한하지 못했고, 에이전트의 유휴 시간은 아무것도 재지 않았기 때문이죠. 이 값이 들어 있는 예산은 값을 그대로 두지만, 아무 효과가 없습니다.
모범 사례¶
-
권장값에서 시작: 한도 설정은 각 한도를 보통 수준의 실행이 들어가는 값에서 시작합니다. 한도를 낮추려면 예산 미터로 실행 몇 번을 지켜본 뒤에 낮추세요.
-
에이전트별 제한 활용: 특정 에이전트가 장황한 경향이 있다면 전체 예산을 올리기보다 에이전트별 토큰 제한을 낮추세요.
-
작업 제한 시간 설정: 작업 제한 시간은 멈춘 에이전트가 전체 예산을 소진하기 전에 잡아냅니다. 패키지 설치처럼 오래 걸리는 일을 맡은 에이전트에는 모든 에이전트의 기본값을 올리기보다 해당 에이전트의 제한을 따로 길게 주세요.
-
느린 모델에는 응답 하나에 시간 더 주기: 로컬 모델은 이미 라우터가 허용하는 최대치인 540초를 사용합니다. 그래도 응답 하나가 시간을 넘기면 작업 제한 시간을 늘리지 말고 해당 에이전트의 최대 토큰을 줄이거나 모델을 더 작은 컨텍스트로 로드하세요. 더 긴 시간이 필요한 클라우드 모델은 LLM 응답 제한 시간을 540초까지 늘릴 수 있습니다.
예산 제한은 정확하지 않습니다
제한은 모델 응답을 받을 때마다 확인하므로, 실행이 일시정지되기 전에 한 번의 응답으로 제한을 넘을 수 있습니다. 컨테이너 태스크는 컨테이너가 끝났을 때만 확인합니다. 토큰 사용량을 보고하지 않는 모델 서버나 컨테이너 이미지에는 토큰 제한을 적용할 수 없습니다. 항상 작은 안전 마진을 두고 제한을 설정하세요.