15

멈추지 않는 Agent, 멈춰야 하는 Agent

Day 3: ReAct 에이전트

학습 목표

단순 Tool 호출 Agent의 한계를 체감한다 ReAct 패턴이 왜 필요한지 이해한다

Agent가 폭주하다

어제 만든 Agent를 현장에 배포했다. 처음에는 잘 됐다.

그런데 금요일 오후, 이런 질문이 들어왔다.

현장 반장: "A라인 전체 설비 상태 확인하고, 문제 있는 거 있으면
          알람 원인 찾아서, 필요한 부품 재고도 확인해줘"

Agent의 행동:
  1. get_equipment_status("A-LINE-*") -> 호출 (라인 전체 조회)
  2. get_equipment_status("CNC-001") -> 또 호출 (왜?)
  3. get_equipment_status("CNC-002") -> 또 호출 (또?)
  4. search_manual("CNC-001") -> 호출 (CNC-001은 정상인데?)
  5. check_inventory("BRG-001") -> 호출 (이 부품 코드는 없는데?)
  6. get_alarm_history("A-LINE") -> 호출 (이미 1에서 확인했는데?)
  7. search_manual("CNC-002") -> 호출 (정상 설비를...)
  ...
  12번째 Tool 호출 후에야 응답이 나왔다.

  소요 시간: 45초
  API 비용: 12회 호출
  정확도: 50% (불필요한 호출 다수)

문제의 원인

Agent가 "생각 없이" Tool을 호출했다.

  • 정상 설비도 매뉴얼 검색
  • 이미 조회한 데이터를 다시 조회
  • 존재하지 않는 부품 코드로 재고 확인
  • 언제 멈춰야 할지 모름

Tool을 가진 것만으로는 부족하다. 언제, 왜, 어떤 순서로 쓸지 아는 것이 핵심이다.


ReAct 패턴 ▲ ReAct 패턴: Thought → Action → Observation 반복 사이클

ReAct = Reasoning + Acting

사람이 문제를 풀 때를 생각해보자.

숙련 엔지니어의 사고 과정:

1. [생각] "A라인 설비부터 전체 상태를 확인하자"
   [행동] 설비 상태 조회

2. [관찰] "CNC-003만 경고 상태. 나머지는 정상."
   [생각] "CNC-003의 알람 내용을 확인하자. 정상 설비는 건너뛰자."
   [행동] CNC-003 알람 이력 조회

3. [관찰] "W-1105: 진동 수치 상승. 베어링 관련일 수 있다."
   [생각] "매뉴얼에서 W-1105 조치 방법을 찾자."
   [행동] 매뉴얼 검색

4. [관찰] "베어링 BRG-002, BRG-003 교체 필요."
   [생각] "해당 부품 재고를 확인하자."
   [행동] 재고 확인

5. [관찰] "BRG-003이 안전재고 미달."
   [생각] "충분한 정보가 모였다. 종합 보고서를 작성하자."
   [최종 응답]

5번의 Tool 호출로 정확한 답을 얻었다. 폭주 Agent는 12번을 호출하고도 50%밖에 못 맞췄다.

이것이 ReAct (Reasoning + Acting) 패턴이다.


오늘 배울 것

  1. ReAct 패턴의 구조: Thought -> Action -> Observation
  2. ReAct Agent 구현: 생각하는 Agent 만들기
  3. LangChain으로 ReAct Agent 쉽게 만들기
  4. 제조 현장 최적화: 불필요한 호출 줄이기

Tool + 추론 = 진짜 Agent.

AI로 학습하기 — 꿀팁
🧪단순 Tool 호출 Agent 한계 제조 심화AI 학습 팁

단순 Tool 호출만 하는 Agent가 복잡한 제조 문제 앞에서 실패하는 구체적인 상황을 탐구하세요.

단순 Tool 호출 Agent(ReAct 없이 LLM이 한 번에 Tool 결정)가 제조 라인 품질 불량 원인을 찾으려 할 때 어떤 상황에서 실패하는지 시나리오로 작성해줘. Tool 결과가 애매하거나 여러 번 반복 조회가 필요한 상황에서 단순 호출 방식의 한계를 보여주고, ReAct 패턴이 동일 상황을 어떻게 처리하는지 대조해줘.
이 팁이 도움이 됐나요?