dspy.ChainOfThought

dspy.ChainOfThought

dspy.ChainOfThought(signature: str | type[Signature], rationale_field: FieldInfo | None = None, rationale_field_type: type = str, **config: dict[str, Any])

  • 기반 클래스(base): Module

추론(chain-of-thought) 후에 결과를 내는 모듈이에요. 주어진 서명에 reasoning 출력 필드를 하나 더 얹어서, 언어 모델이 답을 내기 전에 그 필드를 먼저 채우게 해요. 이런 사고 과정은 여러 단계의 논리나 설명이 필요한 작업에서 정확도를 높여줘요.

파라미터

이름 타입 설명 기본값
signature str | type[Signature] 모듈의 입력·출력을 정의하는 DSPy 서명 필수
rationale_field FieldInfo | None 추론 필드를 위한 선택적 커스텀 FieldInfo. 제공하지 않으면 ${reasoning} 설명을 가진 기본 필드가 쓰여요 None
rationale_field_type type 추론 필드의 타입 어노테이션. 기본은 str. rationale_field가 주어지면 무시돼요 str
**config dict[str, Any] 내부의 dspy.Predict 모듈로 전달되는 추가 키워드 인자 {}

예시

import dspy

cot = dspy.ChainOfThought("question -> answer")
result = cot(question="What is the capital of France?")
print(result.reasoning)
print(result.answer)

동작 방식

내부적으로 ChainOfThought는 주어진 서명 앞에 reasoning 필드를 추가(prepend)한 확장 서명을 만들고, 그걸 dspy.Predict로 감싸 실행해요. 사용자 입장에서는 그냥 서명 하나를 넘기면 되고, LM이 먼저 reasoning을 채우고 이어서 본래의 출력을 만들어요.

forward(**kwargs)는 이 내부 predict를 그대로 호출해요. 비동기 대응 aforward(**kwargs)predict.acall(**kwargs)를 호출하고요.

주요 메서드

  • __call__(*args, **kwargs) -> Prediction — 모듈 호출. 호출 스택에서 사용 추적(usage) 처리
  • acall(*args, **kwargs) -> Prediction (async) — 비동기 호출
  • batch(examples, num_threads=None, max_errors=None, ...)dspy.Example 목록을 Parallel 모듈로 병렬 처리
  • set_lm(lm) / get_lm() — 이 모듈의 모든 predictor에 언어 모델을 재귀적으로 설정/조회. 서로 다른 LM이 여러 개면 ValueError
  • inspect_history(n=1, file=None) — 이 모듈이 만든 최근 LM 호출 히스토리를 형식화해 출력
  • load(path, ...) / save(...) / deepcopy() / dump_state(json_mode=True) — 직렬화·상태 관리

더 알아보기 (Learn more)