앞 편의 ReAct는 도구로 답을 찾는 데 집중했다. 그런데 답을 한 번 내고 끝내는 대신, 스스로 비평하고 다시 고치면 품질이 올라간다. 이것이 Reflection(반영) 에이전트다. 실수에서 배우며 점점 나아지는 AI, 그 핵심 아이디어를 이번 편에서 다룬다.
자기개선(self-improving) 에이전트는 크게 세 종류다 — 기본 Reflection, Reflexion, LATS(Language Agent Tree Search). 이번 편은 가장 기본인 기본 Reflection을 다룬다.
1. 두 개의 역할 — 생성자와 비평자
Reflection은 하나의 LLM을 두 역할로 나눠 쓴다.
- 생성자(Generator) — 초기 답변을 만든다.
- 비평자(Reflector) — 그 답변을 평가하고 개선점을 지적한다.
예를 들어 "어떻게 하면 멋있어 보일까?"라는 질문을 보자. 생성자는 "페도라를 써라"라고 답한다. 비평자는 "페도라는 유행이 지났고 부정적 스테레오타입이 있다"라고 비평한다. 이 비평이 다시 생성자로 들어가면, 다음엔 "몸에 맞는 옷, 바른 자세, 자신감. 억지로 꾸미기보다 진정성이 낫다"로 개선된다. 이렇게 정해진 횟수만큼 생성↔비평을 반복하며 답을 다듬는다.


2. LangGraph로 구현 — LinkedIn 글 최적화 에이전트
이번엔 링크드인 글을 스스로 다듬는 에이전트를 만든다. 글을 생성하고(post generation), 그 글을 비평(AI review)해 반복적으로 고친다. 상태는 메시지의 흐름이면 충분하므로, LangGraph의 MessageGraph를 쓴다. 이건 상태가 메시지 배열(HumanMessage·AIMessage·SystemMessage)만으로 이뤄진 특수한 그래프다.

노드 — 그리고 한 가지 트릭
생성 노드는 현재 메시지들을 받아 글을 만든다. 비평 노드는 그 글을 평가한다. 여기서 핵심 트릭이 있다. 비평 결과를 HumanMessage로 감싼다. 생성자는 "사용자 입력"을 기대하므로, 비평을 사람이 보낸 수정 요청처럼 되돌려야 루프가 돈다. 만약 AIMessage로 넣으면 피드백 루프가 깨진다.

그래프 — 반복을 언제 멈출까
generate와 reflect 노드를 추가하고, reflect → generate 엣지로 비평을 생성자에게 돌려보낸다. 시작 노드는 generate. 멈추는 조건은 should_continue가 정한다 — 메시지가 6개를 넘으면 종료, 아니면 다시 비평한다. (더 정교하게는 LLM이 종료 여부를 판단하게 할 수도 있다.)


실행하면 입력 메시지가 generate로 들어가 첫 초안을 만든다. 초안과 원래 요청이 reflect로 가서 비평(개선 제안)을 만들고, 그 비평이 HumanMessage로 감싸져 다시 generate로 돌아간다. 이 과정이 상태에 계속 쌓이며 반복되고, 조건에 도달하면 마지막 다듬어진 글이 최종 결과가 된다.

다음 글에서는 여기서 한 걸음 더 나아간 Reflexion을 다룬다. 단순히 의견을 다듬는 데 그치지 않고, 외부 도구(웹 검색)로 최신 정보를 끌어오고 인용·출처까지 붙여 답을 검증 가능하게 만드는 방식이다.
'AI > Agent' 카테고리의 다른 글
| Multi-Agent System: 전문화된 팀으로 협업하기 (0) | 2026.07.01 |
|---|---|
| Reflexion: 도구와 인용으로 스스로 검증하는 에이전트 (0) | 2026.07.01 |
| ReAct: 추론과 행동을 결합한 에이전트 (0) | 2026.07.01 |
| LangGraph: State·Node·Edge로 워크플로 만들기 (0) | 2026.07.01 |
| LangChain, LangGraph (0) | 2026.07.01 |