dspy.ReAct

dspy.ReAct

dspy.ReAct(signature: type[Signature], tools: list[Callable], max_iters: int = 20)

  • 기반 클래스(base): Module

ReAct는 "Reasoning and Acting(추론하고 행동하기)" 의 줄임말로, 도구를 쓰는 에이전트를 만들 때 널리 쓰이는 패러다임이에요. 이 방식에서는 언어 모델이 도구 목록을 반복적으로 제공받고, 현재 상황에 대해 추론해야 해요. 모델은 추론 과정을 바탕으로, 더 많은 정보를 얻기 위해 도구를 호출할지 아니면 작업을 끝낼지 결정해요. DSPy의 ReAct는 서명 다형성(signature polymorphism) 덕분에 어떤 서명 위에서도 동작하도록 일반화되어 있어요.

파라미터

이름 타입 설명 기본값
signature type[Signature] ReAct 모듈의 입력·출력을 정의하는 서명 필수
tools list[Callable] 함수, 호출 가능 객체, 또는 dspy.Tool 인스턴스 목록 필수
max_iters Optional[int] 실행할 최대 반복 횟수 20

예시

def get_weather(city: str) -> str:
    return f"The weather in {city} is sunny."

react = dspy.ReAct(signature="question->answer", tools=[get_weather])
pred = react(question="What is the weather in Tokyo?")

동작 방식

내부적으로 ReAct는 주어진 서명에 몇 가지 필드를 덧붙여 확장해요. trajectory 입력 필드에 지금까지의 궤적(trajectory)을 담고, next_thought, next_tool_name, next_tool_args 출력 필드로 다음 행동을 결정해요. 기본 제공 finish 도구는 작업 완료를 알리는 역할을 해요. tools에 넘긴 함수들은 자동으로 dspy.Tool로 감싸지고, 이름 기준의 사전으로 정리돼요.

매 반복마다 모델은 next_thought로 상황을 추론하고, next_tool_namenext_tool_args(JSON 형식)로 도구를 호출해요. 호출 결과인 observation은 궤적에 누적돼요. finish 도구를 호출하면 루프가 끝나고, 마지막에는 ChainOfThought로 최종 출력 필드를 추출해 내요.

주요 메서드

  • __call__(*args, **kwargs) -> Prediction — 에이전트 루프 실행
  • acall(*args, **kwargs) -> Prediction (async) — 비동기 실행
  • aforward(**input_args) — 비동기로 도구 호출·관찰을 반복. max_iters를 호출 시점에 덮어쓸 수 있어요
  • truncate_trajectory(trajectory) — 궤적이 컨텍스트 창에 맞도록 잘라내요. 나만의 절단 로직으로 오버라이드 가능
  • set_lm(lm) / get_lm() — 모듈의 모든 predictor에 LM을 재귀적으로 설정/조회
  • inspect_history(n=1, file=None) — 최근 LM 호출 히스토리 출력
  • batch(examples, ...)dspy.Example 목록을 Parallel 모듈로 병렬 처리

더 알아보기 (Learn more)