에이전트 소개
에이전트는 LLM이 스스로 생각하고, 도구를 선택하며, 문제를 해결하는 시스템입니다.
에이전트란 무엇인가
일반 LLM
입력: "서울 날씨 알려줘"
출력: "저는 실시간 정보에 접근할 수 없습니다."
에이전트
입력: "서울 날씨 알려줘"
[에이전트 내부]
생각: 날씨 정보가 필요하다. 날씨 API를 사용하자.
행동: weather_api("서울")
관찰: 서울 현재 15도, 맑음
출력: "서울의 현재 날씨는 맑고, 기온은 15도입니다."
ReAct 패턴
에이전트의 핵심은 ReAct (Reasoning + Acting) 패턴입니다.
Question: 에펠탑의 높이를 피트로 알려줘
Thought: 에펠탑 높이를 미터로 검색한 후 피트로 변환해야겠다.
Action: search("에펠탑 높이")
Observation: 에펠탑의 높이는 330미터입니다.
Thought: 330미터를 피트로 변환해야 한다. 1미터 = 3.28피트
Action: calculator("330 * 3.28")
Observation: 1082.4
Thought: 계산 완료. 답변하자.
Answer: 에펠탑의 높이는 약 1,082피트입니다.
에이전트 구성 요소

| 구성 요소 | 역할 |
|---|---|
| LLM | 추론, 판단, 도구 선택 |
| 도구 | 외부 세계와 상호작용 |
| 메모리 | 상태와 대화 기록 유지 |
도구 (Tools)
에이전트가 사용할 수 있는 기능들입니다.
from langchain.tools import tool@tooldef search(query: str) -> str: """웹에서 정보를 검색합니다.""" # 실제 검색 수행 return f"'{query}' 검색 결과: ..."@tooldef calculator(expression: str) -> str: """수학 계산을 수행합니다.""" return str(eval(expression))@tooldef weather(city: str) -> str: """도시의 현재 날씨를 조회합니다.""" # 날씨 API 호출 return f"{city}: 맑음, 15도"
에이전트 유형
1. ReAct 에이전트

가장 기본적인 형태로, 생각-행동-관찰을 반복합니다.
2. 플랜-앤-실행 에이전트
먼저 전체 계획 수립
계획에 따라 순차 실행
3. 멀티 에이전트
여러 에이전트가 협업
각자 전문 분야 담당
에이전트 vs 체인
| 항목 | 체인 | 에이전트 |
|---|---|---|
| 흐름 | 고정 | 동적 |
| 도구 | 없음/고정 | 선택적 |
| 반복 | 불가 | 가능 |
| 판단 | 없음 | 있음 |
체인
# 고정된 순서chain = prompt | llm | output_parserresult = chain.invoke({"input": "질문"})
에이전트
# 동적 실행agent = create_react_agent(llm, tools, prompt)# 상황에 따라 다른 도구 선택, 반복 가능result = agent.invoke({"input": "질문"})
에이전트 활용 사례
1. 정보 수집
"애플의 최근 분기 실적과 경쟁사 비교 리포트 작성해줘"
→ 검색 → 데이터 추출 → 비교 분석 → 문서 작성
2. 작업 자동화
"받은 이메일 중 중요한 것 요약하고 답장 초안 작성해줘"
→ 이메일 조회 → 분류 → 요약 → 답장 생성
3. 코드 작업
"이 프로젝트의 테스트 커버리지 확인하고 부족한 부분 보완해줘"
→ 코드 분석 → 테스트 실행 → 커버리지 확인 → 테스트 작성
간단한 에이전트 예시
from langchain.agents import create_react_agent, AgentExecutorfrom langchain.tools import Toolfrom langchain_ollama import OllamaLLMfrom langchain import hub# LLMllm = OllamaLLM(model="llama4")# 도구def search(query): return f"'{query}'에 대한 검색 결과입니다."def calculate(expr): return str(eval(expr))tools = [ Tool(name="search", func=search, description="정보 검색"), Tool(name="calculator", func=calculate, description="수학 계산")]# 프롬프트prompt = hub.pull("hwchase17/react")# 에이전트 생성agent = create_react_agent(llm, tools, prompt)executor = AgentExecutor(agent=agent, tools=tools, verbose=True)# 실행result = executor.invoke({"input": "100의 제곱근은?"})print(result["output"])
정리
| 개념 | 설명 |
|---|---|
| 에이전트 | 자율적으로 추론하고 행동하는 AI |
| ReAct | 생각-행동-관찰 반복 패턴 |
| 도구 | 외부 세계와 상호작용하는 함수 |
| 메모리 | 상태와 대화 기록 유지 |
다음 단계
에이전트 개념을 소개했습니다. 다음 장에서는 3권 환경을 설정합니다.