Agent 개념과 구조
LLM을 자율적인 문제 해결자로 확장하기
LLM Agent란?
자율적으로 작업을 수행하는 AI 시스템
LLM Agent는 단순히 질문에 답하는 것을 넘어, 스스로 계획을 세우고, 도구를 사용하며, 복잡한 작업을 자율적으로 수행하는 AI 시스템입니다.
LLM vs LLM Agent 비교
기존 LLM
- - 텍스트 입력 - 텍스트 출력
- - 단일 턴 대화 또는 멀티턴 채팅
- - 학습 데이터에 기반한 지식만 사용
- - 외부 시스템과 상호작용 불가
- - 수동적 응답 (질문에만 답변)
LLM Agent
- + 목표 - 계획 - 실행 - 결과
- + 자율적 다단계 작업 수행
- + 실시간 정보 검색 및 활용
- + API, DB, 파일 시스템 접근
- + 능동적 문제 해결
Agent 아키텍처
두뇌, 도구, 기억의 세 가지 핵심 컴포넌트
Agent는 크게 세 가지 핵심 컴포넌트로 구성됩니다: 두뇌(LLM), 도구(Tools), 기억(Memory).
Tools (도구)
Agent가 외부 세계와 상호작용하기 위해 사용하는 기능들입니다.
정보 검색
코드 실행
데이터 처리
외부 API
Memory (기억)
Agent가 맥락을 유지하고 과거 경험을 활용하기 위한 저장소입니다.
Short-term Memory
현재 대화의 컨텍스트, 최근 액션 기록, 작업 중인 정보. 주로 LLM의 컨텍스트 윈도우에 저장됩니다.
Long-term Memory
과거 대화 요약, 사용자 선호도, 학습된 패턴. 벡터 DB나 외부 저장소에 영구 저장됩니다.
ReAct 패턴
추론과 행동의 결합
ReAct (Reasoning + Acting)는 Agent가 작업을 수행하는 핵심 패턴입니다. LLM이 생각(Thought)을 통해 계획을 세우고, 행동(Action)을 실행한 후, 관찰(Observation) 결과를 바탕으로 다음 단계를 결정합니다.
ReAct 패턴은 "생각의 연쇄(Chain-of-Thought)"를 행동과 결합하여 더 신뢰할 수 있고 해석 가능한 결과를 만듭니다. 각 단계에서 LLM이 왜 그런 결정을 내렸는지 추적할 수 있습니다.
ReAct 실행 예시
Agent 유형
작업 방식에 따른 분류
Agent는 작업 방식에 따라 여러 유형으로 분류됩니다.
Simple (ReAct) Agent
가장 기본적인 형태로, 한 번에 하나의 도구를 사용하며 순차적으로 작업을 수행합니다.
- - 관찰 - 생각 - 행동의 단순 루프
- - 구현이 간단하고 이해하기 쉬움
- - 단순한 작업에 적합
- - 예: 날씨 확인, 단순 검색 질의
Planning Agent
작업을 시작하기 전에 전체 계획을 먼저 수립하고, 계획에 따라 순차적으로 실행합니다.
- - 먼저 하위 작업으로 분해
- - 각 단계를 순서대로 실행
- - 복잡한 다단계 작업에 적합
- - 예: 보고서 작성, 여행 계획 수립
Reflection Agent
자신의 출력을 검토하고 개선하는 자기 반성 능력을 가진 Agent입니다.
- - 생성 - 비평 - 수정의 반복
- - 품질 향상을 위한 자기 피드백
- - 창작, 코드 생성에 효과적
- - 예: 코드 리뷰, 글 퇴고
Multi-Agent System
여러 Agent가 협력하여 복잡한 작업을 분담하고 해결합니다.
- - 역할 분담 (연구자, 코더, 검토자 등)
- - Agent 간 통신 및 협업
- - 대규모 복잡한 프로젝트에 적합
- - 예: 소프트웨어 개발, 연구 프로젝트
Agent 구현 예시
의사 코드로 살펴보기
실제 Agent가 어떻게 동작하는지 간단한 의사 코드로 살펴봅니다.
class SimpleAgent: def __init__(self, llm, tools): self.llm = llm self.tools = tools self.memory = [] def run(self, task): """ReAct 루프 실행""" self.memory.append({"role": "user", "content": task}) while True: # 1. LLM에게 다음 행동 결정 요청 response = self.llm.generate( system_prompt=REACT_PROMPT, messages=self.memory, tools=self.tools ) # 2. 최종 답변이면 종료 if response.is_final_answer: return response.content # 3. 도구 호출이면 실행 if response.tool_call: tool_result = self.execute_tool( response.tool_call.name, response.tool_call.args ) # 4. 결과를 메모리에 추가 self.memory.append({ "role": "tool", "content": tool_result })
실제 Agent 구현에서는 무한 루프 방지(max iterations), 에러 처리, 도구 실행 타임아웃, 비용 제한 등 다양한 안전장치가 필요합니다.
Agent 활용 사례
다양한 분야에서의 적용
코드 어시스턴트
연구 어시스턴트
업무 자동화
고객 서비스
데이터 분석
창작 지원
핵심 요약
- LLM Agent는 LLM + Tools + Memory의 조합으로 자율적 작업 수행
- ReAct 패턴: Observe - Think - Act의 반복 루프
- Tools: 외부 세계와 상호작용 (검색, 코드 실행, API 등)
- Memory: 단기(컨텍스트) + 장기(벡터 DB) 기억
- Agent 유형: Simple, Planning, Reflection, Multi-Agent
참고 자료
- ReAct: Synergizing Reasoning and Acting in Language Models (Yao et al., 2022)
- HuggingGPT: Solving AI Tasks with ChatGPT and Friends (Shen et al., 2023)
- A Survey on Large Language Model based Autonomous Agents (Wang et al., 2023)
- LLM Powered Autonomous Agents - Lilian Weng Blog
- LangChain Agents Documentation