본문 바로가기
학교

2026 하계 모각코 1회차

by 발빠진 쥐 2026. 7. 2.

[1단계] week01 <Agentic AI 의 기초>

🗓 이번 주 개요

📚 이번 주 학습한 것

1. <주제 1> — Agentic AI

Agent Architecture - 에이전트의 구성

Agent 는 특정 분야를 뾰족하게 잘 하는 것.

  • User Request: 사용자가 자연어로 요청을 던짐 ("내일 10시 회의 잡아줘")
  • Agent : 이 요청을 받아서 판단하는 중심부. User Request와 양방향 화살표로 연결되어 있는 게 포인트 — 한 번 요청하고 끝나는 게 아니라 계속 주고받으면서(대화형으로) 상호작용함
  • Agent가 판단할 때 참고/활용하는 3가지 하위 요소:
    • Tools: 실제로 뭔가를 실행할 수 있는 도구들 (예: 나나 프로젝트의 personal_create_schedule 같은 함수)
    • Memory: 이전 대화나 상태를 기억하는 저장소 (지금까지 뭘 했는지, 사용자가 뭘 말했는지)
    • Planning: 여러 단계를 어떤 순서로 처리할지 계획을 세우는 부분

즉, Agent = User Request를 받아 → Memory(기억) + Planning(계획) + Tools(실행수단)을 조합해서 → 다시 User에게 응답하는 순환 구조.

시스템 전체를 사람의 몸에 비유한다면

  • 머리(LLM): 판단/추론을 담당하는 뇌 역할. "무엇을 시킬지" 결정하는 주체
  • 양손에 Tool과 Prompt: LLM이 활용하는 두 가지 핵심 수단
    • Prompt: 어떻게 행동할지 지시하는 텍스트 (시스템 프롬프트 등)
    • Tool: 실제로 무언가를 수행하는 함수/기능

처음 공부 했을 때는 User Request 와 System Prompt 가 같은 건줄 알았는데,

  • System Prompt: 개발자가 미리 설정해두는 역할/규칙/성격 정의 ("너는 일정 관리 비서야. 사용자 요청을 받으면...")
  • User Request(사용자의 실제 발화): 대화 시점에 사용자가 입력하는 내용 ("내일 10시 개발 미팅 잡아줘")
    의 차이가 있다는 것을 알게 되었다.

실제 함수 실행 권한과 로직은 Local(=MCP 서버) 쪽에 있고, LLM은 오직 "어떤 함수를 어떤 인자로 부를지"만 판단한다.

Prompt 를 쓰는 방법에는 4가지 방법이 있다.
Zero-shot : 예시 없이 바로 질문 | "그냥 해봐"
Few-shot : 예시 몇 개 주고 질문|"이런 식으로 해봐"
Instruction : 역할/규칙을 명시|"너는 ~야, ~해라"
CoT : 생각 과정을 단계별로|"왜 그런지 설명하면서 풀어봐"

가장 자주 쓰이는 것은 Fewshot과 CoT.


2. <주제 2> — Tool, Tool call, Tool Result, function calling

  • 핵심 개념:

Tool (도구)
LLM이 직접 실행할 수 있는 함수. 코드에서 @tool 붙은 함수들이다. 과제에서는:

  • personal_create_schedule
  • personal_list_schedules
  • personal_delete_schedule 함수들이다.

-Tool Call (도구 호출)
LLM이 "이 함수 실행해줘"라고 요청하는 것. 사용자가 "미팅 일정 만들어줘"라고 하면 LLM이 스스로 personal_create_schedule을 호출한다.

-Tool Result (도구 결과)
함수가 실행되고 나서 LLM에게 돌려주는 값. 함수를 구현하지 않았을 땐 null이 돌아간다.

-Trace (추적) : 에이전트가 요청을 처리하는 동안 내부적으로 무슨 일이 일어났는지 순서대로 기록한 실행 로그

  • 내가 이해한 방식: 과제를 수행하면서 공부하니 그냥 강의 자료를 읽어볼 때 보다 이해가 잘 됐다. 일단 함수가 구현이 안됐을 때의 문제점을 먼저 파악 해보고 싶어서 처음에 코드를 실행하고 trace 를 읽어 보면서 해보았다.

Pasted image 20260702194341.png

3. <주제 3> — ReAct 패턴

ReAct = Reasoning + Acting의 합성어. 프롬프팅/에이전트 설계 패턴이다.

  • 핵심 개념 : LLM이 답을 바로 내뱉지 않고, 생각(추론) → 행동(도구 호출) → 관찰(결과 확인)을 반복하면서 점진적으로 답을 찾아가게 하는 것.**
    • 왜 그냥 답하면 안 되고 이 루프가 필요한가?
      LLM 혼자서는 "지금 몇 시인지", "저장된 일정이 뭐가 있는지" 같은 실시간/외부 정보를 모름.
      그래서 필요한 정보가 있을 때마다 잠깐 멈추고 tool을 호출해서 실제 세계의 정보를 가져와야 함.
      ReAct는 이 "멈추고 → 확인하고 → 다시 진행"하는 과정을 명시적인 사이클로 구조화한 것.
    • 사이클 구조
Thought (생각): "사용자가 내일 10시 미팅을 요청. 
                먼저 그 시간에 이미 다른 일정이 있는지 확인해야겠다."
Action (행동): personal_list_schedules(date="내일") 호출
Observation (관찰): 결과 확인 → "내일 10시는 비어있음"

Thought: "비어있으니 이제 일정을 생성하면 되겠다."
Action: personal_create_schedule(date="내일", start_time="10:00", title="개발 미팅")
Observation: {id: "sch_123", date: "2026-07-03", start_time: "10:00"} 반환됨

Thought: "생성이 성공했다. 이제 사용자에게 결과를 알려주면 된다."
→ 최종 답변: "내일 10시에 개발 미팅 일정을 등록했습니다."

매 Action 후에 Observation을 보고 다음 Thought가 달라질 수 있다.
만약 "내일 10시에 이미 다른 일정이 있음"이라는 Observation이 나왔다면, 그 다음 Thought는 "그럼 사용자에게 충돌을 알리고 다른 시간을 물어봐야겠다"로 분기하게 된다.

LangChain에서는

@tool 데코레이터로 함수를 등록해두면, LangChain의 에이전트 실행기(AgentExecutor 같은)가 이 Thought → Action → Observation 루프를 자동으로 돌려준다. 개발자가 직접 이 루프를 코딩하는 게 아니라, 프레임워크가 "LLM 응답에 tool_call이 있으면 실행하고, 결과를 다시 LLM에 넣고, tool_call이 없어질 때까지(=최종 답변이 나올 때까지) 반복"하는 걸 대신 처리해줌.

🧱 막혔던 지점 & 해결 과정

  • 문제 상황: 단순히 웹 개발 관련 공부를 하다가 Agentic AI 를 다루는 공부를 해야해서 낯설었다. 특히 LangChain 에 대한 개념이 정말 어려웠다.
  • 시도한 방법: 과제 코드를 AI 에게 다 맡겨버리는게 아닌 강의 자료를 참고하며 직접 타이핑 했더니 감이 어느정도 잡힌 것 같다.

🔁 이번 주 회고 (KPT)

  • Keep 유지하고 싶은 습관: 모르는게 있어도 그냥 넘어가지 않고 공부하기
  • Problem 아쉬웠던 점: 과제나 학습일지를 작성할 때 시간이 오래 걸렸다
  • Try 다음 주에 시도할 것: 모각코 시간을 좀 더 효율적으로 사용하기