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이 여러 개면ValueErrorinspect_history(n=1, file=None)— 이 모듈이 만든 최근 LM 호출 히스토리를 형식화해 출력load(path, ...)/save(...)/deepcopy()/dump_state(json_mode=True)— 직렬화·상태 관리
더 알아보기 (Learn more)
- 서명(Signatures) — 모듈이 받는 서명의 형태
- dspy.Predict — ChainOfThought의 내부 엔진이 되는 기본 모듈
- dspy.ReAct — 도구를 쓰며 추론·행동하는 에이전트 모듈
- 내장 모듈 변형(Built-in module variants) — 다른 추론 전략들