DSPy : LLM 기반 애플리케이션을 위한 오픈소스 프레임워크
컨텐츠 정보
- 조회 739
본문
생성형 AI와 생성형 AI 모델을 애플리케이션에 통합하기 위한 툴 모두 지난해에 폭발적으로 성장했다. 개발자는 대규모 언어 모델(LLM)을 활용해서 더 스마트한 애플리케이션을 구축하고 싶어하지만 효과적으로 이를 수행하기는 여전히 어려운 일이다. 이 작업을 간소화하기 위한 여러 새로운 오픈소스 프로젝트가 등장하고 있다.
DSPy도 그 중 하나로, LLM 앱 개발의 모듈화와 안정성을 강화하고 데이터 중심 작업으로 이끄는 최신 트렌드를 반영한 새로운 프레임워크다. 이 기사에서는 DSPy에 대한 개요와 함께 DSPy가 무엇인지, 어떤 문제를 해결하는지, 어떻게 작동하는지, 주요 사용례는 무엇인지, 그리고 어떤 방향을 향해 나아가고 있는지 살펴본다.
프로젝트 개요 – DSPy
DSPy(Declarative Self-improving Python)는 스탠포드 대학 연구원들이 만든 오픈소스 파이썬 프레임워크이며 “프롬프트가 아닌 언어 모델을 프로그래밍하기 위한 툴킷”으로 설명된다. DSPy는 개발자가 불안정한 프롬프트를 하드 코딩하는 대신 구성적 파이썬 코드를 작성해서 AI 시스템을 구축할 수 있게 해준다. 2023년 말 LLM 파이프라인 자율 개선에 대한 연구 논문과 함께 오픈소스로 공개됐으며, AI 커뮤니티에서 빠르게 인기를 모으고 있다.
기사를 작성하는 현재 스탠포드NLP 조직에서 호스팅하는 DSPy 깃허브 리포지토리의 누적 별 개수는 약 2만 3,000개, 기여자는 약 300명이다. 이는 개발자들의 관심을 나타내는 강력한 지표다. 프로젝트가 활발하게 개발되면서 릴리스가 자주 이뤄지고(버전 2.6.14는 2025년 3월에 출시) 생태계도 확장되는 중이다. 주목할 만한 부분은 깃허브에서 500개 이상의 프로젝트가 이미 DSPy를 종속성 요소로 사용한다는 점이다. 실제 LLM 애플리케이션에서 조기에 도입되고 있다는 의미다. 요약하면, DSPy는 연구 프로토타입에서 LLM 기반 소프트웨어를 위한 가장 주목받는 오픈소스 프레임워크 중 하나로 빠르게 발전했다.
DSPy는 어떤 문제를 해결하는가?
오늘날 LLM을 사용해 애플리케이션을 구축하기 위해서는 많은 프롬프트 엔지니어링과 즉흥적인 조율이 필요하다. 랭체인(LangChain), 라마인덱스(LlamaIndex)와 같은 프레임워크를 사용하는 개발자는 프롬프트 템플릿을 수동으로 만들고 모델 호출을 연결해야 하는데, 여기서 다음과 같은 여러 문제점이 발생한다.
- 불안정한 프롬프트와 워크플로우. 프롬프트 작성에는 많은 시간이 걸리고 오류도 발생하기 쉽다. 또한 모델이나 입력을 변경하면 프롬프트 작동이 중단되는 경우가 많다. 단어에 약간의 차이만 있어도 일관적이지 않은 결과물이 나올 수 있어 유지관리가 매우 어렵다.
- 재사용성 부족. 일반적으로 프롬프트 로직은 일반화하기 어려운 코드나 구성에 내장된다. 여러 프로젝트에 걸쳐 추론 단계, 검색 또는 기타 구성요소를 재사용하기 위한 표준화된 방법이 없다.
- 확장 및 최적화의 어려움. LLM 앱의 성능을 개선하기 위해서는 프롬프트 작성과 예제 제공, 하이퍼파라미터 구성에서 무수한 시행착오가 필요할 수 있다. 기존 툴은 이 과정을 자동화하는 기능이 거의 없으므로 개발자는 직관과 끝없는 조정에 의존해야 한다.
DSPy는 위와 같은 문제점을 해결하기 위해 프롬프트 해킹에서 고수준 프로그래밍으로 패러다임을 전환한다. 개발자는 일회성 프롬프트를 작성하는 것이 아니라 코드에서 AI의 동작을 정의하고(모델 입력, 출력, 제약 조건 지정), 나머지 작업은 DSPy가 처리하도록 한다. DSPy는 알고리즘을 사용해서 프롬프트와 매개변수를 자동으로 최적화하고 피드백과 원하는 지표를 기반으로 세밀하게 조정한다. 코드, 데이터 또는 평가 기준을 업데이트할 때마다 DSPy 프로그램을 다시 컴파일하면 변경 사항에 맞춰 프롬프트가 다시 조정된다. 즉, 이 프레임워크는 수동 프롬프트 조정을 더 스마트하고 반복적인 컴파일 프로세스로 대체한다.
DSPy는 불안정한 프롬프트를 선언적 모듈로 대체함으로써 LLM 파이프라인을 변경에 더 강하게 만든다. 즉, 모델이나 작업을 업데이트하기 위해 프롬프트 체인을 처음부터 다시 빌드해야 하는 “불안정한 파이프라인” 문제가 완화된다. LLM을 툴과 데이터에 연결하는 데 탁월하지만 프롬프트 작성을 개발자에게 맡기는 랭체인 또는 라마인덱스와 비교하면 DSPy는 더 높은 수준의 추상화를 제공한다.
이 가치는 여러 단계나 모델을 통합할 때 명확하게 드러난다. DSPy는 사람이 폭넓게 개입해서 조정하지 않아도 알아서 각 부분을 조율하고 상호 작용을 최적화할 수 있다. 요약하면 DSPy는 현재 LLM 앱 개발의 힘들고 확장되지 않는 측면을 더 체계적이고 유지관리가 용이한 AI 애플리케이션 구축 접근 방식으로 대체할 것을 약속한다.
DSPy 자세히 살펴보기
DSPy는 프롬프팅에서 프로그래밍으로의 전환을 어떻게 달성할까? 소프트웨어 엔지니어링 원칙과 머신 러닝 파이프라인에서 영향을 받은 다음과 같은 아키텍처를 사용한다.
- 모듈과 시그니처. DSPy의 핵심은 모듈, 즉 LLM을 호출하기 위한 특정 전략을 캡슐화한 재사용 가능한 구성요소다. 모듈은 모듈의 입력과 출력 인터페이스(시그니처라고 함)를 지정하는 방법으로 정의한다. 예를 들어 질문에 답변하는 모듈을 question -> answer: text로 선언하거나, 수학 문제 해결 모듈을 question -> answer: float로 선언할 수 있다. DSPy는 이러한 시그니처를 적절한 프롬프트로 확장하고 예상되는 출력 유형에 따라 모델의 응답을 파싱한다. 이 설계는 원시 프롬프트 문자열에서 애플리케이션 로직을 분리해낸다. 여러 모듈을 조합해 파이프라인으로 구성할 수 있으며, 각 모듈은 독립적으로 업데이트 또는 최적화가 가능하다.
- 옵티마이저(자율 개선 파이프라인). DSPy의 차별화 요소는 옵티마이저 서브시스템이다. 옵티마이저는 DSPy가 프롬프트를 반복적으로 개선하거나 내부적으로 작은 모델을 미세 조정하는 데 사용하는 알고리즘이다. DSPy는 제공된 예제 데이터 또는 경험적 피드백을 사용해서 프롬프트의 여러 변형을 생성하고 테스트를 거쳐 정의된 성공 척도에서 가장 우수한 프롬프트를 유지한다. 돋보이는 DSPy 기능 중 하나는 피드백 루프를 사용해서 지속적으로 프롬프트를 개선하면서 각 반복마다 더 나은 모델 응답을 얻는 기능이다. 실무적인 관점에서 보면 개발자가 프롬프트 문구를 끊임없이 수동으로 조정할 필요 없이 더 높은 정확성과 일관성을 얻는다는 것을 의미한다.
- 기본 제공 전략. DSPy는 고급 LLM 사용에서 일반적으로 나타나는 패턴에 대한 사전 구축된 모듈 라이브러리를 기본 제공한다. 여기에는 Chain of Thought(모델의 단계별 추론 유도), ReAct(에이전트 루프의 툴을 사용해 추론 및 동작), 그리고 퓨샷(few-shot) 예제, 툴 사용, 히스토리/컨텍스트 관리를 위한 기타 프리미티브가 포함된다. 또한 이 프레임워크는 툴 및 예제 추상화를 통해 외부 툴과도 통합된다. 예를 들어 파이프라인의 일부로 웹 검색이나 데이터베이스 조회를 통합하거나 스키마를 사용해 출력 유효성 검사를 강제할 수 있다.
- 모델 및 라이브러리 지원. DSPy는 LLM을 가리지 않고 다양한 모델 공급자와 함께 동작하도록 설계됐다. 오픈AI GPT, 앤트로픽 클로드(Anthropic Claude), 데이터브릭스 돌리(Databricks Dolly) 등의 주류 클라우드 API는 물론 사용자 하드웨어에서 실행되는 로컬 모델도 지원한다. DSPy는 통합 언어 모델 인터페이스를 사용하며, 허깅 페이스(Hugging Face) 또는 오픈AI SDK와 같은 라이브러리를 활용할 수 있으므로 개발자가 적절한 모델을 연결할 수 있다.
DSPy의 주요 사용례
개발자는 어떤 방법으로 DSPy를 사용할 수 있을까? DSPy는 유연한 아키텍처 덕분에 광범위한 LLM 기반 시나리오에 적용이 가능하다. 이 프레임워크가 특히 빛을 발하는 주요 사용 사례는 다음과 같다.
검색 증강 생성(RAG)을 사용한 복잡한 질문 답변
DSPy를 사용하면 답변을 생성하기 전에 관련 정보를 검색하는 강력한 QA 시스템을 만들 수 있다.
import dspy# Configure the language modeldspy.configure(lm=dspy.LM('openai/gpt-4o-mini'))# Define a retrieval function (e.g., search Wikipedia)def search_wikipedia(query: str) -> list[str]: results = dspy.ColBERTv2(url='http://20.102.90.50:2017/wiki17_abstracts')(query, k=3) return [x['text'] for x in results]# Define the RAG moduleclass RAG(dspy.Module): def __init__(self): super().__init__() self.retrieve = dspy.Retrieve(k=3) self.generate = dspy.ChainOfThought("question, context -> answer") def forward(self, question): context = self.retrieve(question) return self.generate(question=question, context=context)# Instantiate the RAG modulerag = RAG()# Example usagequestion = "What is the capital of France?"answer = rag(question)print(answer)텍스트 요약
DSPy는 다양한 입력 길이와 스타일에 적응하는 모듈을 정의함으로써 동적 텍스트 요약을 용이하게 해준다.
import dspy# Configure the language modeldspy.configure(lm=dspy.LM('openai/gpt-4o-mini'))# Define the summarization moduleclass Summarizer(dspy.Module): def __init__(self): super().__init__() self.summarize = dspy.ChainOfThought("document -> summary") def forward(self, document): return self.summarize(document=document)# Instantiate the summarizersummarizer = Summarizer()# Example usagedocument = "DSPy is a framework for programming language models..."summary = summarizer(document)print(summary)툴 통합이 가능한 LLM 에이전트
DSPy는 외부 툴과 함께 추론하고 상호작용해서 작업을 수행할 수 있는 AI 에이전트 구축을 지원한다.
import dspy# Configure the language modeldspy.configure(lm=dspy.LM('openai/gpt-4o-mini'))# Define a custom tool (e.g., a calculator)def calculator(expression: str) -> float: return eval(expression)# Define the agent moduleclass Agent(dspy.Module): def __init__(self): super().__init__() self.react = dspy.ReAct("question -> answer", tools=[calculator]) def forward(self, question): return self.react(question=question)# Instantiate the agentagent = Agent()# Example usagequestion = "What is 2 plus 2?"answer = agent(question)print(answer)결론
DSPy는 LLM을 위한 개발 프레임워크가 할 수 있는 일의 한계를 넓히는 야심찬 프레임워크다. LLM 애플리케이션을 더 선언적으로 만들고 모듈화하고 자율 개선이 가능하도록 해서 실질적인 문제점을 해결한다. DSPy는 프롬프트 문자열에서 애플리케이션 로직을 분리함으로써 개발자가 모듈을 파이프라인으로 결합하고, 모듈을 독립적으로 업데이트 또는 최적화하고, 피드백 루프를 사용해 지속적으로 모듈을 최적화할 수 있게 해준다. 아직 초기 단계지만 복잡한 LLM 기반 애플리케이션을 구축하기 위한 최우선 솔루션이 될 수 있는 강력한 잠재력을 지녔다.
dl-itworldkorea@foundryco.com
관련자료
-
링크
-
이전
-
다음





