Phase 5-1 · LLM vs Agent, ReAct 패턴¶
예상 소요 1시간
박대리
"저... Agent랑 LLM이랑 뭐가 다른 거죠?"
김팀장
"LLM은 질문에 답하는 기계야. Agent는 목표를 위해 스스로 행동하는 기계고. 한 줄 차이처럼 들리지만 실제로는 완전히 다른 구조야."
LLM — 텍스트 입력 → 텍스트 출력¶
LLM(Large Language Model)은 단순합니다.
LLM은 훈련 데이터만 알고 있습니다. 한밭푸드 AKS 클러스터 상태는 훈련 데이터에 없습니다. 질문하면 모른다고 합니다.
Agent — 루프 있는 LLM¶
Agent는 LLM에 행동 능력을 더한 것입니다.
입력: "order-api 파드 상태가 어떻게 돼?"
Agent 내부 루프:
생각: "파드 상태를 알려면 kubectl 을 실행해야 해"
행동: kubectl get pods -n hanbat-parkdaeri 실행
관찰: order-api-xxx Running 1/1 payment-api-xxx CrashLoopBackOff
생각: "payment-api 가 죽어있네. 로그도 봐야겠다"
행동: kubectl logs deployment/payment-api 실행
관찰: OOMKilled: container exceeded memory limit
생각: "메모리 초과로 죽었구나. 이제 답할 수 있다"
출력: "payment-api 파드가 메모리 초과(OOMKilled)로 CrashLoop 상태입니다.
k8s/payment-api-deployment.yaml 의 memory limit 증가가 필요합니다."
LLM이 스스로 어떤 도구를 쓸지 결정하고, 결과를 보고 다음 행동을 결정합니다.
ReAct 패턴¶
Agent의 루프 구조는 ReAct 패턴으로 설명할 수 있습니다.
Reasoning + Acting — 추론과 행동의 반복입니다.
사용자 질문
│
▼
[Thought] "이 질문에 답하려면 무엇이 필요한가?"
│
▼
[Action] 도구 선택 → 실행 (kubectl, curl, DB 조회 등)
│
▼
[Observation] 도구 실행 결과 수신
│
├── 더 필요한 정보가 있나? → [Thought] 로 돌아감
│
└── 충분히 파악됐다 → [Answer] 최종 답변
ReAct를 이해하기 좋은 비유
LLM: 눈 감고 기억에 의존해 답하는 사람
Agent: 질문 → "이걸 알려면 자료가 필요해" → 검색 → 자료 읽고 → "아직 부족해" → 추가 검색 → 메모 → 답변하는 사람
어떤 업무에 Agent가 맞나¶
| 업무 | Agent 적합성 | 이유 |
|---|---|---|
| 장애 원인 분석 | ✅ 적합 | 로그·메트릭을 보고 단계적으로 추론 |
| 일상적 FAQ 답변 | ⚠️ 과함 | 단순 LLM 호출로 충분 |
kubectl delete 자동 실행 |
❌ 위험 | 실수 시 복구 불가 — 반드시 사람 승인 필요 |
| 정기 리포트 생성 | ✅ 적합 | 여러 소스 조합 후 요약 |
Agent가 위험한 이유
Agent는 스스로 명령을 결정합니다.
"파드를 재시작해줘" 라는 질문에 Agent가 kubectl delete pod를 실행할 수 있습니다.
프로덕션에서 이 명령이 실수로 실행되면 서비스가 중단됩니다.
Phase 5~6 실습에서는 읽기 전용 도구(get, logs, describe)만 제공합니다. 쓰기 작업은 항상 사람이 확인 후 실행합니다.
Tool Calling — Agent가 도구를 쓰는 방법¶
OpenAI API에는 Tool Calling(Function Calling) 기능이 있습니다. LLM에게 "이런 함수가 있어"라고 알려주면, LLM이 필요할 때 "이 함수를 이 인수로 호출해줘"라고 요청합니다.
# 개발자가 정의한 도구 명세
tools = [{
"type": "function",
"function": {
"name": "get_pod_logs",
"description": "지정한 서비스의 최근 Pod 로그를 조회한다",
"parameters": {
"type": "object",
"properties": {
"service_name": {"type": "string"},
"tail_lines": {"type": "integer"}
}
}
}
}]
# LLM 응답에서 tool_call 이 오면
# → 실제 함수를 실행하고
# → 결과를 다시 LLM에 전달
LLM은 어떤 함수를 어떤 인수로 부를지를 결정합니다. 실제 함수를 실행하는 건 개발자 코드(Python)입니다.
이번 Phase에서 만들 것¶
| 단계 | 파일 | 결과 |
|---|---|---|
| Phase 5-2 | phase5/basic_chat.py |
Azure OpenAI 기본 호출 체험 |
| Phase 5-3 | phase5/log_agent.py |
Tool Calling으로 로그 분석 Agent 실행 |