Post

ReAct — 생각과 행동을 번갈아 하는 에이전트의 시작

ReAct 논문(Reasoning + Acting)이 푼 문제와 해결 방식을 정리합니다. 생각만 하는 Chain-of-Thought와 행동만 하는 방식의 한계, 그리고 Thought·Action·Observation을 번갈아 반복하는 ReAct의 구조를 Why→How 관점으로 풀어봅니다.

ReAct — 생각과 행동을 번갈아 하는 에이전트의 시작

지난 글까지는 에이전트가 도구를 고르고, 그 선택을 평가하는 자리를 봤습니다. 그런데 그 선택은 한 번에 끝나지 않습니다. 생각하고, 도구를 쓰고, 결과를 보고, 다시 생각하는 루프 위에서 이뤄집니다. 요즘 에이전트 프레임워크가 기본값으로 도는 그 루프의 출발점이 ReAct: Synergizing Reasoning and Acting in Language Models입니다.

이름 그대로 Reasoning(생각)과 Acting(행동)을 결합한다는 것이 전부인데, 왜 이 단순한 결합이 중요한지부터 봐야 합니다.

Why — 생각만 하거나, 행동만 하거나

ReAct 이전에 LLM으로 문제를 푸는 방식은 크게 두 갈래였고, 둘 다 각자의 벽이 있었습니다.

생각만 하는 방식 (Chain-of-Thought). 모델이 “먼저 이걸 계산하고, 다음으로 저걸 따져보면…” 하는 식으로 추론 과정을 단계별로 풀어냅니다. 복잡한 추론에는 강력하지만, 모델이 자기 내부 지식만으로 사고한다는 약점이 있습니다. 외부에서 사실을 확인할 방법이 없으니, 그럴듯하지만 틀린 사실을 지어내는 환각(hallucination)이 생기고, 한번 잘못된 사실 위에 추론을 쌓으면 오류가 계속 전파됩니다.

행동만 하는 방식 (Act-only). 반대로 모델이 검색·API·환경 조작 같은 외부 행동을 이어가는 방식도 있습니다. 현실과 연결되는 건 좋지만, 왜 이 행동을 하는지, 지금까지의 결과가 무엇을 의미하는지를 따로 적어두지 않습니다. 계획과 예외 처리를 사고의 형태로 남기지 않으니, 여러 단계가 필요한 문제에서는 길을 잃기 쉽습니다.

정리하면 이렇습니다. 생각만 하면 현실과 단절돼 환각에 빠지고, 행동만 하면 판단이 없어 길을 잃습니다. 두 방식은 서로의 약점을 정확히 메워줄 수 있는데도, 그동안 따로 연구돼 왔습니다. ReAct의 문제의식이 바로 여기입니다.

How — Thought → Action → Observation의 반복

ReAct의 해결책은 놀랄 만큼 단순합니다. 생각과 행동을 번갈아 반복하게 하는 것입니다. 한 사이클은 세 조각입니다.

  • Thought (생각): 지금 상황을 판단하고, 다음에 무엇을 할지 계획합니다.
  • Action (행동): 그 생각에 따라 실제 행동을 합니다. 검색 API를 호출하거나, 환경에 명령을 내립니다.
  • Observation (관찰): 행동의 결과를 받아옵니다. 검색 결과, API 응답, 환경의 변화 같은 현실의 피드백입니다.

그리고 이 Observation이 다시 다음 Thought의 재료가 됩니다. 이 루프가 핵심입니다.

예를 들어 “오늘 우산을 챙겨야 할까?”라면 대략 이렇게 돕니다.

1
2
3
4
5
Thought: 우산 여부는 오늘 날씨에 달려 있다. 먼저 날씨를 확인하자.
Action: search["Seoul weather today"]
Observation: 오후부터 비, 강수확률 70%.
Thought: 비가 온다면 우산이 필요하다. 답을 내자.
Action: finish["우산을 챙기는 편이 좋다"]

지난 글의 언어로 옮기면, Action이 도구 호출이고 Observation이 도구 결과입니다. Thought는 그 사이에서 다음에 무엇을 할지 고르는 비결정적 판단입니다.

생각이 행동을 이끕니다. 무작정 도구를 부르는 게 아니라, “이걸 알아내려면 이걸 검색해야겠다”는 판단이 행동을 낳습니다. 논문의 표현을 빌리면, 추론 과정이 행동 계획을 유도하고 추적하고 갱신하며, 예외 상황도 처리합니다.

행동의 결과가 생각을 교정합니다. 관찰된 현실이 다음 생각의 근거가 되므로, 모델은 자기 머릿속 추측이 아니라 실제 정보 위에서 사고합니다. 검색해보니 예상과 다르면, 그 사실을 반영해 계획을 바꿉니다. 사고가 현실에 계속 발을 붙이니, 환각이 줄어듭니다.

두 방식의 약점이 서로를 메웁니다. 생각은 행동에 방향을 주고, 행동은 생각에 현실을 줍니다. 이 상호 보완이 ReAct라는 이름(Reason + Act) 그대로의 핵심입니다.

실험 결과도 이 구조와 맞닿아 있습니다. 지식 과제(HotpotQA, FEVER)에서는 Wikipedia API와 상호작용하며 CoT의 환각·오류 전파를 줄였고, 가장 좋은 결과는 내부 지식(CoT)과 외부 정보(ReAct)를 함께 쓰는 조합이었습니다. 상호작용이 필요한 의사결정 과제에서는 더 선명합니다. ALFWorld에서는 모방학습 대비 절대 성공률 34%p, WebShop에서는 모방학습·강화학습 대비 10%p를 앞섰고, 여기서는 예시가 한두 개(1–2-shot)뿐이었습니다.

무엇보다 사람이 궤적을 읽으면 어느 판단이 모델의 내부 지식이고, 어느 판단이 외부 관찰인지가 드러납니다. 논문이 해석 가능성과 신뢰성을 강조한 이유입니다.

왜 하필 거대 LLM 시대에 나왔는가

여기서 제가 특히 흥미로웠던 지점을 짚고 싶습니다. 생각을 행동에 추가하면, 모델이 할 수 있는 행동의 범위가 폭발적으로 넓어집니다.

원래 “행동”이란 정해진 도구 몇 개를 부르는 것이었습니다. 검색하기, 클릭하기처럼요. 그런데 여기에 “생각”을 끼워 넣으면, 생각의 내용은 무엇이든 될 수 있는 언어입니다. “이 문제는 두 부분으로 나눠야겠다”, “아까 결과가 이상하니 다시 확인하자” 같은 사고는 정해진 선택지가 아니라 무한한 언어 공간에 존재합니다.

문제는, 이 무한한 공간에서 적절한 생각을 뽑아내는 능력을 맨땅에서 학습시키기는 매우 어렵다는 것입니다. 가능한 표현이 무한하니까요. ReAct의 영리한 점이 여기에 있습니다. 핵심 결과는 모델을 새로 훈련시켜 얻은 것이 아닙니다. 이미 언어를 다루는 강력한 LLM(논문에서는 PaLM-540B) 위에, 생각과 행동을 교차하라는 프롬프트를 얹습니다. 무한한 언어 공간을 다루는 능력은 이미 모델 안에 들어 있으니, ReAct는 그걸 프롬프팅으로 끌어내기만 하면 됩니다.

이것이 ReAct가 왜 거대 LLM 시대에 등장했는지를 설명합니다. 충분히 강력한 언어 모델이 없었다면, “무엇이든 생각할 수 있는” 이 방식은 성립하기 어려웠습니다. 논문의 본결과는 학습이 아니라 few-shot 프롬프팅이고, 그 전제는 이미 언어를 잘하는 모델의 존재입니다.

무한 루프가 아니다 — 중단 조건이라는 설계

마지막으로 짚을 지점이 있습니다. Thought → Action → Observation이 반복된다고 하면 “그럼 무한히 도는 것 아닌가?” 싶지만, 그렇지 않습니다. 논문의 지식 과제에서는 finish[답]처럼 답을 제출하는 행동이 종료 조건이 됩니다. 의사결정 과제에서는 목표를 달성하거나, 허용된 스텝 수에 닿으면 멈춥니다.

그리고 이 중단 조건을 어떻게 설계하느냐가 실제로 에이전트를 안전하게 굴리는 핵심입니다. 언제 멈출지, 무엇을 답으로 인정할지, 몇 번까지 시도할지를 정하는 것 — 이것이 곧 앞서 정리한 하네스(harness)의 역할입니다. ReAct는 생각과 행동의 루프라는 뼈대를 제시했고, 그 루프에 적절한 경계를 세우는 일은 이 방식을 실제로 쓰는 사람의 몫으로 남습니다.

정리

ReAct를 한 줄로 요약하면 이렇습니다.

  • 문제: 생각만 하면 현실과 단절돼 환각에 빠지고, 행동만 하면 판단이 없어 길을 잃는다.
  • 해결: Thought → Action → Observation을 번갈아 반복해, 생각이 행동을 이끌고 행동의 결과가 생각을 교정하게 한다.
  • 전제: 무한한 언어 공간을 다루는 이 방식은 새 학습이 아니라, 이미 강력한 LLM에 얹힌 프롬프팅으로 작동한다.

시리즈의 언어로 다시 쓰면, ReAct는 사거리 위에서 에이전트가 실제로 도는 리듬입니다. Thought가 도구를 고르고, Action이 도구를 실행하고, Observation이 결과를 돌려줍니다. 지금 흔히 보는 “도구를 쓰고, 결과를 보고, 다음을 판단하는” 흐름의 출발점이 바로 여기입니다.

This post is licensed under CC BY 4.0 by the author.