DSPy
핵심 포인트
- 1DSPy는 프롬프트 엔지니어링 대신 코드로 모듈형 AI 소프트웨어를 구축하여 AI 프로그램을 효과적인 프롬프트 및 LM 가중치로 컴파일하는 선언적 프레임워크입니다.
- 2이 프레임워크는 `Signature`를 통해 LM의 입출력 동작을 정의하고 `dspy.Predict` 및 `dspy.ChainOfThought`와 같은 모듈을 사용하여 다양한 AI 작업을 간결하게 표현합니다.
- 3또한, `MIPROv2`나 `BootstrapFinetune`과 같은 옵티마이저를 활용하여 주어진 데이터와 메트릭에 따라 프로그램의 프롬프트와 LM 가중치를 자동으로 튜닝하여 AI 시스템의 성능과 신뢰성을 체계적으로 최적화합니다.
DSPy는 모듈화된 AI 소프트웨어를 구축하기 위한 선언적(declarative) 프레임워크입니다. 이는 기존의 취약한 문자열 기반의 프롬프트 엔지니어링 대신, 구조화된 코드 기반의 빠른 반복 개발을 가능하게 합니다. DSPy는 AI 프로그램을 언어 모델(LM)을 위한 효과적인 프롬프트와 가중치로 컴파일하는 알고리즘을 제공하며, 이를 통해 분류기, RAG 파이프라인, 에이전트 루프 등 다양한 AI 시스템을 구축할 수 있습니다.
핵심 방법론 및 세부 사항:
- Programming (Modules):
interface (LM이 무엇을 해야 하는가)와 implementation (어떻게 LM에게 지시할 것인가)을 분리합니다. 이를 통해 신뢰할 수 있고 유지보수 및 이식성이 뛰어난 AI 소프트웨어를 구축합니다.- Signatures: AI 시스템의 각 구성 요소에 대해 입력/출력 동작을 정의하는 방식입니다. 예를 들어, 와 같이
question을 입력받아float타입의answer를 출력하도록 명시합니다. DSPy는 이signature를 내부적으로 프롬프트로 확장하고, 타입이 지정된 출력을 파싱합니다. - Modules:
dspy.Predict,dspy.ChainOfThought,dspy.ReAct등 다양한 내장module이 제공됩니다. 이module들은signature를 기반으로 LM을 호출하는 전략을 할당합니다. 사용자는 여러module을 조합하여 복잡한 파이프라인(예:DraftArticlemodule)을 구축할 수 있으며, 이 과정에서dspy.Module을 상속받아 커스텀module을 정의할 수 있습니다. - LM Configuration:
dspy.LM을 통해OpenAI,Anthropic,Databricks,Gemini,Ollama등의 다양한 LM 공급자를 통합된 API로 구성하고 사용할 수 있습니다. 을 통해 전역적으로 설정됩니다.dspy.ColBERTv2와 같은 Retrievermodule도 함께 사용할 수 있습니다.
- Optimization (Compiling/Learning):
- Optimizers: 주어진 작업의 대표적인 입력(
trainset)과 시스템 출력 품질을 측정할 수 있는metric을 사용하여 LM 프롬프트 또는 가중치를 튜닝합니다. 최적화 과정은 몇 십 또는 몇 백 개의 예제를 필요로 합니다. - 다양한 최적화 전략:
dspy.BootstrapRS: 모든module에 대해 좋은few-shot examples를 합성합니다.dspy.GEPA,dspy.MIPROv2: 각 프롬프트에 대한 더 나은 자연어 지시를 제안하고 지능적으로 탐색합니다.dspy.BootstrapFinetune:module을 위한 데이터셋을 구축하고 이를 사용하여 시스템 내 LM 가중치를finetune합니다.
dspy.MIPROv2상세 동작:- Bootstrapping Stage: 최적화되지 않은 프로그램을 여러 입력에 대해 실행하여 각
module의 입력/출력 동작trace를 수집합니다.metric에 의해 높은 점수를 받은 궤적에 나타나는trace만 필터링하여 유지합니다. - Grounded Proposal Stage: DSPy 프로그램의 코드, 데이터, 그리고 수집된
trace를 분석하여 프로그램 내 모든 프롬프트에 대한 잠재적인instruction을 초안으로 작성합니다. - Discrete Search Stage:
training set에서mini-batch를 샘플링하고, 파이프라인 내 모든 프롬프트에 사용할instruction과trace조합을 제안합니다. 후보 프로그램을mini-batch에서 평가하고, 이 점수를 사용하여 제안의 품질을 개선하는surrogate model을 업데이트합니다.
- Bootstrapping Stage: 최적화되지 않은 프로그램을 여러 입력에 대해 실행하여 각
- Composability: DSPy
optimizer는 조합이 가능합니다. 예를 들어,dspy.MIPROv2의 출력을 다시dspy.MIPROv2또는dspy.BootstrapFinetune의 입력으로 사용하여 더 나은 결과를 얻을 수 있습니다. 이는dspy.BetterTogether의 핵심이며, 최상위candidate program을 추출하여dspy.Ensemble을 구축하는 데 활용될 수도 있습니다.
DSPy는 모듈화된 패러다임을 통해 compositional architecture, inference-time strategy, optimizer를 오픈 소스 방식으로 개선할 수 있도록 커뮤니티를 지원하며, 이를 통해 사용자는 더 큰 제어권과 빠른 반복을 통해 AI 프로그램을 지속적으로 발전시킬 수 있습니다.