
결정론적 작업(Deterministic tasks)이 당신의 토큰을 낭비하고 있나요?
요약
AI 시스템 구축 시 결정론적 작업(Deterministic tasks)을 LLM에 맡길 경우 발생하는 비용과 신뢰성 문제를 다룹니다. 수학 연산이나 데이터 정렬처럼 정해진 규칙에 따라 결과가 나오는 작업은 AI 대신 코드나 라이브러리를 사용하는 것이 효율적입니다.
핵심 포인트
- 결정론적 작업은 AI 모델 대신 전통적인 코드로 처리하는 것이 훨씬 저렴함
- LLM은 모든 단계를 토큰으로 생성하므로 불필요한 비용과 지연이 발생함
- LLM은 산술 연산 등 결정론적 작업에서 오류를 범할 수 있어 신뢰성이 낮음
- 효율적인 AI 시스템을 위해 작업의 성격(결정론적 vs 비결정론적)을 구분해야 함
AI가 통합된 시스템을 구축했거나 현재 구축 중이라면, 아마도 계속해서 치솟는 토큰 비용 때문에 고통을 느껴본 적이 있을 것입니다.
비용이 급증할 때, 본능적으로 더 저렴한 모델을 찾게 됩니다. 하지만 만약 문제가 모델이 아니라, 당신이 모델에게 준 "작업(task)"에 있다면 어떨까요?
사람들은 보통 어떤 "사고(thinking)"가 필요하기 때문에 시스템에 모델을 도입합니다. 하지만 당신이 넘겨준 작업이 실제로는 "사고"가 필요한 작업이 아니라면 어떨까요? 그저 기본적인 수학인가요? 숫자 열을 더하는 것? 리스트를 알파벳 순으로 정렬하는 것? 문자열이 정규 표현식(regex) 패턴과 일치하는지 확인하는 것? 페이지에서 데이터를 스크래핑(scraping)하는 것인가요?
예를 들어, 2 + 2와 같은 작업에 "진정한" 사고가 필요할까요? 아니요! 답은 언제나 4가 될 것입니다!
당신이 1978년에 있든 2025년에 있든, 인도에 있든 일본에 있든 답은 언제나 4일 것입니다.
어떤 작업이 동일한 입력에 대해 매번 동일한 출력을 반환한다면, 그것은 **결정론적(deterministic)**입니다.
창의성, 판단력, 또는 의견이 전혀 필요하지 않습니다. 계산기, 기본적인 스크립트, 또는 기존 라이브러리가 결정론적 작업을 완벽하고 즉각적으로, 그리고 아주 적은 비용으로 처리할 수 있습니다.
이제 당신은 이렇게 물을지도 모릅니다. "Shloka, 왜 그렇게 불평하며 유난을 떠나요? AI 모델이 결정론적 작업과 비결정론적 작업을 모두 수행할 수 있는데, 결정론적 작업을 AI 모델에게 맡기는 게 도대체 왜 문제인가요?"
글쎄요……
많은 문제들이 있지만, 이 블로그에서는 그중 두 가지만 다뤄보도록 하겠습니다.
-
토큰 (즉, 소중한 돈). 우리는 지금까지 토큰이 많을수록 더 많은 비용이 든다는 것을 배웠습니다. 모델에게 "이 숫자 50개를 더해줘"와 같이 결정론적인 (Deterministic) 작업을 수행하도록 요청하면, 모델은 그 작업의 모든 단계를 생성해야 합니다. 이는 실제 코드를 실행하는 것에 비해 느릴 뿐만 아니라 비용도 많이 듭니다. 실제 코드는 거의 비용이 들지 않으면서도 동일한 작업을 순식간에 처리할 수 있습니다.
-
신뢰성 (Reliability). 재미있는 사실은, 모델도 결정론적인 작업을 틀릴 수 있다는 점입니다. 물론 우리가 기술적으로 많이 발전했기에 이는 다소 멍청한 예시일 수 있지만, 설명을 단순하게 하기 위해 말씀드리자면... 계산기는 절대 잘못 계산하지 않습니다. 반면, 텍스트 내에서 "추론 (Reasoning)"을 통해 산술 연산을 수행하는 언어 모델은 때때로 실수를 합니다.
마치 걸음마 단계의 아이에게 "2+2는 뭐야?"라고 묻는 것과 같습니다. 보통은 4라고 대답하겠지만, 아주 가끔은 아주 자신 있게 틀린 답을 말할 것이고, 여러분은 그것이 이미 후속 단계 (Downstream)에서 문제를 일으키기 전까지는 알아차리지 못할 것입니다.
이제 실제 코드베이스의 대규모 환경에서는 AI가 파이프라인 (Pipeline)의 수많은 단계에 얽혀 있기 때문에, "이것은 모델이 필요하다"와 "이것은 필요하지 않다" 사이의 경계가 매우 빠르게 모호해집니다. 그렇다면 실제로 그 경계를 어떻게 설정해야 할까요?
일반적인 해결책은 모델에게 생각을 "덜" 하라고 요구하는 것이 아닙니다. 모델에게 "다른" 방식으로 생각하도록 요구하는 것입니다.
좋은 시스템은 모델에게 모든 것을 스스로 하라고 요구하지 않습니다. 대신, 결정론적인 작업에 대해 실제 도구(Actual tools)를 호출할 수 있는 능력을 모델에게 부여합니다. 예를 들어 코드 인터프리터 (Code interpreter), 계산기, 데이터베이스 쿼리 (Database query), 검색 기능 등이 될 수 있습니다. 모델의 진짜 역할은 다음과 같이 변합니다:
- 무엇을 요청받았는지 이해하기
- 결정론적인 부분을 해결할 어떤 도구가 적합한지 결정하기
- 해당 부분을 도구에 넘기기
- 모호하고 비결정론적인 부분(쓰기, 추론, 해석, 결정)에 대해서만 자신의 판단력을 사용하기
이것은 흔히 "도구 사용 (Tool use)" 또는 "함수 호출 (Function calling)"이라고 불립니다.
그렇다면 무엇을 위임하고 무엇을 위임하지 않을지 실제로 어떻게 결정할까요?
이를 우선순위 목록이라고 생각하십시오. 위에서 아래로 확인하며, 가장 저렴하고 신뢰할 수 있는 것을 먼저, 가장 비싸고 유연한 것을 마지막에 배치합니다. 바로 위의 단계가 작업을 수행할 수 없을 때만 다음 단계로 넘어갑니다.
- 단순 수학이나 논리로 해결할 수 있나요? 스크립트를 작성하세요. 항상 이것을 먼저 확인해야 합니다.
- 기존 도구나 조회(lookup)로 해결할 수 있나요? 추측하는 대신 데이터베이스, API 또는 검색 인덱스를 직접 호출하세요.
- 단순한 고정 규칙으로 해결할 수 있나요?
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기