TL;DR
- 반복적이고 복잡한 작업에서 AI의 성능이 제한적이거나 일관되지 않다면, 에이전트가 도메인 개념으로 작동하도록 도메인 특화 언어(DSL)를 제공하는 방법이 도움이 됨.
- 대형 언어 모델(LLM)은 도메인 정보를 매번 다시 입력해야 하는 기억의 한계와 한 번에 처리할 수 있는 정보량이 제한된 컨텍스트 한계를 지님.
- 금융 모델링용 DSL은 엑셀의 셀 주소와 수식 작성 같은 세부 작업을 코드로 처리해, 한 행 작성에 필요한 단계를 9단계에서 3단계로 줄임.
- DSL은 결정론적 작업을 소프트웨어에 맡기고 LLM은 판단이 필요한 상위 개념에 집중하게 해 정확도와 속도를 높이는 데 도움을 줌.
- DSL을 정해진 연산 목록으로 구현하면 에이전트가 수행한 작업을 모두 확인할 수 있는 구조화된 변경 기록도 제공할 수 있음.
DSL이 필요한 이유
- 현재 LLM에는 두 가지 주요 제약이 있음.
- 기억의 한계: 특정 도메인에 맞춰 자체 모델을 훈련하지 않는 한, 도메인 관련 정보를 대화할 때마다 다시 입력해야 함.
- 컨텍스트 제약: 한 번에 관리할 수 있는 정보량에 한계가 있으며, 작업 메모리에 담긴 정보가 많을수록 성능이 저하됨. 여기서 정보에는 추론에 사용하는 토큰도 포함됨.
- 이에 따라 LLM의 성능을 끌어내기 위한 컨텍스트 엔지니어링이 중요한 실천 방식으로 자리 잡음. 에이전트가 처리해야 하는 복잡성이 낮을수록 정확도와 속도 모두 더 나은 성능을 기대할 수 있음.
- 따라서 해결할 문제 자체에서 비롯되지 않는 추가 난도·간접 비용·마찰인 부수적 복잡성(incidental complexity)을 LLM이 다루는 범위에서 최대한 덜어내야 함. 에이전트용 DSL을 만드는 것이 이를 실현하는 한 가지 전략임.
사례 연구: 금융 모델링
- 금융 모델링은 AI 도구가 주목받는 분야임. 금융 모델은 보통 엑셀에서 작성되므로, AI를 적용하려는 첫 시도는 엑셀 플러그인 형태로 엑셀에 AI를 더하는 방식이었음.
- 이 방식은 LLM이 금융 모델의 논리를 엑셀의 셀 단위 데이터 형식으로 표현하는 등 불필요한 복잡성을 과도하게 처리하게 하므로 효과적이지 않다고 봄.
- 대신 금융 모델의 논리를 지정하는 DSL을 만들어 에이전트가 엑셀의 작동 방식에 신경 쓰지 않고 더 높은 수준에서 작업하게 함.
- 금융 모델링에서 흔한 패턴인 하드코드 이월(hardcode carry-forward)은 임의의 기간에 직접 입력한 가정값을 이후 기간에 그대로 이어 쓰고, 새로운 하드코드 가정값이 입력되면 그 값을 다시 이후 기간에 이어 쓰는 방식임. 이 과정은 예측 기간의 끝까지 계속됨.
- 예시에는 3Q26과 3Q27에 하드코드 값이 입력되어 있으며, 각 연도의 분기를 합산하는 연간 합계 열도 포함됨.
- 엑셀 플러그인으로 이 행을 작성하려면 다음 9단계가 필요함.
- 작성할 시트를 식별함.
- 행을 작성할 행 번호를 식별함.
- 행 레이블을 작성할 열을 식별하고 레이블을 입력함.
- 기간별 열을 식별해 대응 관계를 기억함. 예를 들어 1Q26은 C열, 2Q26은 D열이며, G열과 M열은 연간 합계, H열은 빈 구분 열임을 파악해야 함.
- 하드코드 이월 패턴임을 파악하고 해당 상황에 적용함.
- E4에 하드코드 25, K4에 하드코드 50을 입력하고, 하드코드 입력값의 글꼴 색이 파란색이어야 한다는 지식을 적용함.
- 1Q26과 2Q26에는 파란색 글꼴의 하드코드 0을 입력해야 함을 판단하고, 해당 셀이 C4와 D4임을 식별해 입력함.
- 나머지 분기 열은 직전 분기를 참조하도록 올바른 수식을 구성함. 연도가 바뀌면 바로 옆 셀이 아니라 세 칸 떨어진 셀을 참조해야 한다는 점도 고려해야 함. 예를 들어 F4는
=E4, I4는=F4를 입력함. - G열과 M열이 연간 합계 열임을 기억해 각각 앞선 네 셀을 더하도록 판단하고, 합계 함수를 사용해 수식을 구성함. 예를 들어 G4는
=SUM(C4:F4)를 입력함. - Modeloptic에서 같은 행을 작성하는 데 필요한 단계는 3단계임.
- 하드코드 이월 패턴임을 식별함.
- 시스템 프롬프트에서 이 패턴을 작성하는 도구를 사용할 수 있음을 확인하고 도구 설명을 읽어 사용법을 파악함.
- 적절한 인수를 사용해 도구를 호출함. 인수는
operation="add logic row",forecast-option="hardcode carry-forward",label="# of New Subscribers",values="3Q26:25, 3Q27:50"과 같은 형태임. - 엑셀에서는 단순한 행 하나를 작성하는 데도 관리할 사항이 많지만, DSL에서는 함수 호출 한 번으로 처리하고 나머지는 LLM의 범위 밖에 있는 코드가 담당함.
- 하드코드 이월이라는 개념과 데이터를 실제로 표현하는 작업 사이의 거리를 줄이면 LLM의 성능을 크게 높일 수 있음. 유한한 컨텍스트를 셀 주소와 저수준 엑셀 작동 방식에 낭비하는 대신 에이전트가 개념 중심으로 작업할 수 있음.
도메인용 DSL 만들기
- 에이전트에 DSL을 제공하는 주된 이유는 작업을 가능한 한 쉽게 만드는 것임. 작업이 쉬울수록 정확하게 수행할 가능성이 커지고 속도도 빨라짐.
- DSL은 에이전트가 생각해야 하는 양을 줄이고, 일부 작업을 에이전트가 처리하는 범위에서 아예 덜어내 작업을 쉽게 만들 수 있음. 결정론적 부분은 소프트웨어가 실행하고, 판단이 필요한 경우에만 LLM을 사용해야 함. 실행 세부 사항으로 에이전트를 복잡하게 만들지 말고 상위 개념에 집중하게 해야 함.
- 이는 에이전트가 호출할 도구를 더 많이 제공하는 것만을 뜻하지 않음. 도구는 에이전트가 DSL과 상호작용하게 하는 가장 좋은 방법일 수 있지만, 핵심은 생각과 결과 사이의 거리를 가능한 한 짧게 만드는 적절한 추상화를 찾는 것임. 이런 점에서 소프트웨어 엔지니어링이나 제품 개발을 잘하는 일과 개념적으로 크게 다르지 않음.
- 간단한 예시는 다음과 같음.
- 특정 조건에서 고객에게 이메일로 청구서를 보내려면 에이전트가 원시 이메일 전송 프로토콜인 SMTP를 다루게 하지 말고
send_invoice도구를 제공함. - 영업 담당자의 받은 편지함을 읽고 누락된 내용을 CRM에 반영하려면 에이전트가 SQL 데이터베이스를 직접 다루게 하지 말고
update_status도구를 제공함. - 고객 맞춤 계약서를 작성하는 에이전트에 매번 자유 형식 텍스트를 출력하게 하지 말고, 미리 작성된 특정 조항을 불러올 수 있는
insert_section도구를 제공함. - DSL을 에이전트에 제공하는 실무 방법은 다음과 같음.
- 에이전트가 호출할 수 있는 도구를 정의함.
- 도구 설명, 시스템 프롬프트, 스킬을 조합해 도구의 인수를 문서화함.
- 어느 방법이 최적인지는 사용 사례에 따라 다르지만, 도구를 덜 자주 사용할수록 스킬에 문서화하는 편이 유리함.
- 복잡성을 낮추는 것 외에도, 제대로 작성된 DSL은 구조화된 변경 기록을 가능하게 하는 중요한 장점이 있음. 에이전트가 정의된 연산 목록으로 시스템과 상호작용하고 코드가 해당 연산을 실행하도록 하면, 에이전트가 대신 수행한 모든 작업의 전체 목록을 사용자에게 제공할 수 있음. 이는 에이전트가 데이터를 직접 제멋대로 편집하는 경우와 대조됨.
- 도메인마다 고유한 세부 사항이 있으며, 이러한 접근 방식이 각자의 문제를 해결할 아이디어를 떠올리는 데 도움이 될 수 있음.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요