ReAct 패턴 — 리뷰

발행: (2026년 2월 8일 오후 10:14 GMT+9)
7 분 소요
원문: Dev.to

Source: Dev.to

Empty results — what happens next?

Klover: 에이전트가 검색 도구를 호출했지만 빈 결과를 반환받았습니다. ReAct 루프에서 다음에 무슨 일이 일어나는지 단계별로 설명해 주세요 — Thought 단계는 어떻게 보이고, 두 가지 잘못될 수 있는 경우는 무엇인가요?

Me: Thought 단계에서는 다음에 무엇을 할지 분석합니다. 한 가지 실패 사례: 같은 쿼리로 도구를 다시 호출하고 다시 빈 결과를 받아 무한 루프에 빠지는 경우입니다.

Klover: 그게 첫 번째 경우 — 무한 재시도 루프입니다. 두 번째는 무엇인가요?

Me: 두 번째는 확실히 모르겠어요.

Klover: 두 번째는 hallucination(환각) 입니다. Thought 단계에서 결과가 없음을 보고 다른 접근을 시도하기보다는 에이전트가 답을 만들어 냅니다. “충분히 알고 있다”고 추론하고 자신감 있게 하지만 근거 없는 답변을 생성합니다. 사용자는 해당 정보가 실제 도구 출력에 기반하지 않았다는 것을 알 수 없으므로 위험합니다.

What should the agent actually do?

Klover: 그렇다면 검색 결과가 없을 때 잘 설계된 ReAct 에이전트는 무엇을 해야 할까요?

Me: 다음 추론 단계에서는 무언가 잘못되었음을 인식해야 합니다 — 예를 들어 쿼리가 너무 구체적이거나 잘못된 용어를 사용했을 가능성이 있습니다 — 그리고 다른 방법을 시도합니다. 혹은 재시도가 효과가 없으면 정보를 찾을 수 없다는 사실을 사용자에게 보고해야 합니다.

Klover: 정확합니다. Thought 단계에서 명시적으로 실패를 인정하고 방향을 전환해야 합니다. 핵심 통찰은 — Thought 단계가 **adapt(조정)**와 gracefully give up(우아하게 포기) 사이를 결정하는 곳이라는 점입니다. 두 선택 모두 유효합니다. 환각은 절대 허용되지 않습니다.

The T‑A‑O loop

Klover: 빠른 확인: 루프의 올바른 순서는 무엇이며, 각 글자는 무엇을 의미하고, 에이전트가 최종 답을 제공할지 계속 진행할지를 결정하는 위치는 어디인가요?

Me: T — Think, A — Act, O — Observe. 이 순서대로. 결정은 Think 단계에서 이루어집니다.

Klover: 정확합니다. 각 Thought 단계에서 에이전트는 행동을 취할지(도구를 선택하고 실행하여 결과를 관찰) 아니면 작업을 끝내고 최종 답을 출력할지를 결정합니다. 그래서 Thought 단계가 가장 중요한 단계입니다.

Who generates the Observation?

Klover: Action과 Observation의 차이는 무엇인가요? 구체적으로 — 각각은 누가, 혹은 무엇이 생성하나요?

Me: Action은 외부 도구 호출이나 API이며, Observation은 그 도구 호출의 출력에 대해 LLM이 수행하는 것입니다.

Klover: 거의 맞지만 정확히는 다릅니다. Action — 맞아요, LLM이 도구 호출을 결정하고 도구가 외부에서 실행됩니다. 하지만 Observation은 도구/환경이 반환하는 원시 출력입니다. 이는 입력 데이터이며, LLM이 그것에 대해 생각하는 것은 다음 Thought 단계에서 일어납니다.

전체 흐름은 다음과 같습니다:

  • Thought → LLM이 이유를 생각함
  • Action → LLM이 도구를 선택하고, 환경이 이를 실행함
  • Observation → 환경이 결과를 반환함 (LLM은 단순히 받음)
  • Thought → LLM이 관찰을 분석하고 다음 행동을 결정함

Observation은 LLM이 생성하지 않는 유일한 부분이며, 실제 세계가 되돌려 주는 것입니다.

Me: 네, 이해됩니다. 관찰을 그에 대한 추론과 혼동했었어요.

Failure modes recall

Klover: 지금까지 다룬 실패 모드들을 이름과 각각에 대한 한 줄 완화 방안을 제시해 주세요.

Me:

  • Context window overflow — 요약을 통해 완화합니다.
  • Forever loop — 전체 도구 호출 횟수를 제한합니다.
  • Attention dilution — 요약을 통해 완화합니다.

Klover: 무프롬프트 기억에서 3개를 모두 맞췄네요. 거기에 앞서 언급한 hallucination도 있습니다. 그리고 요약이 컨텍스트 부피와 주의력 희석을 동시에 완화하지만, 손실 압축이므로 나중에 중요한 정보를 놓칠 수 있다는 점을 정확히 짚어냈습니다.

Review session: Feb 8, 2026. 개발 단계 유지. 4가지 실패 모드 중 3가지(환각은 프롬프트에 의해 회상) 기억함. Observation이 환경 출력이며 LLM 추론이 아니라는 점을 바로잡음. 다음 리뷰 목표는 무프롬프트로 모든 4가지 실패 모드 회상.

0 조회
Back to Blog

관련 글

더 보기 »

함수 호출 및 툴 스키마

개요 이 학습 세션은 function calling과 tool schemas—agents가 외부 도구와 상호 작용하는 방식을 탐구합니다. 대화는 앞뒤로 오가는 …