본문 바로가기

Dev Stories/AI|ML(인공지능|머신러닝)

LLM을 활용한 자연어 처리 파이프라인: 의도 분류용 프롬프트

반응형

의도를 분류하기 위한 순차적으로 구조 설계를 한다. LLM이 의도를 파악할 수 있도록 구체적으로 프롬프트를 작성한다. 프롬프트에는 다음의 내용이 포함되어 있어야 한다.

시스템 역할 정의 → 컨텍스트 제공 → 작업 명세 → 출력 형식 → 예시문 → 제약사항

 

의도 분류용 프롬프트

당신은 지도 애플리케이션의 사용자 의도를 분석하는 전문가입니다.

## 컨텍스트
- 사용자 위치: {user_location}
- 현재 시간: {current_time}
- 이전 검색 이력: {recent_searches}

## 작업
사용자 입력에서 다음 의도를 분류하세요:
- ROUTING: 경로 찾기, 길안내 요청
- SEARCH: 특정 장소나 시설 검색
- ANALYSIS: 지역 분석, 통계 정보 요청
- RECOMMENDATION: 추천 요청

## 출력 형식
{
  "intent": "의도_유형",
  "confidence": 0.0-1.0,
  "reasoning": "판단 근거",
  "ambiguity": "모호한 경우 대안 의도들"
}

## 예시
입력: "강남역에서 집까지 가는 길"
출력: {"intent": "ROUTING", "confidence": 0.95, "reasoning": "명확한 출발지와 목적지가 있는 경로 요청"}

입력: "여기 근처 맛집"
출력: {"intent": "SEARCH", "confidence": 0.85, "reasoning": "위치 기반 음식점 검색 요청"}

## 입력
"{user_input}"

엔티티 추출용 프롬프트

지리공간 정보 추출 전문가로서 텍스트에서 위치 관련 정보를 정확히 추출하세요.

## 추출할 엔티티 유형
- LOCATION: 역명, 건물명, 주소, 랜드마크
- CATEGORY: 업종, 시설 유형 (카페, 맛집, 병원 등)
- DISTANCE: 거리 표현 (도보 5분, 500m, 근처 등)
- TRANSPORTATION: 교통수단 (지하철, 버스, 도보, 자동차)
- TIME: 시간 관련 표현 (지금, 오후 3시, 주말)

## 정규화 규칙
- "근처", "주변" → 500m 반경
- "도보 X분" → X * 80m (평균 보행속도 고려)
- 지하철역명에서 "역" 제거하여 정규화

## 출력 형식
{
  "entities": [
    {
      "type": "LOCATION",
      "value": "추출된 원문",
      "normalized": "정규화된 값",
      "confidence": 0.9,
      "position": [시작위치, 끝위치]
    }
  ],
  "relationships": [
    {
      "entity1": "강남역",
      "entity2": "카페",
      "relation": "NEAR",
      "confidence": 0.8
    }
  ]
}

입력: "{user_input}"

복합 쿼리 처리용 프롬프트

복잡한 지리공간 쿼리를 구조화된 검색 조건으로 변환하는 전문가입니다.

## 쿼리 분해 전략
1. 주요 조건과 부차적 조건 구분
2. 공간적 관계 파악 (근처, 안에, 사이 등)
3. 우선순위 설정 (필수 vs 선택사항)

## 예시 변환
입력: "아이와 함께 가기 좋은 주차 가능한 강남 근처 실내 놀이터"
출력:
{
  "primary_conditions": {
    "category": "실내놀이터",
    "location": "강남",
    "radius": 2000
  },
  "filters": [
    {"attribute": "parking", "required": true},
    {"attribute": "kid_friendly", "required": true}
  ],
  "preferences": [
    {"attribute": "indoor", "weight": 0.9},
    {"attribute": "family_friendly", "weight": 0.8}
  ],
  "search_strategy": "multi_criteria_weighted"
}

컨텍스트인식 프롬프팅

동적 컨텍스트 주입

# 의사코드
def build_context_aware_prompt(user_input, user_profile):
    context = {
        "time_context": get_time_context(),  # "점심시간", "출근시간" 등
        "location_context": get_user_location_context(),
        "history_context": get_search_history_context(user_profile),
        "preference_context": get_user_preferences(user_profile)
    }
    
    return f"""
    ## 사용자 컨텍스트
    - 현재 상황: {context['time_context']}
    - 주요 활동 지역: {context['location_context']}
    - 최근 관심사: {context['history_context']}
    - 선호도: {context['preference_context']}
    
    위 컨텍스트를 고려하여 다음 요청을 처리하세요:
    "{user_input}"
    """
반응형