dspy.BaseLM — 언어 모델 기반 인터페이스

dspy.BaseLM — 언어 모델 기반 인터페이스 (LM 인터페이스)

dspy.BaseLM(model, model_type='chat', temperature=None, max_tokens=None, cache=True, callbacks: list[BaseCallback] | None = None, num_retries: int = 3, **kwargs)

DSPy 언어 모델의 기반 클래스예요. 실제 클라이언트인 dspy.LM이 이 인터페이스를 구현하고, 직접 커스텀 LM을 만들 때도 이 클래스의 규약을 따라요.

레거시 서브클래스는 forward(prompt=None, messages=None, **kwargs)를 구현하고, 선택적으로 같은 인자의 aforward도 구현해요. 일반 호출은 문자열 또는 사전의 목록을 돌려줍니다. 내장 LM은 명시적 dspy.lm15.Request 호출도 받아요.

파라미터

이름 타입 설명 기본값
model 모델 식별자 필수
model_type LM API 타입. "chat", "text", "responses" 'chat'
temperature 기본 샘플링 온도 None
max_tokens 기본 최대 출력 토큰 수 None
cache 기본적으로 요청이 DSPy 캐시를 쓸지 True
num_retries int 기본 프로바이더 요청 재시도 횟수 3
callbacks list[BaseCallback] | None 선택적 인스턴스 레벨 콜백 핸들러 None
**kwargs self.kwargs에 저장되는 추가 기본 요청 파라미터 {}

커스텀 LM 구현 방향

forward() / aforward()로 커스텀 LM을 구현하는 방식은 지원 중단(deprecated) 되었어요. 기존 서브클래스 인터페이스는 DSPy 3.4 전반에서 계속 지원되지만, 3.5에서 제거 예정이에요. 대신 complete(Request) -> Response를 구현한 엔진을 만들어 dspy.LM(engine=…)으로 넘기는 방식으로 바꿔요. LegacyEngineAsyncLegacyEngine은 3.4 전환용 래퍼로, 이것들도 3.5에서 제거 예정이에요.

OpenAI 스타일 messages= 사전도 지원 중단됐어요. lm15.RequestMessage 객체를 쓰세요. lm("hello")는 여전히 목록을 돌려주는 편의 호출로 남아요. 자세한 건 마이그레이션 가이드를 봐요.

영속적인 커스텀 상태는 dump_state/load_state에 두고, 런타임 클라이언트는 copy()로 공유하되 DSPy의 history·callbacks·kwargs는 격리돼요.

주요 메서드

  • __call__(prompt=None, *, messages=None, **kwargs) — 레거시 출력을 돌려주거나, 명시적 Request에는 lm15.Response 하나를 돌려줘요
  • acall(prompt=None, *, messages=None, **kwargs) (async) — call의 비동기 대응
  • aforward(prompt=None, messages=None, **kwargs) (async) — OpenAI 형태의 프로바이더 응답을 비동기로 반환
  • copy(**kwargs) — 파라미터를 갱신한 LM 사본을 반환. 기본 구현은 얕은 런타임 복사이고, 프로바이더 클라이언트·세션·로컬 모델 핸들은 참조로 보존돼요

더 알아보기 (Learn more)

  • dspy.LM — 실제로 쓰는 언어 모델 클라이언트 구성
  • 커스텀 LM 엔진 — 나만의 LM 구현·마이그레이션 가이드
  • dspy.Predict — LM 요청을 만드는 기본 모듈