LLMOps
LLMOps는 대규모 언어 모델 애플리케이션의 효과적인 관리, 배포, 유지를 위한 프레임워크다. LLMOps는 MLOps와 유사하지만, 더 큰 모델 크기, 텍스트 데이터 중심, 사전 학습 모델(foundation modle) 사용 등의 특징이 있다.
LLM 수명 주기는 아이디어, 개발, 운영 단계로 구성된다. 아이디어 단계에서는 데이터 소싱과 LLM 모델 선택이 이루어지고, 개발 단계에서는 프롬프트 엔지니어링, 체인과 에이전트 구성, RAG 또는 파인튜닝 적용, 테스트가 진행된다. 운영 단계에서는 배포, 모니터링, 비용 관리, 거버넌스 및 보안이 중요하다.
프롬프트 엔지니어링은 LLM의 성능 향상, 출력 제어, 편향 및 환각 방지를 위해 중요하다. 지시, 예시/컨텍스트, 입력 데이터, 출력 지표 등의 요소로 구성되며, 프롬프트 관리와 템플릿 사용이 효율성을 높인다. 체인과 에이전트는 복잡한 애플리케이션 개발과 모듈식 설계를 가능하게 한다. 체인은 결정론적이고 복잡성이 낮은 반면, 에이전트는 적응적이고 복잡성이 높다.
RAG(Retrieval Augmented Generation)는 외부 지식을 활용하여 LLM의 추론 능력을 보완하는 기술이다. 파인튜닝은 특정 작업과 도메인에 맞게 LLM의 가중치를 조정하는 방법이다. 테스트 단계에서는 다양한 메트릭을 사용하여 LLM 애플리케이션의 출력 품질을 평가한다.
배포 과정에서는 호스팅 선택, API 설계, 실행 방식 결정 등이 이루어진다. CI/CD 파이프라인과 스케일링 전략 수립도 중요하다. 모니터링 및 관찰 가능성은 입력, 기능, 출력에 대한 지속적인 감시를 통해 시스템의 상태를 파악하는 것이다. 비용 관리를 위해 적절한 모델 선택, 프롬프트 최적화, 호출 수 최적화 등의 전략을 사용한다.
마지막으로 거버넌스 및 보안은 LLM 애플리케이션의 안전한 운영을 위해 필수적이다. 접근 제어, 프롬프트 주입 방지, 출력 조작 방지, 데이터 무결성 유지, 서비스 거부 공격 대응 등의 보안 조치가 실무적용에 필요하다.
RAG
RAG(Retrieval-Augmented Generation)는 대규모 언어 모델(LLM)의 성능을 향상시키는 혁신적인 기술로 LLM의 일반적인 지식과 외부 데이터베이스의 특정 도메인 정보를 결합하여 더 정확하고 최신의 응답을 생성한다.
RAG의 핵심 구성 요소는 벡터 데이터베이스, 효율적인 검색 시스템, LLM이다. 벡터 데이터베이스는 문서나 지식을 벡터 형태로 저장하며, 검색 시스템은 이 데이터베이스에서 관련 정보를 신속하게 찾아낸다. LLM은 이렇게 검색된 정보를 바탕으로 최종 응답을 생성하는 역할을 한다.
RAG의 작동 과정은 다음과 같다. 먼저 사용자의 쿼리를 받으면, 이와 관련된 정보를 벡터 데이터베이스에서 검색한다. 그 다음, 검색된 정보를 사용자의 원래 쿼리와 함께 LLM에 제공한다. 마지막으로, LLM이 이 모든 정보를 종합하여 최종 응답을 생성한다.
이 기술의 주요 장점은 최신 정보 제공, 정확성 향상, LLM의 환각 현상 감소이다. 외부 데이터베이스를 통해 최신 정보를 활용할 수 있어, 특정 도메인의 정보를 더 정확하게 참조할 수 있다. 또한, LLM이 잘못된 정보를 생성할 가능성을 크게 줄일 수 있다.
프롬프트 공학
프롬프트 공학은 대규모 언어 모델(LLM)의 성능을 최적화하기 위해 입력 프롬프트를 설계, 개발, 최적화하는 과정이다. LLM에게 명확한 지시, 관련 맥락, 적절한 예시, 구체적인 입력 데이터, 원하는 출력 형식을 제공하여 모델이 특정 작업을 정확하고 효과적으로 수행하도록 유도하는 기술이다. 프롬프트 공학은 반복적인 테스트와 개선 과정을 통해 최적의 프롬프트를 찾아내며, 이를 통해 LLM의 응답 품질, 일관성, 관련성을 향상시킨다. 특히, LLM 기반 애플리케이션의 성능을 크게 좌우하는 핵심 요소로, 다양한 분야에서 AI의 효과적인 활용을 가능하게 하는 중요한 기술이다.
프롬프트 공학에서 프롬프트는 지시사항, 예시/맥락, 입력 데이터, 출력지표 등으로 구성된다.
지시사항 (Instruction): LLM에게 수행해야 할 작업을 명확히 알려주는 부분이다. 작업의 목적, 수행 방법, 주의사항 등을 포함한다. 명확하고 구체적인 지시는 모델이 원하는 결과를 생성하는 데 핵심적인 역할을 한다.
예시/맥락 (Examples/Context): 모델에게 작업의 맥락을 제공하고 원하는 출력 형식을 보여준다. Few-shot 학습 예시를 통해 모델의 성능을 향상시킬 수 있다. 관련 배경 정보나 도메인 지식도 여기에 포함될 수 있다.
입력 데이터 (Input data): 모델이 실제로 처리해야 할 구체적인 정보나 데이터다. 질문, 문장, 문단 등 다양한 형태가 될 수 있으며, 작업의 핵심 대상이 된다.
출력 지표 (Output indicator): 원하는 출력의 형식, 구조, 스타일을 지정하는 부분으로 모델의 응답을 일관되고 예측 가능한 형태로 유도할 수 있다.
네 가지 요소는 상호 보완적으로 작용하여 효과적인 프롬프트를 구성한다. 지시사항은 전체적인 방향을 제시하고, 예시는 구체적인 기대치를 보여준다. 입력 데이터는 실제 처리 대상을 제공하며, 출력 지표는 결과물의 형태를 규정한다. 이들을 적절히 조합하여 사용하면 LLM이 원하는 작업을 정확하게 수행하고 높은 품질의 출력을 생성할 가능성이 높아진다.
텍스트 감정 분석 작업을 위한 프롬프트를 살펴보자.
지시사항: “주어진 문장의 감정을 분석하고, 그 감정이 긍정적, 중립적, 부정적 중 어디에 해당하는지 판단하세요. 감정 강도도 1-5 척도로 평가해주세요 (1: 매우 약함, 5: 매우 강함).”
예시/맥락: ““” 예시 1: ‘오늘 날씨가 정말 좋아서 기분이 좋다.’ 분석: 긍정적, 강도: 4
예시 2: ‘이 영화는 그저 그랬어. 특별히 좋지도 나쁘지도 않았어.’ 분석: 중립적, 강도: 2
예시 3: ‘시험에 떨어져서 너무 실망스럽고 우울해.’ 분석: 부정적, 강도: 5 ““”
입력 데이터: “분석할 문장: ‘새로 산 노트북이 예상보다 성능이 좋아서 만족스럽지만, 가격이 비싼 편이라 약간 아쉽다.’”
출력 지표: “출력 형식: 감정: [긍정적/중립적/부정적] 강도: [1-5 사이의 숫자] 설명: [분석 근거를 간단히 서술]”
이러한 구조화된 프롬프트는 LLM이 감정 분석 작업을 정확하게 수행하고, 일관된 형식의 결과를 제공하도록 유도한다. 각 구성요소가 명확하게 정의되어 있어 모델이 작업을 이해하고 수행하는 데 필요한 모든 정보를 포함하고 있다.
앤쓰로픽 클로드 3.5 소넷 LLM에 프롬프트를 전달하여 얻은 결과는 다음과 같다.
출력 형식:
감정: 긍정적
강도: 3
설명: 주어진 문장은 전반적으로 긍정적인 감정을 나타내지만, 일부 부정적인 요소도 포함하고 있다. 노트북의 성능에 대한 만족감이 주된 감정이며 이는 긍정적이다. 하지만 가격에 대한 아쉬움이 함께 표현되어 있어, 완전히 강한 긍정은 아니다. 따라서 감정은 긍정적이지만 강도는 중간 정도인 3으로 평가했다. 만족감과 아쉬움이 공존하는 복합적인 감정 상태를 나타내고 있다.