dspy.ProgramOfThought

dspy.ProgramOfThought

ProgramOfThought는 파이썬 프로그램을 실행해 문제를 푸는 DSPy 모듈입니다. 다만 현재는 deprecated(사용 중단) 상태이며, RLM이 권장되는 대체재입니다.

출처: 문서

본문

Deprecated: ProgramOfThought는 deprecated이며 DSPy 3.5에서 제거될 예정입니다. 대신 RLM을 사용하세요.

dspy.ProgramOfThought(
    signature: str | type[Signature],
    max_iters: int = 3,
    interpreter_factory: Callable[[], CodeInterpreter] = PythonInterpreter,
)
  • Bases: Module(callbacks=None)
  • .. deprecated:: 3.4 ProgramOfThought is deprecated. RLM is the preferred replacement.

파이썬 프로그램을 실행해 문제를 푸는 DSPy 모듈입니다. 이 모듈은 Deno가 필요하며, DSPy의 관리형 런타임은 pip install "dspy[deno]"로 설치할 수 있습니다.

Examples

import dspy

lm = dspy.LM('openai/gpt-4o-mini')
dspy.configure(lm=lm)
pot = dspy.ProgramOfThought("question -> answer")
pot(question="what is 1+1?")

Parameters:

Name Type Description Default
signature str | type[Signature] 모듈의 시그니처. required
max_iters int 코드 생성·실행을 재시도할 최대 반복 횟수. 3
interpreter_factory Callable[[], CodeInterpreter] 각 forward pass에 대해 interpreter를 만드는 zero-argument 콜러블. 이 콜러블은 동시에 호출될 수 있으며, DSPy는 반환된 각 interpreter를 종료합니다. 기본값은 dspy.PythonInterpreter. dspy.configure(interpreter_factory=...)로 이 기본값을 교체할 수 있습니다. PythonInterpreter

소스 코드는 dspy/predict/program_of_thought.py에 있습니다.

def __init__(
    self,
    signature: str | type[Signature],
    max_iters: int = 3,
    interpreter_factory: Callable[[], CodeInterpreter] = PythonInterpreter,
):
    """
    Args:
        signature: The signature of the module.
        max_iters: The maximum number of iterations to retry code generation and execution.
        interpreter_factory: Zero-argument callable that creates an interpreter for each forward pass. The
            callable may be invoked concurrently, and DSPy shuts down each interpreter it returns. Defaults to
            ``dspy.PythonInterpreter``. ``dspy.configure(interpreter_factory=...)`` replaces this default.
    """
    super().__init__()
    warnings.warn(
        "ProgramOfThought is deprecated and will be removed in 3.5. RLM is the preferred replacement.",
        DeprecationWarning,
        stacklevel=2,
    )
    _validate_interpreter_factory(interpreter_factory)
    self.signature = signature = ensure_signature(signature)
    self.max_iters = max_iters

    self.input_fields = signature.input_fields
    self.output_fields = signature.output_fields

    self.code_generate = dspy.ChainOfThought(
        dspy.Signature(
            self._generate_signature("generate").fields,
            self._generate_instruction("generate"),
        ),
    )
    self.code_regenerate = dspy.ChainOfThought(
        dspy.Signature(
            self._generate_signature("regenerate").fields,
            self._generate_instruction("regenerate"),
        ),
    )
    self.generate_output = dspy.ChainOfThought(
        dspy.Signature(
            self._generate_signature("answer").fields,
            self._generate_instruction("answer"),
        ),
    )
    self._interpreter_factory = interpreter_factory

Methods

def forward(self, interpreter: CodeInterpreter | None = None, /, **kwargs):
    """Run the program with a fresh interpreter or a caller-owned override.

    Args:
        interpreter: Optional caller-owned interpreter, passed positionally. The caller must shut it down.
        **kwargs: Input values matching the signature's input fields.

    Raises:
        CodeInterpreterError: If interpreter setup, process, or protocol fails.
    """
    if "interpreter" in kwargs and "interpreter" not in self.input_fields:
        raise TypeError(
            "To use a caller-owned interpreter, pass it as the first positional argument when calling the module."
        )
    with self._interpreter_context(interpreter) as interpreter:
        input_kwargs = {field_name: kwargs[field_name] for field_name in self.input_fields}
        code_d...

forward(interpreter=None, /, **kwargs)

forward는 새 interpreter 또는 호출자가 소유한 override로 프로그램을 실행합니다. interpreter는 위치 인자로 전달되는 호출자 소유 interpreter이며, 호출자가 종료해야 합니다. kwargs는 시그니처의 입력 필드에 맞는 입력 값들입니다. interpreter 설정·프로세스·프로토콜이 실패하면 CodeInterpreterError를 발생시킵니다.

그 외 상속받은 메서드

ProgramOfThought는 Module/BaseModule/Parameter에서 다음의 공통 메서드를 상속받습니다. 각각에 대한 자세한 설명은 Predict 페이지를 참고하세요.

  • __call__(*args, **kwargs) -> Prediction — 모듈을 호출하고 사용량을 추적합니다.
  • acall(*args, **kwargs) -> Prediction (async) — 비동기 호출.
  • batch(...) — dspy.Example 리스트를 Parallel로 병렬 처리.
  • deepcopy() — 파라미터만 깊은 복사.
  • dump_state(json_mode=True) — 상태를 내보냄.
  • get_lm() — 사용 중인 언어 모델 반환.
  • inspect_history(n=1, file=None) — LM 호출 기록 표시.
  • load(...) / load_state(...) — 저장된 상태 불러오기.
  • map_named_predictors(func) — 모든 named predictor에 함수 적용.
  • named_parameters() / named_predictors() / named_sub_modules() / parameters() / predictors() — 구조 탐색.
  • reset_copy() — 복사 후 모든 파라미터 초기화.
  • save(...) — 모듈 저장.
  • set_lm(lm) — 모든 predictor에 언어 모델 설정.

더 알아보기 (Learn more)