[AI 에이전트 1편] 에이전트가 뭐야? — 생각하고 행동하는 ReAct
AI 에이전트 5부작의 1편. 지난 벡터DB·지식그래프 RAG 시리즈(검색→생성)에서 이어집니다. 그냥 LLM 답변과 에이전트의 차이, ReAct(Thought·Action·Observation 반복) 루프, 그리고 RAG의 검색이 에이전트의 도구 하나로 들어가는 구조를 다룹니다. Claude Code·Cursor 같은 익숙한 도구가 곧 에이전트라는 점, 언제 에이전트가 과한지까지 짚습니다. '1번 암컷 교배 가능?'을 Claude로 실제 실행해 에이전트가 무엇을 알아내야 하는지 스스로 생각으로 쪼개는 과정을 캡처했습니다. 게코 사육 에이전트를 직접 만들며 단계별로 쌓는 시리즈의 출발점.
RAG 다음은 뭐였더라 — 이제 '행동'할 차례
지난 벡터DB·지식그래프 RAG 5부작에서는 '검색'을 깊게 팠습니다. 질문이 들어오면 관련 문서를 찾아 LLM에 건네 답을 만들었죠.
근데 검색은 정해진 한 흐름이에요. '질문 → 검색 → 답'. 중간에 LLM이 "어, 이건 체중부터 확인해야겠는데?" 하고 스스로 다른 행동을 하진 못합니다.
이번 새 시리즈 주제가 바로 그겁니다. 에이전트(Agent) — LLM이 생각하고, 필요하면 도구를 골라 행동하고, 결과를 보고 다시 생각하는 것.
RAG의 검색도 결국 에이전트가 쓰는 여러 도구 중 하나가 됩니다. 1편은 그 출발점, '에이전트가 대체 뭐냐'를 정리합니다.
5부작에서 만들 것: 1편 에이전트 기초(ReAct) → 2편 Tool use(함수 호출) → 3편 멀티스텝 → 4편 MCP → 5편 멀티에이전트. 우리 게코 사육 에이전트를 직접 만들며 단계별로 쌓습니다. LLM은 로컬 Claude CLI로 실제 실행해 캡처합니다.
그냥 LLM 답변하고 에이전트, 뭐가 다른가요?
그냥 LLM은 질문을 받으면 아는 범위에서 한 번에 답합니다. 빠르지만 모르는 사실은 추측하거나 환각하고, 도중에 자료를 가져오지 못합니다. 에이전트는 한 번 더 생각합니다. '이걸 답하려면 무엇이 필요하지?'를 따져 필요하면 도구로 조회하고, 그 결과(관찰)를 보고 다음 행동을 정하며, 목표에 닿을 때까지 이 과정을 반복합니다.
저도 처음엔 '에이전트 = 똑똑한 챗봇' 정도로 막연하게 생각했는데, 해보니 핵심은 똑똑함이 아니라 '한 번 더 생각하고, 필요하면 행동한다'는 구조더라고요.
답을 한 방에 뱉는 대신, 중간에 멈춰서 도구를 부르는 그 한 단계가 전부예요.
ReAct가 뭐길래 다들 얘기하나요?
ReAct는 Reasoning(추론) + Acting(행동)을 합친 말입니다. 에이전트가 한 턴에 끝내지 않고 Thought(생각) → Action(행동) → Observation(관찰)을 반복하는 루프입니다. 생각으로 다음 할 일을 정하고, 행동으로 도구를 부르고, 관찰로 그 결과를 받아 다시 생각합니다. 목표를 달성하면 Action 자리에서 'Final Answer'로 빠져나옵니다.
말은 거창한데 구조는 단순해요. 생각 → 행동 → 관찰을 while 루프로 돌리는 거죠.
1편에서는 이 중 '생각(Thought)'만 먼저 봅니다. 행동(Action) 자리에 진짜 도구를 꽂는 건 2편이에요.
참고로 ReAct는 2022년 구글·프린스턴 연구진 논문(ReAct: Synergizing Reasoning and Acting)에서 정리된 개념입니다. 추론만 하던 LLM에 '행동(도구 사용)'을 엮으니 답이 더 정확해지더라, 가 요지예요. 지금 나오는 거의 모든 에이전트가 이 골격 위에 서 있습니다.
사실 이미 매일 쓰고 있다고요?
ReAct 루프는 멀리 있는 개념이 아닙니다. 코드를 대신 짜주는 Claude Code나 Cursor, Codex 같은 도구가 바로 에이전트입니다. 이들은 "파일을 읽고(행동) → 결과를 보고(관찰) → 다음 수정을 생각하고(생각) → 다시 고친다"를 반복합니다. 사람이 매 단계 시키지 않아도 스스로 도구를 골라 굴러가죠. 우리가 이미 익숙하게 쓰는 그 흐름이 에이전트입니다.
솔직히 고백하면, 지금 이 블로그 글·이미지·코드도 상당 부분 에이전트(Claude)와 같이 만듭니다. ㅋㅋ 제가 "1편 강화해줘" 하면, 에이전트가 파일을 찾아 읽고(행동), 뭘 고칠지 정하고(생각), 이미지를 다시 렌더해 확인하고(관찰), 또 고치는 루프를 돌아요.
그러니 이 시리즈는 '에이전트가 뭔지'를 에이전트로 만들면서 설명하는 셈이라, 저한텐 좀 재밌는 주제입니다.
그럼 지난 RAG는 버리는 건가요?
아닙니다. RAG의 검색은 에이전트의 도구 상자 안으로 들어갑니다. RAG는 '질문 → 검색 → 생성'으로 정해진 순서를 한 번 흐르는 구조이고, 에이전트는 검색을 포함한 여러 도구(체중조회·환경체크 등)를 LLM이 스스로 골라 필요한 만큼 반복하는 구조입니다. 즉 RAG를 떼어내는 게 아니라, 더 큰 틀 안에 한 조각으로 넣는 겁니다.
실제로 2편에서 만들 게코 에이전트의 도구 중 하나가 바로 지난 시리즈에서 만든 Neo4j 의미검색(KG-RAG)입니다. 검색이 도구가 되는 거죠.
한 번에 답이 안 되는 질문을 줘보면?
"우리 1번 암컷, 지금 교배해도 될까?" 같은 질문은 한 방에 답하기 어렵습니다. 체중·월령·건강·환경을 다 알아야 하니까요. 그래서 같은 질문을 두 방식으로 Claude에 던져봤습니다. 그냥 한 번에 답하기, 그리고 답하기 전에 무엇을 알아내야 하는지 생각(Thought)으로 쪼개기. 차이가 분명합니다.
[A]는 일반론으로 그럴듯하게 답하지만, 정작 '우리 1번'이 기준을 넘는지는 모릅니다. [B]는 답을 미루는 대신 무엇을 알아내야 하는지를 정확히 쪼개고, 마지막에 "정보가 없어 판단 불가 — 도구로 조회 필요"로 끝나죠.
이 마지막 한 줄이 핵심이에요. 에이전트가 스스로 "나 지금 도구가 필요해"라고 말하는 순간. ㅎㅎ 다음 편에서 그 Thought 자리에 진짜 도구를 꽂아주면, [B]의 결론이 '실제 조회 → 판단'으로 이어집니다.
삽질 메모: 처음 claude -p로 돌렸더니 답에 "메모리·CLAUDE.md 정보가 충돌한다"는 엉뚱한 말이 섞여 나왔습니다. 알고 보니 CLI가 실행 폴더의 프로젝트 설정·메모리를 끌어와 참고한 거였어요. '일반 지식만으로 답하는 깔끔한 데모'가 목적이라, 호출을 cwd="/tmp"(빈 폴더)에서 돌리게 바꾸니 외부 컨텍스트 없이 깨끗하게 나왔습니다. 도구를 붙이기 전부터, 에이전트가 '무엇을 보고 답하는가'를 통제하는 게 중요하더라고요.
실습 — claude -p로 Thought 단계 뽑기 (셀 1)
import subprocess
# 도구는 아직 없음. '바로 답하지 말고 생각의 단계만 적어라'
prompt = """너는 레오파드게코 사육 에이전트다. 아직 조회 도구가 없다.
바로 답하지 말고, 답하려면 무엇을 알아내야 하는지
'Thought 1:', 'Thought 2:' ... 형식으로 생각만 적어라.
마지막에 '정보가 없어 판단 불가 — 도구로 조회 필요'로 끝내라.
질문: 1번 암컷, 지금 교배해도 될까?"""
out = subprocess.run(["claude", "-p", prompt],
capture_output=True, text=True, timeout=120).stdout
print(out)
# → Thought 1/2/3 ... 결론: 도구로 조회 필요
API 키 없이 로컬 Claude CLI를 추론엔진으로 썼습니다. 2편부터는 Anthropic SDK의 정식 tool_use(함수 호출)도 함께 보여주고, 이 Thought의 Action 자리에 진짜 도구를 연결합니다.
그럼 다 에이전트로 만들면 되나요?
아닙니다. 에이전트는 만능이 아니라 과할 때가 많습니다. 일반 상식 설명, 번역·요약, 창작처럼 한 번 추론으로 충분한 일은 그냥 LLM이 더 빠르고 쌉니다. 에이전트는 최신·내 데이터 조회가 필요하거나, 여러 단계를 거쳐야 하거나, 외부 행동(파일·API·DB)이 끼는 일에서 값을 합니다. 도구 루프는 그만큼 느리고 호출 비용도 더 드니까요.
기준은 간단해요. "이 질문, 내 데이터나 여러 단계가 필요해?" 아니면 그냥 LLM, 맞으면 에이전트.
"레오파드게코 적정 온도 몇 도야?"는 그냥 LLM으로 충분하고, "우리 1번 지금 체중 몇이고 교배 돼?"는 에이전트가 필요한 거죠.
정리
1편 핵심만 정리합니다.
- 그냥 LLM은 한 번에 답하고, 에이전트는 생각→행동→관찰을 반복합니다.
- ReAct = Reasoning + Acting. Thought·Action·Observation 루프가 에이전트의 골격입니다.
- RAG의 검색은 버리는 게 아니라, 에이전트가 쓰는 여러 도구 중 하나가 됩니다.
- 한 번에 답 못 하는 질문에서 에이전트는 먼저 '무엇을 알아내야 하나'를 생각으로 쪼갭니다.
- 단, 에이전트가 늘 정답은 아닙니다. 조회·여러 단계·외부 행동이 없으면 그냥 LLM이 더 낫습니다.
- 그 생각의 Action 자리에 진짜 도구를 꽂는 게 다음 편입니다.
여기까지가 에이전트의 개념입니다. 생각은 하는데 아직 손발(도구)이 없는 상태죠.
2편에서는 Claude에게 첫 도구 — 게코 체중조회 함수를 쥐여줍니다. [B]의 'Thought 2: 현재 체중'이 실제 숫자로 채워지는 걸 직접 돌려볼게요. ㅎㅎ
