Qdrant에서 Stanford DSPy 사용하기

Qdrant에서 Stanford DSPy 사용하기 (dspy)

DSPy는 언어 모델(LM)과 검색 모델(RM)로 고급 작업을 푸는 프레임워크예요. 언어 모델의 프롬프팅과 파인튜닝 기법을, 그리고 추론·자기 개선·검색·도구로 증강하는 접근을 하나로 통합해요. Qdrant는 이 흐름에서 검색 메커니즘(retriever)으로 함께 쓰일 수 있어요.

DSPy의 두 가지 성격을 보면 이래요.

  • 익숙한 파이썬 문법으로 LM에 지시할 수 있는 조립 가능하고 선언적인 모듈을 제공해요.
  • 프로그램 안의 선언적 단계를 LM이 수행하도록 가르치는 자동 컴파일러를 도입해요.

출처: Qdrant 공식 문서 — dspy

설치

Qdrant 검색 통합을 쓰려면 dspy-aiqdrant extra와 함께 설치해요.

pip install dspy-ai dspy-qdrant fastembed

사용 방법

DSPy 설정에서 Qdrant 리트리버 모델을 쓰도록 구성할 수 있어요.

import os
import dspy
from dspy_qdrant import QdrantRM
from qdrant_client import QdrantClient

lm = dspy.LM("gpt-4o-mini", max_tokens=512, api_key=os.environ.get("OPENAI_API_KEY"))
client = QdrantClient(url=os.environ.get("QDRANT_CLOUD_URL"), api_key=os.environ.get("QDRANT_API_KEY"))
collection_name = "collection_name"
rm = QdrantRM(
    qdrant_collection_name=collection_name,
    qdrant_client=client,
    vector_name="dense",             # <-- MATCHES your vector name
    document_field="passage_text",   # <-- MATCHES your payload field
    k=20)

dspy.settings.configure(lm=lm, rm=rm)

여기서 놓치기 쉬운 포인트가 있어요. vector_name="dense"는 실제 컬렉션의 벡터 이름과, document_field="passage_text"는 payload 필드 이름과 반드시 일치해야 해요. QdrantRM이 이 값으로 벡터와 본문 필드를 찾거든요.

리트리버 사용은 아주 단순해요. dspy.Retrieve(k) 모듈이 주어진 쿼리에 맞는 상위 k개 passage를 검색해요.

retrieve = dspy.Retrieve(k=3)
question = "Some question about my data"
topK_passages = retrieve(question).passages

print(f"Top {retrieve.k} passages for question: {question} \n", "\n")

for idx, passage in enumerate(topK_passages):
    print(f"{idx+1}]", passage, "\n")

Qdrant를 컨텍스트용 리트리버로 구성했다면, 이제 DSPy 모듈을 이렇게 만들 수 있어요.

class RAG(dspy.Module):
    def __init__(self, num_passages=3):
        super().__init__()

        self.retrieve = dspy.Retrieve(k=num_passages)
        ...

    def forward(self, question):
        context = self.retrieve(question).passages
        ...

이렇게 일반적인 RAG 청사진이 준비되면, Qdrant가 제공하는 컨텍스트 검색 위에 DSPy가 제공하는 다양한 상호작용(최적화, 평가 등)을 얹어 쓸 수 있어요.

다음 단계

  • DSPy 사용 문서와 예제는 DSPy 공식 문서에서 확인할 수 있어요.
  • 소스 코드는 DSPy GitHub 저장소에서 볼 수 있어요.

더 알아보기 (Learn more)