의도 인식 (Intent Recognition)을 위한 LLM 활용: 모범 사례 및 기술
요약
LLM을 활용하여 대화형 AI 및 에이전트 시스템의 핵심인 의도 인식(Intent Recognition)을 구현하는 방법론을 다룹니다. 전통적인 분류기 방식의 한계를 극복하기 위해 제로샷 분류, 퓨샷 러닝, JSON 모드를 활용한 구조화된 출력 기술을 제시합니다.
핵심 포인트
- LLM은 재학습 없이 프롬프트 수정만으로 동적 의도 정의 가능
- 의도 분류와 엔티티 추출(Slot filling)을 단일 호출로 통합 가능
- 제로샷 및 퓨샷 인컨텍스트 러닝을 통한 정확도 향상 기법
- JSON 모드를 활용하여 기계 판독 가능한 구조화된 데이터 확보
의도 인식 (Intent Recognition)은 대화형 AI (Conversational AI), 음성 비서 (Voice Assistants), 그리고 에이전트 도구 사용 (Agentic tool-use) 시스템의 중추입니다. 전통적인 NLU 파이프라인은 새로운 의도가 추가될 때마다 레이블이 지정된 데이터셋 (Labeled datasets)과 재학습 (Retraining)이 필요한 고정된 분류기 (Classifiers)에 의존합니다. 대규모 언어 모델 (Large Language Models, LLMs)은 의도 인식을 추론 작업 (Reasoning task)으로 취급함으로써 이를 단순화하며, 단 한 번의 호출로 제로샷 분류 (Zero-shot classification), 동적 분류 체계 (Dynamic taxonomies), 그리고 구조화된 엔티티 (Structured entities)의 자연스러운 추출을 가능하게 합니다. 과제는 모델 학습에서 프롬프트 엔지니어링 (Prompt engineering), 출력 제약 (Output constraints), 그리고 지연 시간 관리 (Latency management)로 전환됩니다.
의도 인식을 위해 LLM을 사용하는 이유
분류기 기반 (Classifier-based) 의도 탐지는 분류 체계가 안정적인 좁은 도메인에서는 잘 작동하지만, 사용자의 표현이 달라지거나 매주 새로운 의도가 추가될 때는 한계가 있습니다. LLM은 학습 데이터 (Training data) 대신 지침 (Instructions)으로부터 일반화하므로, 프롬프트를 수정함으로써 의도를 재정의할 수 있습니다. 또한 LLM은 의도 분류 (Intent classification)와 슬롯 채우기 (Slot filling)를 통합하여, 사용자의 목표를 식별하는 동일한 요청 내에서 날짜, 제품명 또는 위치를 추출할 수 있습니다.
트레이드오프 (Tradeoff)는 지연 시간 (Latency)과 일관성 (Consistency)입니다. 작은 BERT 스타일 모델은 밀리초 (Milliseconds) 단위로 실행되는 반면, LLM 호출은 수백 밀리초가 걸릴 수 있습니다. 많은 프로덕션 시스템 (Production systems)에서 유연성 확보로 얻는 이득은 비용보다 크며, 특히 LLM 호출이 다운스트림 포맷팅 (Downstream formatting)이나 도구 선택 (Tool selection)까지 처리할 때 더욱 그러합니다.
핵심 기술
열거된 의도를 활용한 제로샷 분류 (Zero-shot classification)
시스템 프롬프트 (System prompt)에 의도의 폐쇄 목록 (Closed list)을 제공하고 정확히 하나를 선택하도록 모델에 요청하십시오. 의도 이름은 서술적이면서도 간결하게 유지해야 합니다. 좋은 시스템 프롬프트의 예시는 다음과 같습니다:
당신은 의도 인식 엔진입니다. 사용자의 메시지를 다음 의도 중 정확히 하나로 분류하십시오:
- ORDER_STATUS
- REFUND_REQUEST
...
퓨샷 인컨텍스트 러닝 (Few-shot in-context learning)
의도 경계가 미묘할 때는 프롬프트에 클래스당 2~3개의 예시를 포함하세요. 이는 어떠한 그래디언트 업데이트 (gradient updates) 없이도 정확도를 향상시킵니다. 예시가 컨텍스트 윈도우 (context window) 내에 존재하기 때문에, 배포 시점이나 심지어 사용자 세그먼트별로 예시를 조정할 수 있습니다.
JSON 모드 (JSON mode)를 활용한 구조화된 출력 (Structured output)
자유 형식의 텍스트 (free text)를 파싱하는 대신, 모델이 JSON 객체를 반환하도록 제한하세요. 이를 통해 의도 레이블 (intent labels), 신뢰도 점수 (confidence scores), 추출된 엔티티 (entities)를 기계 판독 가능한 형식으로 얻을 수 있습니다. Oxlo.ai를 포함한 대부분의 현대적인 추론 API는 response_format 파라미터를 통해 JSON 모드를 지원합니다.
의도 라우팅 (Intent routing)을 위한 함수 호출 (Function calling)
각 의도가 특정 도구(tool)나 API에 매핑되는 경우, 함수 호출 (function calling)을 사용하세요. 각 의도를 함수 스키마 (function schema)로 정의합니다. 모델은 호출할 함수의 이름과 함께 파싱된 인자 (arguments)를 반환합니다. 이 패턴은 멀티턴 대화 (multi-turn conversations)를 네이티브하게 지원하는데, 모델이 구조화된 도구 호출 (tool calls)을 생성하면서도 턴 사이에 컨텍스트를 유지할 수 있기 때문입니다.
모호한 질의를 위한 사고의 사슬 (Chain-of-thought)
사용자 입력이 모호하거나 여러 잠재적 목표를 포함하고 있는 경우, 모델이 의도를 선택하기 전에 단계별로 추론하도록 요청하세요. JSON 객체 내부의 별도 필드에 추론 과정을 요청하여 최종 사용자에게는 숨기고, 애플리케이션 로직에는 최종 의도 레이블만 노출함으로써 추론 과정을 숨길 수 있습니다.
모범 사례 (Best Practices)
상호 배타적인 의도 설계
중복은 불안정성을 초래합니다. 만약 REFUND_REQUEST와 ORDER_STATUS가 모두 주문 번호를 빈번하게 포함한다면, 모델은 예측 불가능하게 결정을 분산할 것입니다. 중복되는 의도를 병합하고 나중에 분기하기 위해 엔티티 추출 (entity extraction)을 사용하거나, 명확화 질문 (clarifying questions)을 별도의 의도로 추가하세요.
시스템 프롬프트의 안정성 유지
의도 인식은 처리량이 많은 엔드포인트 (high-volume endpoint)입니다. 시스템 프롬프트를 변경하면 입력 분포 (input distribution)가 바뀌어 정확도가 변할 수 있습니다. 프롬프트를 git으로 버전 관리하고, 변경 사항을 배포하기 전에 회귀 테스트 (regression tests)를 수행하세요.
다중 의도 및 모호성 명시적 처리
실제 사용자들은 종종 요청을 묶어서 전달합니다. MULTI_INTENT 레이블을 추가하거나 모델이 의도(intents)의 배열을 반환할 수 있도록 허용하세요. 신뢰도(confidence)가 낮다면 추측하기보다는 명확한 확인을 위한 단계(clarification turn)로 라우팅하세요. 잘못된 도구(tool)를 실행하는 것보다 한 번 더 물어보는 것이 더 낫습니다.
분류를 위해 낮은 온도 (low temperature) 사용하기
의도 인식 (intent recognition) 작업에는 온도를 0.0 또는 0.1로 설정하세요. 창의적인 의역이 아닌 재현 가능한 출력 (reproducible outputs)이 필요합니다. 만약 사용 중인 제공업체가 지원한다면, 불확실성 (uncertainty)을 정량화하기 위해 로그 확률 (logprobs)을 요청하세요.
대규모 운영 시 비용 고려하기
의도 인식은 보통 모든 사용자 메시지에서 실행되므로 비용 구조가 중요합니다. 토큰 기반 가격 책정 (token-based pricing) 방식은 긴 시스템 프롬프트 (system prompts)와 퓨샷 예시 (few-shot examples)에 대해 불이익을 줍니다. Oxlo.ai는 요청당 고정 가격 (flat per-request pricing)을 사용하므로, 호출당 추론 비용 (inference cost)을 높이지 않고도 상세한 지침, 대규모 퓨샷 세트 또는 긴 문맥 이력 (context histories)을 포함할 수 있습니다. 대량의 트래픽이 발생하거나 문맥이 긴 에이전트 워크로드 (agentic workloads)의 경우, 이는 토큰 기반 제공업체에 비해 상당한 비용 절감 효과를 가져올 수 있습니다. 자세한 내용은 Oxlo.ai pricing을 참조하세요.
구현 예시 (Implementation Example)
다음 Python 예시는 OpenAI SDK와 Oxlo.ai를 사용하여 사용자 메시지를 분류하고 JSON 모드 (JSON mode)로 엔티티 (entities)를 추출하는 방법을 보여줍니다. Oxlo.ai API 키가 있다고 가정합니다.
import openai
client = openai.OpenAI(
...
Oxlo.ai는 OpenAI SDK와 완전히 호환되므로, 클라이언트 변경 없이 이 코드를 바로 사용할 수 있습니다. response_format 플래그는 유효한 JSON을 보장하므로, 다운스트림 라우터 (downstream router)가 의도와 엔티티를 안전하게 파싱할 수 있습니다.
평가 및 반복 (Evaluation and Iteration)
에지 케이스 (edge cases)와 적대적 예시 (adversarial examples)를 포함하여 최소 100개의 대표적인 발화 (utterances)로 구성된 골든 평가 세트 (golden evaluation set)를 구축하세요. 의도별 정밀도 (precision)와 재현율 (recall)을 추적하세요. 모델이 오류를 범할 때는 프롬프트를 점검하세요. 의도 정의가 모호한가요? 예시 세트가 너무 작은가요?
기존 분류기(classifier)와 LLM 의도 분류기가 병렬로 실행되는 섀도 배포(shadow deployment)를 고려해 보세요. 실제 트래픽에 대해 출력을 비교한 후 전환(cut over)을 진행하십시오. Oxlo.ai를 사용하면 요청당 고정 가격(flat per-request pricing) 정책 덕분에, 중첩 기간 동안 토큰(token) 단위가 아닌 요청(request) 단위로 비용을 지불하므로 대규모 컨텍스트 윈도우(context window)를 사용하는 경우에도 이러한 섀도 테스트를 저렴하게 수행할 수 있습니다.
적절한 모델 선택하기
모든 의도 인식(intent recognition) 작업에 프런티어 모델(frontier model)이 필요한 것은 아닙니다. 분류 체계(taxonomy)가 작고 단순하며 처리량이 많은 분류 작업의 경우, Oxlo.ai에서 제공하는 Llama 3.3 70B와 같은 빠르고 범용적인 모델은 낮은 지연 시간(latency)과 강력한 지시 이행(instruction following) 능력을 제공합니다. 다국어 에이전트(multilingual agents)나 복잡한 도구 사용 라우팅(tool-use routing)의 경우, Qwen 3 32B가 견고한 추론(reasoning)과 에이전트 워크플로(agent workflow) 지원을 제공합니다. 사용자 요청이 도구 호출(tool dispatch) 전에 깊은 추론이나 모호한 코딩 명령을 포함하는 경우에는 DeepSeek R1 671B MoE 또는 Kimi K2.6을 사용하여 추가적인 지연 시간을 감수할 가치가 있습니다.
Oxlo.ai는 경량 임베딩(embeddings)부터 비전(vision) 및 오디오(audio)에 이르기까지 7개 카테고리에 걸쳐 45개 이상의 모델을 호스팅하며, 인기 있는 모델에 대해 콜드 스타트(cold starts)가 발생하지 않습니다. 이를 통해 별도의 추론 스택(inference stacks)을 관리할 필요 없이 모델 역량을 작업 복잡도에 맞출 수 있습니다. 동일한 OpenAI 호환 엔드포인트(OpenAI-compatible endpoint)를 통해 의도 분류에는 더 작은 모델로 시작하고, 에이전트 오케스트레이션(agent orchestration)에는 추론 모델로 업그레이드할 수 있습니다.
결론
LLM을 활용한 의도 인식은 취약한 학습 파이프라인(training pipelines)을 유연하고 프롬프트 중심적인 분류(prompt-driven classification)로 대체합니다. 성공 여부는 명확한 분류 체계(taxonomies), 구조화된 출력 제약(structured output constraints), 낮은 온도 샘플링(low temperature sampling), 그리고 엄격한 평가(evaluation)에 달려 있습니다. 의도 인식은 모든 사용자 턴(user turn)에서 실행되므로, 추론 경제성(inference economics)이 수익성에 직접적인 영향을 미칩니다. Oxlo.ai의 요청 기반 가격 책정은 긴 시스템 프롬프트(system prompts)와 퓨샷 예시(few-shot examples)에 따른 비용 부담을 제거하여, 대규모 대화형 및 에이전트 시스템을 위한 실질적인 백본(backbone) 역할을 합니다. 폭넓은 모델 지원과 완전한 OpenAI SDK 호환성을 통해, 클라이언트 코드를 리팩토링(refactoring)하지 않고도 의도 분류기를 배포, 테스트 및 확장할 수 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기