Stanford NLP에서 만든 오픈소스 파이썬 프레임워크로, 프롬프트 문장을 손으로 다듬는 대신 입력과 출력만 코드로 선언하면 프롬프트와 퓨샷 예시를 자동으로 최적화해 준다. 정답 예시와 평가 기준이 있는 LLM 파이프라인을 만들 때, 그리고 모델을 바꿔도 프롬프트를 다시 다듬지 않고 최적화만 다시 돌리고 싶을 때 쓴다.
| 항목 | 직접 프롬프트 작성 | DSPy |
|---|---|---|
| 작업 방식 | 문장을 고쳐 가며 시험 | 입출력 명세 + 예시 데이터 |
| 품질 확인 | 몇 개를 눈으로 확인 | 평가 함수로 점수 측정 |
| 모델 교체 | 프롬프트 다시 다듬기 | 최적화만 다시 실행 |
| 잘 맞는 일 | 단발성·간단한 작업 | 여러 단계 파이프라인 |
DSPy 코드는 세 부품으로 이뤄진다. 시그니처는 입력과 출력의 이름을 적은 명세이고, 모듈은 그 명세를 어떤 방식으로 풀지 정한다. 옵티마이저는 예시 데이터와 평가 함수를 보고 모듈 안의 프롬프트를 개선한다.
| 부품 | 예 | 역할 |
|---|---|---|
| 시그니처 | "question -> answer" | 입력·출력 정의 |
| 모듈 | dspy.Predict, dspy.ChainOfThought | 바로 답하기 / 단계적으로 생각하기 |
| 옵티마이저 | BootstrapFewShot, MIPROv2 | 예시·지시문 자동 개선 |
먼저 pip install dspy로 설치하고 dspy.configure(lm=dspy.LM("openai/gpt-4o-mini"))처럼 쓸 모델을 지정한다. 다음으로 dspy.ChainOfThought("question -> answer")로 파이프라인을 선언하고, 답이 맞는지 판단하는 평가 함수(metric)와 입력·정답 예시 묶음을 준비한다.
마지막으로 옵티마이저의 compile에 프로그램과 예시를 넘기면 최적화된 프로그램이 나온다. 결과는 저장해 두고 불러 쓸 수 있다. GPT-4o에서 Claude로 옮길 때도 파이프라인 코드는 그대로 두고 최적화만 다시 돌리면 된다.
DSPy의 효과는 데이터와 평가 함수의 질에 달려 있다. 정답 예시를 수십 개라도 모을 수 있고 맞고 틀림을 코드로 판단할 수 있는 분류, 정보 추출, 검색 기반 질의응답(RAG) 같은 작업에 잘 맞는다.
반대로 한 번 쓰고 말 프롬프트나 정답 기준이 모호한 창작 글쓰기는 들이는 품에 비해 얻는 게 적다. 최적화할 때 모델을 여러 번 호출하므로 API 비용과 시간이 들고, 예시가 적으면 그 예시에만 맞춰질 수도 있다. 작은 모델과 적은 데이터로 효과를 먼저 확인한 뒤 넓히는 편이 안전하다.
가장 흔한 건 정답을 코드로 채점할 수 있는 작업을 여러 단계 파이프라인으로 묶고 프롬프트 손질을 옵티마이저에 맡기는 방식이다. 모델을 바꾸거나 더 싼 모델로 옮길 때도 같은 코드에 최적화만 다시 돌린다.
| 어디서 | 어떻게 쓰나 |
|---|---|
| 사내 문서 검색 질의응답(RAG) | 검색 결과와 질문을 받아 답하는 모듈을 선언하고, 정답 예시로 지시문과 예시를 최적화 |
| 문의·문서 분류 | 라벨 붙은 예시 수십 개와 정확도 평가 함수로 분류 프롬프트를 자동으로 다듬기 |
| 정보 추출 | 문서에서 뽑을 필드를 시그니처로 정의하고, 필드별 일치 여부로 채점 |
| 모델 교체 | 기존 파이프라인 코드는 두고 새 모델로 compile만 다시 실행 |