DSPy란 무엇인가요?

작성자:

Joshua Noble

Data Scientist

DSPy란 무엇인가요?

대규모 언어 모델(LLM), 에이전틱 워크플로 및 벡터 스토어는 계속해서 더 강력해졌으며, AI 애플리케이션 개발을 간소화하는 프레임워크가 인기를 얻고 있습니다. DSPy는 Python 코드를 사용한 구성으로 프롬프트 엔지니어링과 자연어의 직접적인 입력을 대체하는 범용 모듈을 제공하는 툴킷입니다. 

일반적으로 LLM 또는 파운데이션 모델로 작업하려면 사용자가 올바른 출력을 얻기 위해 텍스트 프롬프트를 조정하는 신중한 프롬프트 엔지니어링이 필요합니다. 이 접근 방식은 효과적일 수 있지만, 시간이 많이 걸리고 오류가 발생하기 쉬우며 모델의 새 버전이 출시될 때 업데이트해야 하는 취약한 도구 체인을 생성합니다. 애플리케이션 구축을 위한 LangChain 체인 언어 모델 및 LlamaIndex와 같은 인기 있는 프레임워크는 텍스트 내 검색 능력을 개선하는 데 중점을 둡니다. 이러한 개발자는 여전히 프롬프트를 미세하게 조정하는 데 필요한 전문 지식과 원하는 출력을 얻기 위해 각 프롬프트를 테스트할 시간이 필요합니다. DSPy는 언어 모델 동작을 안내하고 경계하는 프로그래밍 방식의 접근 방식을 통해 이 프롬프트 튜닝 프로세스를 단순화합니다.

DSPy는 프롬프트 구성의 최적화를 자동화하는 데 중점을 둡니다. 즉각적인 프롬프트 해킹과 일회성 합성 데이터 생성기를 대체하기 위해 DSPy는 프로그램의 매개변수를 업데이트하는 알고리즘인 일반 옵티마이저를 제공합니다. 코드, 데이터, 어설션 또는 지표를 수정할 때마다 프로그램을 다시 컴파일할 수 있으며, DSPy는 프롬프트 최적화를 수행하여 변경 사항에 맞는 새롭고 효과적인 프롬프트를 생성합니다.

때때로 사람들은 자동 프롬프트 최적화가 LLM이 사용자 생성 프롬프트를 비판하고 개선하는 시스템을 만드는 것을 의미한다고 상상합니다. 이는 가장 효과적인 LLM 사용 방법이 아닙니다. DSPy는 LLM의 아이디어 생성 기능을 활용하여 자체 프롬프트를 생성합니다. 그런 다음 지표 세트를 사용하여 이러한 변형을 테스트하여 문제를 더 잘 해결하는지 확인합니다. 사용자가 할당한 지표에 대해 수치적으로 더 나은 성과를 내지 못하면 새로운 프롬프트는 폐기됩니다. 이는 프롬프트의 적합성을 평가하고 반복적으로 개선되는 진화 알고리즘과 유사합니다.

DSPy 사용 사례

DSPy는 다양한 유형의 워크플로 및 시나리오에서 유용할 수 있습니다. 가장 일반적으로 사용되는 워크플로 및 시나리오 중에는 검색 증강 생성, 멀티홉 질문 답변 및 문서 요약이 있습니다.

생각의 연결고리

생각의 연결고리(CoT) 프롬프트는 모델에 복잡한 작업을 최종 해결을 향한 일련의 논리적 단계로 세분화하도록 요청하여 인간과 유사한 추론 과정을 시뮬레이션합니다. 이러한 추론 단계는 모델의 컨텍스트 창에 입력되어 당면한 작업에 더 많은 지식 기반을 제공하며, 복잡한 시나리오에서도 더 나은 답변을 제공하는 경우가 많습니다. DSPy는 언어 모델이 생각의 연결고리 프롬프트와 전략을 생성하도록 하고 이를 언어 모델로 테스트하여 주어진 모델에 대해 가장 효과적인 프롬프트를 생성하도록 하는 데 도움이 됩니다.

검색 증강 생성

검색 증강 생성(RAG)은 LLM이 출처에서 방대한 지식 말뭉치를 활용하고 지식 저장소를 쿼리하여 관련 구절이나 콘텐츠를 찾아 잘 정제된 답변을 생성할 수 있도록 하는 접근 방식입니다. RAG는 LLM이 원래 해당 주제에 대해 교육을 받지 않았더라도 실시간 지식을 동적으로 사용하고 정답을 제공할 수 있도록 보장합니다. 이러한 추가 성능으로 인해 RAG 파이프라인을 설정할 때 복잡성이 더 커집니다. DSPy는 프롬프트 파이프라인을 설정하고 효과적인 프롬프트를 생성하거나(프롬프트 튜닝) 더 작은 모델의 경우 모델 가중치 자체를 미세 조정하는 원활한 접근 방식을 제공합니다.

RAG 파이프라인은 레이블이 지정된 예시를 사용하거나 부트스트랩 예시를 사용하는 두 가지 방법으로 DSPy로 최적화할 수 있습니다. 레이블이 지정된 예시는 기존에 존재하며, 수동으로 레이블이 지정된 예시는 학생 모델을 직접 훈련하는 데 사용됩니다. DSPy 컨텍스트에서 부트스트랩은 교사와 학생 패러다임에서 언어 모드를 사용하는 것을 의미합니다. 교사는 사용자가 제공한 몇 가지 프롬프트를 기반으로 새로운 교육 예시를 생성합니다. 그런 다음 이러한 부트스트랩된 예시를 수동으로 레이블이 지정된 예시와 함께 또는 대신 사용하여 정답을 제공할 때까지 학생 모듈을 훈련합니다. 그런 다음 올바른 답변을 생성하는 프롬프트는 DSPy 파이프라인 전체에서 반복적으로 업데이트됩니다.

멀티홉 질문 답변

복잡한 질문 답변 작업에서는 단일 쿼리만으로는 충분하지 않은 경우가 많습니다. 인기 있는 HotPot 질문 답변 데이터 세트는 여러 질문 구문 분석 및 검색을 해야 답변할 수 있는 질문으로 구성됩니다. 예를 들어: "빌 넬슨은 몇 년도에 처음으로 발사된 우주왕복선에 페이로드 전문가로 탑승했습니까?" 이 질문에 답변하려면 빌 넬슨이 우주왕복선 컬럼비아호를 타고 비행했다는 것을 알고 컬럼비아호가 1981년에 처음 비행했다는 것을 확인할 수 있어야 합니다.

검색 증강 문헌에서 이 문제에 대한 표준적인 접근 방식은 멀티홉 검색 시스템을 구축하는 것입니다. 이러한 시스템은 검색된 결과를 읽은 다음 최종 답변에 도달하기 전에 필요한 경우 추가 정보를 수집하기 위해 추가 쿼리를 생성합니다. DSPy를 사용하면 단 몇 줄의 코드만으로 같은 시스템을 모델을 업데이트하고 파이프라인을 다시 실행할 수 있는 강력한 방식으로 만들 수 있습니다.

요약

요약은 핵심 정보와 주요 아이디어를 유지하면서 긴 텍스트를 더 짧은 버전으로 압축합니다. 이는 LLM이 기사 초록 작성부터 긴 문서에서 간결한 보고서를 생성하는 일에 이르기까지 다양한 응용 분야를 통해 잘할 수 있는 강력한 기술입니다.

언어 모델에서 생성된 요약의 품질을 평가하는 것은 중요한 과제를 안겨줍니다. 정답 또는 오답이 명확한 작업과 달리, 요약 품질은 주관적이고 상황에 따라 달라지는 경우가 많습니다. 모델은 원본 텍스트의 어조와 의도를 보존하면서 정보 보존과 간결성의 균형을 맞추는 동시에 오류를 일으키지 않고 사실의 정확성을 보장해야 합니다. 다양한 유형의 원본 자료 및 요약 목적에 적응해야 하는 어려움 또한 존재합니다. DSPy를 사용하면 레이블이 지정된 데이터를 사용해 프롬프트를 조정하여 최상의 답변을 얻을 수 있습니다.

DSPy의 개념

DSPy에는 고유한 어휘와 용어가 있으므로 이러한 주요 용어 중 일부를 배우면 일반적인 아키텍처를 밝히는 데 도움이 됩니다.

컴파일: 이 프로세스는 DSPy가 Python 기반 프로그램을 언어 모델이 이해하고 효율적으로 실행할 수 있는 명령으로 변환하는 방법입니다. 

서명: 모듈의 입력 및 아웃풋 유형을 정의하여 DSPy 프로그램의 서로 다른 모듈 간의 호환성을 보장하는 클래스입니다. 서명의 예로는 질문을 입력하고 추론과 답변을 출력하거나 문서를 입력으로 가져와 요약을 출력하는 등의 작업이 있습니다.

옵티마이저: DSPy의 이 구성 요소는 사용 중인 특정 언어 모델(예: GPT3.5-Turbo, GPT-4.0 또는 Llama 3.1)에 맞게 컴파일된 프로그램을 미세 조정합니다. 옵티마이저는 프로그램의 성능과 정확성을 극대화합니다. 이전 버전의 DSPy에서는 이를 텔레프롬프터라고 했습니다. DSPy 프로그램은 DSPy 모듈로 스택된 언어 모델에 대한 여러 호출로 구성됩니다. 각 DSPy 모듈에는 LM 가중치, 따라야 하는 지침, 저장된 입력/출력 동작 데모의 세 가지 내부 매개변수가 있습니다.

지표가 주어지면 DSPy는 다단계 최적화 알고리즘과 함께 모든 가중치, 지침 및 모델 동작을 사용하여 최적화된 프롬프트를 생성합니다. 이는 경사 하강법(언어 모델 가중치의 경우)과 이산 언어 모델 기반 최적화, 즉 지침을 작성 또는 업데이트하고 데모를 생성하거나 유효성을 검사하기 위한 최적화를 결합할 수 있습니다. DSPy 데모는 퓨샷 예시와 유사하지만 훨씬 더 강력합니다. 프로그램과 프로그램의 생성 및 선택이 여러 가지 효과적인 방법으로 최적화될 수 있다는 전제 하에 처음부터 만들 수 있습니다.

옵티마이저는 사람이 할 수 있는 것보다 훨씬 더 체계적으로 더 많은 것을 시도하고 지표를 직접 조정할 수 있기 때문에 컴파일하면 사람이 작성하는 것보다 더 나은 프롬프트를 만들 수 있습니다.

파이프라인: '파이프라인'은 DSPy가 복잡한 작업을 수행하기 위해 함께 작동하는 일련의 연결된 모듈을 지칭하는 명칭입니다. 예를 들어, 파이프라인은 기사를 요약하고 출발어에서 대상 언어로 번역한 다음 도착어로 이에 대한 질문을 생성할 수 있습니다.

지표: DSPy는 아웃풋의 성능을 측정하기 위해 여러 가지 지표를 정의합니다. 예를 들어 레이블과 정확히 일치하는 아웃풋이 필요할 수 있습니다. 다른 경우에는 부분 일치가 요구 사항에 적합할 수 있습니다. DSPy에서 제공하는 일반적으로 사용되는 지표는 Semantic F1입니다. 이 지표는 라벨에 있는 정보의 양이 답변에 포함되어 있는지, 라벨이 지정된 대상 응답에 없는 관련 없는 데이터가 답변에 얼마나 적은지 측정합니다. 다른 성능 측정 방법이 필요한 경우 자체 맞춤 설정 지표를 제공할 수도 있습니다.

DSPy 사용하기

DSPy를 시작하는 것은 pip install dspy-ai를 호출하는 것만큼 간단합니다. 대부분의 모델은 API를 통해 클라우드에서 사용하거나 로컬에서 실행할 수 있으므로 특별한 하드웨어가 필요하지 않습니다. 로컬로 실행하거나 Google Colab 또는 Watson Studio와 같은 호스팅된 노트북 환경에서 실행할 수 있습니다.

검색 증강 생성을 위한 일반적인 DSPy 파이프라인은 언어 모델과 검색 모델로 구성됩니다. 예를 들어, OpenAI GPT-3.5 Turbo를 언어 모델로, ColBERTV2 검색기를 검색 모델로 사용하려면 다음과 같이 DSPy를 구성합니다.

import dspy
turbo = dspy.OpenAI(model=’gpt-3.5-turbo’)
colbertv2_wiki17_abstracts = dspy.ColBERTv2(url=’http://20.102.90.50:2017/wiki17_abstracts’)
# set the language model and the retrieval model
dspy.settings.configure(lm=turbo, rm=colbertv2_wiki17_abstracts)

 

서명 구축하기

서명은 언어 모델 및 검색 모델에 대한 입력 및 아웃풋 필드를 구조화하는 방법을 구성할 수 있는 템플릿입니다. 예를 들어, 이 코드 조각은 언어 모델을 컨텍스트로, 검색 모델을 구조로 프롬프트하라는 구문을 나타냅니다.

class GenerateAnswer(dspy.Signature):
    “””Answer questions with short factoid answers.”””
    context = dspy.InputField(desc=”may contain relevant facts”)
    question = dspy.InputField()
    answer = dspy.OutputField(desc=”often between 1 and 5 words”)

컨텍스트 및 답변 필드에 대한 간단한 설명을 포함하여 모델이 수신하고 생성해야 하는 내용에 대한 보다 강력한 지침을 정의합니다.

컴파일

서명을 정의한 후에는 프로그램을 실행하고 작업에 적합한 옵티마이저를 사용하여 작업에 대한 최적의 프롬프트를 만들 수 있습니다. DSPy에서는 이 프로세스를 컴파일이라고 합니다. 프로그램을 컴파일하면 각 모듈에 저장된 매개변수가 업데이트됩니다. 대부분의 시나리오에서 이는 주로 프롬프트 내에 포함할 좋은 데모를 수집하고 선택하는 형태입니다.

컴파일에는 다음이 필요합니다.

• 훈련 세트 또는 부트스트랩된 예시.

• 검증을 위한 지표. RAG 시나리오에서 이는 예측된 답변이 얼마나 정확한지, 검색된 컨텍스트에 답변이 포함되어 있는지 측정하는 방법입니다.

• 테스트할 프롬프트를 생성하는 특정 옵티마이저. 예를 들어, BootstrapFewShot 옵티마이저는 프롬프트를 생성한 다음 생성된 프롬프트를 테스트하는 데 사용할 수 있습니다.

DSPy 프로그램을 컴파일하려면 사용할 모델을 구성하고 선택한 옵티마이저의 컴파일 메서드에 전달합니다. 예를 들어, RAG 애플리케이션 프로그램에는 언어 모델과 검색 모델이 포함됩니다. 이러한 모델은 컴파일 메서드에 전달되고 옵티마이저는 검색된 데이터를 사용하여 언어 생성을 위한 컨텍스트를 설정합니다.

그런 다음 검색 및 언어 모델을 모두 평가하는 지표를 정의합니다. 그런 다음 해당 지표 정의가 BootstrapFewShot 또는 LabeledFewShot 옵티마이저에 제공되어 언어 모델에서 생성된 프롬프트를 평가할 때 사용할 수 있습니다. 마지막으로 옵티마이저는 학습 데이터 세트와 함께 정의한 forward 메서드가 포함된 맞춤 설정 모듈을 컴파일합니다.

사용할 옵티마이저를 선택하려면 일반적으로 실험이 필요하지만, 다음과 같은 가이드라인이 있습니다.

• 예시가 거의 없는 경우(약 10개) BootstrapFewShot으로 시작하여 새 훈련 데이터를 생성할 수 있습니다.

• 좀 더 많은 데이터(예: 50개 이상의 예시)가 있는 경우 BootstrapFewShotWithRandomSearch를 사용하여 훈련 데이터의 임의의 부분에 대한 새 훈련 데이터를 생성합니다.

• 매우 효율적인 프로그램이 필요한 경우 BootstrapFinetune을 사용하여 작업에 맞는 소규모 LLM을 미세 조정할 수 있습니다.

평가 및 반복

프로그램을 컴파일하고 지표를 비교한 후에는 결과에 만족할 수도 있지만, 최종 프로그램이나 선택한 지표에 따른 결과가 마음에 들지 않을 수도 있습니다. 중요한 것은 반복적인 개발입니다. DSPy는 데이터를 반복하고, 프로그램 구조, 선택한 지표 및 선택한 옵티마이저를 업데이트하여 점진적으로 이를 수행할 수 있는 도구를 제공합니다.

자세히 알아보기

DSPy는 오픈 소스이므로 코드를 검사하고 개발 진행 상황을 확인할 수 있습니다. Github의 StanfordNLP 사이트에 있는 문서에는 DSPy를 시작하는 방법에 대한 문서와 여러 단계별 튜토리얼 및 데모가 포함되어 있습니다.

관련 솔루션
IBM® watsonx.ai

AI 빌더를 위한 차세대 엔터프라이즈 스튜디오인 IBM watsonx.ai로 생성형 AI, 파운데이션 모델 및 머신 러닝 기능을 학습, 검증, 조정 및 배포하세요. 적은 데이터로 짧은 시간 내에 AI 애플리케이션을 구축하세요.

watsonx.ai 살펴보기
인공 지능 솔루션

업계 최고의 AI 전문성과 솔루션 포트폴리오를 보유한 IBM과 함께 AI를 비즈니스에 활용하세요.

AI 솔루션 살펴보기
인공 지능(AI) 컨설팅 및 서비스

IBM Consulting AI 서비스는 기업이 AI 활용 방식을 재구상하여 혁신을 달성하도록 지원합니다.

AI 서비스 살펴보기
다음 단계 안내

IBM Concert는 AI를 사용하여 운영에 관한 중요한 인사이트를 발견하고 개선을 위한 애플리케이션별 권장 사항을 제공합니다. Concert를 통해 비즈니스를 발전시키는 방법을 알아보세요.

Concert 살펴보기 비즈니스 프로세스 자동화 솔루션 살펴보기