콘텐츠로 이동

병렬 도구 호출 (Parallel Tool Use)

한 턴에 여러 도구를 동시에 호출하는 기능은 LLM 에이전트가 왕복(turn)을 줄이고 작업 전체 소요 시간과 토큰을 크게 아끼는 핵심 패턴이에요. 이번 장에서는 Claude 와 OpenAI 의 병렬 도구 호출이 어떻게 동작하는지, 언제 병렬로 돌리면 좋고 언제 순차로 해야 하는지를 데이터스케쳐스의 실제 서비스 관점에서 정리합니다.

병렬 도구 호출이란

기본적으로 모델은 한 응답에 여러 개의 독립적인 도구 호출을 실을 수 있습니다. 예를 들어 사용자가 "서울과 부산 오늘 날씨 알려줘"라고 하면, 한 번의 요청에 get_weather(location=서울)get_weather(location=부산) 두 개의 tool_use 블록이 같은 응답에 함께 들어올 수 있어요. 응용 프로그램은 이 두 호출을 동시에 실행하고 결과를 한 번의 tool_result 배치로 다시 모델에 보내면 됩니다.

  • 독립적인 호출일 때만 병렬이 의미가 있습니다. 호출 B 가 호출 A 의 결과에 의존한다면(예: A 의 응답에서 경로를 얻어 B 에서 다운로드) 병렬로 돌리면 안 됩니다.
  • 병렬 호출은 각각 다른 tool_use id 를 갖고, 결과도 같은 id 로 매칭해 보내야 합니다.

왜 병렬인가 — 비용·지연 관점

지연(latency) 관점에서 핵심은 라운드트립 횟수입니다. 순차로 돌리면 두 도구를 부르는 데 요청-응답이 두 번, 병렬이면 한 번이면 됩니다. LLM 추론은 상대적으로 느리므로, 턴 수를 줄이는 게 체감 응답 속도를 가장 크게 좁힙니다.

데이터스케쳐스가 실제로 쓰는 응용 예시:

  • 행사 데이터 수집(D-SKET Events): 이벤트 페이지 하나를 분석할 때 페이지 메타 추출일정/주소 구조화 는 서로 독립적이므로 병렬로 돌려 크롤링→구조화 전체 지연을 절반으로 낮출 수 있습니다.
  • 회의록 구조화(D-SKET Canvas): 회의 내용에서 액션 아이템·결정·리스크를 한 번에 병렬 추출하면 후처리 지연이 크게 줄어듭니다.

언제 순차가 맞나

의존성이 있거나, 후속 호출의 입력이 앞 호출 결과로 결정될 때는 반드시 순차입니다. 예: 검색(rag) → 결과에서 인용 상세 조회요약 생성은 강한 의존 관계라 병렬로 바꾸려는 시도는 잘못된 결과를 만들 수 있어요. 이런 경우엔 부모 코드에서 호출 순서를 명시적으로 제어(manual loop) 하는 게 모델의 자유로운 병렬 판단에 의존하는 것보다 안정적입니다.

규칙 요약·확인 필요

  • 병렬 호출은 독립성이 전제. 의존 관계가 있으면 명시적으로 순차 처리.
  • 결과는 tool_use id 로 정확히 매칭해 tool_result 로 반환.
  • 병렬·순차 판단은 가끔 모델 상태(컨텍스트)에 따라 달라질 수 있으니, 오동작 시 해당 호출을 수동 루프로 바꿔 재검증하세요. (확인 필요)

더 알아보기