dspy.context

dspy.context

하나의 with 블록 안에서만 DSPy 설정을 덮어쓰는 도구예요. 프로그램 전체 기본값은 그대로 두고, 특정 구간만 다른 LM·어댑터·플래그를 쓰고 싶을 때 유용해요.

출처: 문서

본문

하나의 with 블록 안에서 DSPy 설정을 덮어써요.

with dspy.context(**kwargs):
    ...  # overrides active here
# original settings restored

dspy.configure가 정한 프로세스 전역 기본값을 바꾸지 않고 프로그램 일부에서만 다른 LM·어댑터·플래그가 필요할 때 dspy.context(...)를 쓰세요. 블록은 현재 설정을 전부 상속하고, 넘긴 키만 덮어쓴 뒤, 블록을 빠져나오면 원래 값으로 복원해요.

dspy.context(...)는 dspy.configure와 같은 설정을 받아요.

예시 (Examples)

한 블록에서 다른 LM 사용

import dspy

dspy.configure(lm=dspy.LM("openai/gpt-5-mini"))
qa = dspy.Predict("question -> answer")

result = qa(question="What is the capital of France?")
print("default:", result.answer)

with dspy.context(lm=dspy.LM("anthropic/claude-sonnet-4-6")):
    result = qa(question="What is the capital of France?")
    print("temporary:", result.answer)

print("restored:", dspy.settings.lm.model)  # openai/gpt-5-mini

한 블록에서 다른 어댑터 사용

import dspy

dspy.configure(lm=dspy.LM("gemini/gemini-3-flash-preview"))
qa = dspy.Predict("question -> answer")

with dspy.context(adapter=dspy.JSONAdapter()):
    result = qa(question="What is the capital of France?")
    print(result.answer)

비동기 도구 변환 임시 활성화

import asyncio
import dspy

async def async_tool(x: int) -> int:
    await asyncio.sleep(0.1)
    return x * 2

tool = dspy.Tool(async_tool)

with dspy.context(allow_tool_async_sync_conversion=True):
    print(tool(x=5))

중첩 블록

안쪽 블록이 바깥쪽 블록을 덮어써요. 각 블록은 빠져나올 때 깨끗이 복원돼요.

import dspy

dspy.configure(lm=dspy.LM("openai/gpt-5-mini"))

with dspy.context(lm=dspy.LM("anthropic/claude-sonnet-4-6")):
    print(dspy.settings.lm.model)        # anthropic/claude-sonnet-4-6
    with dspy.context(track_usage=True):
        print(dspy.settings.lm.model)    # anthropic/claude-sonnet-4-6 (inherited)
        print(dspy.settings.track_usage) # True
    print(dspy.settings.track_usage)     # False (restored)
print(dspy.settings.lm.model)           # openai/gpt-5-mini (restored)

스레드 안전성

dspy.configure와 달리, dspy.context(...)는 어떤 스레드나 비동기 태스크에서도 호출할 수 있어요. 그래서 dspy.Parallel, asyncio.gather, 그 외 동시성 코드 안의 덮어쓰기에 잘 맞아요.

dspy.context(...) 블록 안의 설정은 다른 스레드나 태스크로 새어 나가지 않아요.

함께 보기 (See Also)

  • dspy.configure — 프로세스 전역 기본값 설정.
  • dspy.LM — lm으로 넘길 언어 모델 생성.
  • Language Models — LM 설정 개요.
  • Adapters — 어댑터가 프롬프트를 만들고 응답을 파싱하는 방법.

더 알아보기 (Learn more)