Sub-LLM as Tool
Sub-LLM as Tool
정의
Sub-LLM as Tool은 특정 역할을 가진 LLM 호출 체인을 @tool 함수 안에 넣고, 상위 에이전트가 필요할 때 해당 하위 LLM을 도구처럼 호출하게 만드는 패턴이다.
Mermaid스크롤로 확대 · 드래그로 이동
Agent as Tool과의 차이
Agent as Tool은 다른 에이전트 전체를 도구처럼 호출하는 패턴이다.
Sub-LLM as Tool은 그보다 단순하다. 도구 내부에 완전한 에이전트 루프가 있는 것이 아니라, 보통 prompt | llm | parser 같은 단발 LLM 체인이 들어 있다.
| 구분 | Sub-LLM as Tool | Agent as Tool |
|---|---|---|
| 내부 구조 | 단발 LLM chain | 별도 agent 또는 graph |
| 도구 내부 루프 | 보통 없음 | 있을 수 있음 |
| 사용 목적 | 전문가 프롬프트 분기 | 독립 워커 에이전트 호출 |
| 예시 | 감염성 질환 전문가 LLM | 리서치 에이전트, 코딩 에이전트 |
코드 구조
Python
공통으로 사용할 LLM과 parser를 준비한다.
Python
이 함수는 겉으로는 도구이지만, 내부에서는 별도의 전문가 프롬프트로 LLM을 다시 호출한다.
하위 LLM 도구 예시: 고혈압 식단 전문가
하위 LLM 도구는 질병 전문가뿐 아니라 식단, 법률 문서 요약, 코드 리뷰, 뉴스 분석처럼 역할이 분명한 작업에도 사용할 수 있다.
예를 들어 고혈압 환자의 식단을 중식, 일식, 양식으로 나누려면 각 식단 전문가를 도구로 만든다.
Python
겉으로 보면 chinese_meal_expert는 하나의 도구이다.
하지만 내부에서는 다음 일이 일어난다.
Mermaid스크롤로 확대 · 드래그로 이동
공통 프롬프트 재사용
하위 LLM 도구가 여러 개일 때는 프롬프트 문장이 많이 겹친다.
예시:
TEXT
이런 공통 문장은 상수나 함수로 묶는 것이 좋다.
Python
이렇게 하면 중식, 일식, 양식 도구는 차이점만 넘기면 된다.
Mermaid스크롤로 확대 · 드래그로 이동
중요한 점은 이 공통화가 LangGraph 문법은 아니라는 것이다. Python 코드 구조를 깔끔하게 만들어 프롬프트 유지보수를 쉽게 하는 방식이다.
실행 흐름
Python
상위 agent는 세 개의 전문가 도구를 가진다.
Python
실행 흐름:
Mermaid스크롤로 확대 · 드래그로 이동
중요한 포인트
1. 상위 LLM과 하위 LLM은 역할이 다르다
상위 LLM:
TEXT
하위 LLM:
TEXT
2. 같은 모델을 써도 역할은 분리된다
단순한 구성에서는 상위 agent와 하위 전문가 도구들이 모두 같은 llm 객체를 사용할 수 있다.
Python
하지만 프롬프트가 다르기 때문에 역할이 분리된다.
TEXT
즉 물리적으로 모델이 3개인 것은 아니어도, 논리적으로는 역할이 다른 하위 LLM처럼 동작한다.
3. 도구 선택 기준은 docstring이다
상위 agent는 도구의 docstring을 보고 선택한다.
Python
따라서 docstring이 부정확하면 상위 agent가 잘못된 전문가를 고를 수 있다.
장점
- 도메인별 프롬프트를 분리할 수 있다.
- 상위 agent는 라우팅과 최종 응답에 집중한다.
- 전문가별 응답 스타일을 다르게 만들 수 있다.
- 이후 실제 다른 모델로 교체하기 쉽다.
단점
- 상위 LLM의 도구 선택이 틀릴 수 있다.
- LLM 호출이 중첩되어 비용과 지연이 증가한다.
- 각 전문가 도구의 출력 형식이 들쭉날쭉하면 최종 답변 품질이 흔들린다.
신뢰성 높이는 방법
- 도구 docstring을 명확히 작성한다.
- 질병 카테고리가 중요하면 Intent Classification을 별도로 둔다.
- 전문가 도구의 출력 형식을 고정한다.
- 중요한 도메인에서는 선택 결과를 검증하거나 fallback을 둔다.
한 줄 정리
Sub-LLM as Tool은 전문가 역할의 LLM 체인을
@tool로 감싸고, 상위 agent가 질문 의도에 맞는 하위 LLM 도구를 선택해 호출하게 만드는 패턴이다.
관련: