프롬프트 엔지니어링 • 챕터 6 / 6
| 항목 | 설명 |
|---|---|
| 정의 | LLM이 외부 도구(Tool)를 활용하여 복잡한 작업을 자율적으로 수행하는 시스템 |
| 역할 | 사용자의 요청을 분석하고, 적절한 도구를 선택하여 실행하며, 결과를 종합 |
| 특징 | 단순한 질의응답을 넘어 "생각하고 행동하는" 인공지능 시스템 |
| 구성 요소 | 역할 |
|---|---|
| LLM | Agent의 두뇌 역할 |
| Tools/Functions | Agent가 사용할 수 있는 외부 도구 |
| Memory | 이전 대화나 작업 이력 저장 |
| Planning | 작업을 단계별로 계획하는 능력 |
| Execution | 계획을 실제로 실행하는 메커니즘 |
ReAct = Reasoning + Acting
| 단계 | 역할 |
|---|---|
| 생각 (Thinking) | LLM 작업 지시 |
| 행동 (Action) | Code 작성 및 검증 |
| 관찰 (Observation) | 실패 원인 분석 및 반성 |
1. Question (질문 입력)
↓
2. Thought (생각): "이 문제를 해결하려면 어떤 도구가 필요할까?"
↓
3. Action (행동): 도구 선택 및 실행
↓
4. Observation (관찰): 도구 실행 결과 확인
↓
5. Thought (생각): "결과가 충분한가? 추가 작업이 필요한가?"
↓
6. 목적 달성 시까지 2~5 반복
↓
7. Answer (최종 답변)| 특징 | 설명 |
|---|---|
| 투명성 | 각 단계에서 무엇을 생각하고 행동하는지 명확 |
| 유연성 | 상황에 따라 다른 도구를 선택 가능 |
| 반복 가능 | 실패 시 다른 접근 방법 시도 |
ReAct의 한계
작업 수행이 불안정할 수 있고, 성능이 일관되지 않을 수 있습니다.
1. 유저: "티모시 샬라메의 탄생년도를 검색해서, 각 숫자를 곱해봐"
2. LLM: <FUNCTION CALL> (검색: Timothee Chalamet birth date)
3. Tool: "Timothée Chalamet (born December 27, 1995...)"
4. LLM: <FUNCTION CALL> (곱하기: 1, 9)
5. Tool: "9"
6. LLM: <FUNCTION CALL> (곱하기: 9, 9)
7. Tool: "81"
8. LLM: <FUNCTION CALL> (곱하기: 81, 5)
9. Tool: "405"
10. LLM: "티모시 샬라메의 탄생 년도는 1995년이고, 모든 숫자를 곱하면 405입니다."| 원인 | 설명 |
|---|---|
| Tool 미사용 | 검색 결과 및 과정 미반영 |
| 중간 과정 누락 | 중간 과정(Step)이 전달 실패 |
| 단계 | 설명 |
|---|---|
| 1. LLM 작업 지시 | 작업 요청 |
| 2. Code 작성 및 검증 | 실행 및 테스트 |
| 3. 실패 원인 분석 및 반성 | 오류 파악 |
| 4. 반성 내용 반영 및 활용 | 피드백 적용 |
| 5. 반복 개선 | 개선된 결과 도출 |
| 항목 | ReAct | Reflexion |
|---|---|---|
| 방식 | 단계별 사고 | 피드백 기반 자기 반성 |
| 특징 | Agent 구성의 일반적인 프레임워크 | 실패 피드백 기반 자기 반성 메커니즘 |
우선순위 결정 메커니즘:
Prompt 판단 → Proposed Action 1, 2, 3 생성
↓
LLM Critic 검토
↓
최적 Action 선택| 특징 | 설명 |
|---|---|
| 별도 Prompt 불필요 | 연속 Tool Calling 가능 |
| Kimi K2 | Tool Calling 시나리오 학습 |
| Reasoning Model | Tool + ReAct |
| 한계 | 설명 |
|---|---|
| 복잡한 Tool Calling | 능력 미흡 |
| Context 과부하 | Tool 증가에 따른 과부하 |
| 개념 | 설명 |
|---|---|
| Workflow | 전체 작업을 정해진 흐름으로 설계 |
| Agentic Work | Workflow 안에 LLM의 선택적 판단 |
질문 검색 → 검색 평가 모듈 → 질문 답변| 시나리오 | 처리 방법 |
|---|---|
| Correct (정답) | 검색 결과 바로 사용 후 답변 작성 |
| Incorrect (오답) | 질문을 검색어 스타일 Query로 변환 후 재검색 |
| Ambiguous (애매) | 정답과 외부 지식 모두 참고하여 고민 후 답변 |
from langgraph.graph import StateGraph
# 그래프 정의
workflow = StateGraph()
# Node 추가
workflow.add_node("research", research_agent)
workflow.add_node("analyze", analyze_agent)
workflow.add_node("write", writing_agent)
# Edge 추가 (작업 흐름)
workflow.add_edge("research", "analyze")
workflow.add_edge("analyze", "write")
# 실행
result = workflow.run(initial_state)| 장점 | 설명 |
|---|---|
| 시각화 | 복잡한 워크플로우를 시각화하고 관리 |
| 명시적 정의 | 조건부 로직과 반복 처리를 명시적으로 정의 |
| 디버깅 용이 | 디버깅과 모니터링 용이 |
| 안정적 실행 | 상태 관리를 통한 안정적인 실행 |
여러 개의 전문화된 Agent가 협력하여 복잡한 작업을 수행하는 시스템
검색 → 재검색 → 결과 누적 → 시각화 → 보고서 작성
↓
Token 증가로 인한 효율 저하| Agent | 역할 |
|---|---|
| Agent 1 (검색) | 검색 수행, 필요 정보 추출 후 결과 전달 |
| Agent 2 (개발) | 검색 결과 기반 시각화 수행 |
| Agent 3 (작성) | 검색과 시각화 결과 기반 보고서 작성 |
| 구조 | 특징 |
|---|---|
| Supervisor 구조 | Agent 병렬 실행 및 중앙제어 |
| Network 구조 | 상황별 경로 재구성 |
| Hierarchical 구조 | 단일 Supervisor 통제 불가능 시 계층적 관리 |
Query → Master Agent → Response
│
┌─────────┼─────────┐
▼ ▼ ▼
Sub-Agent Sub-Agent Sub-Agent
X Y Z| Agent | 역할 |
|---|---|
| Master Agent | Sub-Agent에게 작업 분배 |
| Sub-Agent | 각 작업 수행 후 Master Agent에게 결과 전달 |
| 개념 | 설명 |
|---|---|
| Agent | LLM이 도구를 활용해 자율적으로 작업 수행하는 시스템 |
| ReAct | Reasoning(추론)과 Acting(행동)을 결합한 패턴 |
| Tool Calling | LLM이 외부 도구/API를 호출하는 메커니즘 |
| Multi-Agent | 여러 Agent가 협력하여 복잡한 작업 수행 |
| LangGraph | 복잡한 Agent 워크플로우를 그래프로 관리 |
Question → Thought → Action → Observation → (반복) → Answer| 프레임워크 | 용도 |
|---|---|
| LangChain | Agent 구현을 위한 종합 프레임워크 |
| LangGraph | 복잡한 워크플로우 관리 |
| AutoGPT | 자율적인 Agent 시스템 |
| CrewAI | Multi-Agent 협업 프레임워크 |