24P by xguru 14일전 | favorite | 댓글과 토론
  • LLM의 정확하고 적합한 출력 확보를 위해서는 정교한 프롬프트 디자인이 필수적임
  • 프롬프트 디자인은 머신러닝에 익숙하지 않은 사용자도 최소한의 오버헤드로 모델 출력을 제어할 수 있게 함
  • Uber는 LLM을 빠르게 반복 실험할 수 있도록 중앙 집중식 툴킷을 개발
    • 프롬프트 템플릿 생성 및 관리
    • RAG 및 실행 시점의 데이터셋 활용
  • 기능:
    • 시스템 명령, 동적 맥락화, 대량 오프라인 생성(LLM 추론), 응답 평가 지원
    • 버전 관리, 협업, 안전성 확인(할루시네이션 체크, 표준 평가 프레임워크, 안전 정책 포함)

프롬프트 엔지니어링 Lifecycle

프롬프트 엔지니어링 수명주기는 두 단계로 구성됨:

  • 개발 단계: LLM 탐색, 프롬프트 템플릿 반복, 평가의 3단계로 구성
    • LLM 탐색 단계: 모델 카탈로그와 GenAI Playground를 통해 사용 가능한 LLM을 탐색하고 프롬프트로 LLM 응답을 테스트
    • 프롬프트 템플릿 반복 단계: 구체적인 비즈니스 요구사항을 파악, 샘플 데이터 수집, 프롬프트 생성/분석/테스트, 응답 평가 및 필요에 따라 수정. Auto-prompting을 통해 처음부터 프롬프트 템플릿을 생성할 필요 없음
    • 평가 단계: 더 큰 데이터셋으로 프롬프트 템플릿을 테스트하여 성능 측정. LLM을 판단자로 활용하거나 맞춤형 코드 기반 LLM 평가자를 사용해 성능 평가 가능
  • 프로덕션화(Productionization) 단계: 평가 단계에서 임계값을 통과한 프롬프트 템플릿만 생산화. 프로덕션 환경에서 사용을 추적/모니터링하고 시스템 사용 데이터를 수집해 프로세스 향상에 활용

아키텍처

  • 프롬프트 템플릿 UI/SDK: 프롬프트 템플릿과 리비전 관리. GetAPI, Execute API와 통합
  • LLM 모델 카탈로그: 배포된 LLM 모델과 인터페이스
  • 모델과 프롬프트는 ETCD와 UCS에 저장되고 오프라인 생성 파이프라인과 프롬프트 템플릿 평가 파이프라인에 사용됨

프롬프트 템플릿 생성

  • 프롬프트 툴킷 프롬프트 빌더는 사용자를 위해 자동으로 프롬프트를 생성
  • 특정 AI 사용 사례에 맞춘 고급 프롬프팅 기술을 발견하는데 도움을 줌
  • LangChain 기반의 내부 Langfx 프레임워크 이용한 자동 프롬프트 빌더는 다음 단계를 따름
    • 1. 프롬프트 엔지니어링 모범 사례 통합
    • 2. 프롬프트 생성을 돕기 위한 템플릿 리스팅 상세 지침과 몇 가지 예제 제공
    • 3. 프롬프트 생성을 지원하기 위한 LLM 모델 활용
  • 고급 프롬프트 가이드라인: 프롬프트 빌더는 아래 원칙을 활용하여 프롬프트를 생성
    • CoT(Chain of Thought) 프롬프팅: 중간 추론 단계를 통해 복잡한 추론 능력을 가능하게 함
    • Auto-CoT: 리딩 워드 "think step by step" 사용. 수동 노력 제거를 위해 LLM에 "Let's think step by step" 프롬프트 활용
    • 프롬프트 체이닝: 여러 작업이나 변환이 포함된 시나리오에 사용 가능
    • ToT(Tree of Thought): Chain-of-thought 프롬프팅을 일반화하고 언어 모델로 일반 문제 해결을 위한 중간 단계로 사용될 수 있는 생각 탐색 장려
    • APE(Automatic Prompt Engineering): 명령어 생성 및 선택 자동화 프레임워크
    • 멀티모달 CoT 프롬프팅: 텍스트와 이미지를 2단계 프레임워크로 통합. 1단계는 멀티모달 정보 기반 근거 생성, 2단계는 생성된 근거를 활용한 답변 추론
  • 리비전 관리
    • 프롬프트 템플릿 반복은 코드 기반 반복 모범 사례를 따름
    • 테스트 응답 및 데이터셋으로 테스트하기 위해 사용자는 명령어와 모델 매개변수를 수정할 수 있음
    • 프롬프트 템플릿의 각 반복마다 코드 검토가 필요함. 승인되고 합쳐지면, 새로운 프롬프트 템플릿 리비전이 생성됨

프롬프트 템플릿 평가

프롬프트 템플릿의 성능을 평가하기 위해 여러 컴포넌트가 협력함:

  • 두가지 평가 메커니즘
    • LLM을 평가자로 사용. 주관적 품질이나 언어적 뉘앙스가 중요한 작업에 유용함
    • 맞춤형 사용자 정의 코드를 사용하여 성능 평가. 성능의 특정 측면을 측정하는데 유용함
  • 평가 프롬프트 템플릿: 평가를 위한 명령어, 간단한 예제, 지표, 응답 형식 등을 제공하는 사용자 친화적 템플릿
  • 실제 프롬프트 템플릿: 생산 시 사용되는 템플릿. 런타임에 하이드레이션되며 성능 평가에 사용됨
  • 입력 데이터셋 옵션: 라벨링된 골든 데이터셋 또는 생산 트래픽에서 파생된 데이터셋
  • 각 템플릿은 특정 명령어, 컨텍스트, 관련 모델 및 매개변수를 고려하여 평가됨

Uber에서의 사용 사례

오프라인 LLM 서비스

LLM 배치 오프라인 생성 파이프라인은 대규모 LLM 응답 생성을 위한 배치 추론을 용이하게 함:

  • 소비자 사용자명 검증 사용 사례에 활용 가능
  • MA Studio에서는 관련 데이터셋을 선택하고 입력하기만 하면 됨
  • 프롬프트 템플릿은 데이터셋으로 동적으로 하이드레이션됨

온라인 LLM 서비스

프롬프트 템플릿에는 런타임 특정 값으로 대체되어야 하는 동적 플레이스홀더가 포함됨:

  • 현재 Jinja 기반 템플릿 구문을 사용하여 문자열 유형의 대체만 지원함
  • 프롬프트, 템플릿 및 모델 간 팬아웃(fan-out) 기능 지원
    • 템플릿: API 템플릿에는 일반 데이터 모델에서 노출한 페이로드를 공급업체별 API 구조로 포맷하는 기능 포함
    • 프롬프트 및 모델: 프롬프트는 특정 모델 및 템플릿에 고정됨. 서비스는 프롬프트를 가져오고 필요한 모델 및 템플릿 매개변수로 genAI API를 호출하여 실행함

요약 사용 사례로 위 기능 탐색:

  • 지원 티켓(contact)을 여러 상담원이 처리할 수 있는 시나리오에서 새 상담원은 컨텍스트 이해를 위해 티켓을 살펴보거나 고객에게 문제 재설명을 요청해야 함
  • 상담원 간 인계시 요약본을 제공하여 이를 해결함

모니터링

모니터링은 생산에 사용되는 생산 프롬프트 템플릿의 성능을 측정함:

  • 일일 성능 모니터링 파이프라인이 생산 트래픽에 대한 성능 평가 실행
  • 지연 시간, 정확도, 정확성 등 프롬프트 템플릿 생산 반복별 지표 모니터링
  • MES 대시보드는 성능 모니터링 지표로 매일 새로 고침됨

결론

Uber의 프롬프트 엔지니어링 툴킷은 개발 및 생산의 다양한 단계에서 LLM과의 상호작용 및 활용을 향상시키기 위한 포괄적인 프레임워크:

  • Gen AI Playground에서 LLM 기능 최초 탐색부터 상세 프롬프트 템플릿 반복 및 생성까지 지원
  • 툴킷의 아키텍처는 고급 가이드라인 기술과 견고한 평가 방법을 통합하는 프롬프트 디자인에 체계적인 접근 방식을 제공함
  • 프롬프트 템플릿의 개발부터 생산 사용 및 모니터링까지의 구조화된 수명주기는 각 템플릿이 엄격하게 테스트되고 성능을 위해 최적화되도록 보장함
  • 향후 온라인 평가 및 평가용 RAG와 오프라인 생성용 RAG와 통합할 계획임