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_name과 next_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)
- ReAct와 ReActV2 심층 — 에이전트 루프와 궤적 관리 이해하기
- dspy.ChainOfThought — 최종 출력 추출에 쓰이는 추론 모듈
- 서명(Signatures) — 에이전트가 다루는 서명
- 도구와 MCP(Tools and MCP) —
dspy.Tool활용