ReAct 패턴은 LLM이 추론(생각하기)과 행동(실행하기)을 결합하여 복잡한 작업을 해결하는 강력한 방식입니다. 이는 사고-행동-관찰(THOUGHT-ACTION-OBSERVATION)의 반복적인 루프를 통해 외부 자원 활용 및 복잡한 추론을 가능하게 합니다.Ruby에서 ReAct 에이전트를 구현하기 위해 Anthropic Ruby SDK, 웹 검색을 위한 Tavily, 이미지 검색을 위한 Serper.dev가 활용됩니다.
1. 환경 설정 및 도구 정의
- 설정:
anthropic,dotenv,faraday젬을 설치하고, 각 API 키를.env파일에 설정합니다. Tools클래스:web_search(Tavily),image_search(Serper.dev),save_to_file기능을 구현하여 에이전트가 외부 시스템과 상호작용하도록 합니다.
2. 함수 정의 및 에이전트 로직LLM이 도구를 올바르게 사용하도록 Anthropic의 JSON 스키마에 맞춰 각 도구의 상세 정의를 제공합니다. ReActAgent 클래스는 다음 핵심 로직을 포함합니다.
- 시스템 프롬프트: 에이전트의 목표, 결과물 형식, 사용 가능한 도구,
save_to_file호출 조건 등을 명시하여 에이전트의 행동을 안내합니다. - 대화 기록:
@messages배열로 LLM과의 대화 컨텍스트를 유지합니다. - ReAct 루프:1. LLM이 응답을 생성합니다.
2. 응답에 도구 호출(
tool_use)이 있으면, 해당 도구를 실행(ACTION)합니다. 3. 도구 실행 결과(OBSERVATION)를 대화 기록에 추가하여 LLM의 다음 추론(THOUGHT)에 활용합니다. 4. 응답이 텍스트 블록만 포함하면 작업 완료로 판단하고 루프를 종료합니다.이 과정을 통해 에이전트는 목표를 달성할 때까지 반복적으로 추론하고 행동합니다.