프롬프트 엔지니어링과 AI 에이전트 설계 (상세)

2026년 3월 28일 10분

이 글은 “프롬프트 엔지니어링과 AI 에이전트 설계” 강의의 상세 내용입니다. 강의 개요는 여기에서 확인할 수 있습니다.

이 내용을 슬라이드로 보려면 프레젠테이션 모드를 이용하세요.

프롬프트 엔지니어링과 AI 에이전트 설계 시연 (with Local LLM)
https://github.com/CodeCompose7/prompt_agent
프롬프트 엔지니어링과 AI 에이전트 설계 시연 코드 (on Google Colab)
https://drive.google.com/drive/folders/1UVcBxHdozCicf8RrkF1Y2Ab7u0CtySVF

코드 실행 환경

이 강의의 시연 코드는 두 가지 방법으로 실행할 수 있습니다.

로컬 실행 (GitHub)Google Colab
모델Ollama 로컬 LLMGroq 또는 Gemini API
비용무료무료
사전 준비Ollama 설치 + 모델 다운로드API 키 발급 (1분)
적합한 경우GPU가 있는 PC, 로컬 환경 선호설치 없이 바로 실행, 가벼운 실습
  • 로컬 실행:
    • GitHub 레포지토리를 clone하고 Ollama를 설치하면 됩니다.
    • 모든 데이터가 로컬에서 처리되며 인터넷 연결 없이도 사용 가능합니다.
  • Google Colab: 아래 두 가지 무료 API 중 하나를 선택하세요. 둘 다 과금 등록이 필요 없습니다.
    • Groq (권장): Groq Console에서 API 키를 발급받으세요.
      • llama-3.1-8b-instant 모델을 제공하며, 원본 강의에서 사용하는 llama3.1:8b과 같은 모델입니다.
      • 무료 한도가 넉넉합니다. (분당 30 요청, 하루 14,400 요청)
    • Gemini (대안): Google AI Studio에서 API 키를 발급받으세요.
      • 무료 tier의 한도가 제한적이므로, 429 에러가 발생하면 Groq으로 전환하세요.

Colab 노트북의 첫 번째 셀에서 Colab Secrets(좌측 🔑 아이콘)에
GROQ_API_KEY 또는 GEMINI_API_KEY를 등록하는 방법을 안내합니다.

프롬프트 엔지니어링이란

프롬프트 엔지니어링(Prompt Engineering) 은 LLM이 원하는 결과를 생성하도록 입력을 설계하고 최적화하는 기술입니다.

단순히 “질문을 잘 하는 법"이 아닙니다.
역할 지정, 예시 제공, 추론 유도, 출력 형식 제어 등의 테크닉을 조합하여 LLM의 행동을 프로그래밍하는 것에 가깝습니다.
자연어가 곧 인터페이스가 되는 시대의, 새로운 소프트웨어 설계 역량입니다.

AI 에이전트란

AI 에이전트(AI Agent) 는 LLM을 두뇌로 삼아, 스스로 판단하고 도구를 사용하며 목표를 달성하는 자율적 시스템입니다.

일반적인 LLM 사용은 “질문 → 답변"의 단일 턴으로 끝납니다.
에이전트는 다릅니다. 목표를 분석하고, 계획을 세우고, 도구를 실행하고, 결과를 평가하고, 필요하면 재시도합니다.
웹 검색, 코드 실행, 파일 조작, API 호출 같은 외부 도구를 LLM이 직접 선택하고 사용합니다.

프롬프트 엔지니어링은 이 에이전트의 두뇌를 프로그래밍하는 수단입니다.

도입 — “LLM을 쓴다” vs “LLM을 제어한다”

같은 과제를 나쁜 프롬프트와 좋은 프롬프트로 비교하는 데모입니다.
데모 모델이 로컬 오픈소스 모델임을 자연스럽게 인식시키고,
LiteLLM으로 model 파라미터만 바꿔 provider를 전환하는 시연을 포함합니다.

프롬프트 기본 데모

  • 나쁜 프롬프트 : "넷플릭스에서 뭐 볼지 추천해줘" → 모호한 결과
  • 좋은 프롬프트 : 역할(영화 평론가) + 조건(SF/스릴러, IMDb 7.5+) + 형식(JSON) + 제약(JSON만 출력) → 구조화된 결과
  • Provider 전환 : model="ollama/llama3.1:8b"model="openai/gpt-4o" 한 줄 변경
프롬프트 기본 데모
https://colab.research.google.com/drive/1LNpsMPCuTdADLWS7EbjwzCRDuPHpAQDU

Part 1 — 프롬프트 엔지니어링: 원리와 핵심 테크닉

1-1. LLM은 프롬프트를 어떻게 처리하는가

  • 토큰화(Tokenization): 같은 말도 토큰 수가 다른 이유
  • 컨텍스트 윈도우: 프롬프트 길이의 물리적 한계
  • Temperature / Top-p: 출력의 확률적 특성
  • “다음 토큰 예측” 이라는 근본 메커니즘이 프롬프트 설계에 주는 시사점
%%{init: {'theme':'base','themeVariables':{'primaryColor':'#e3f2fd','primaryBorderColor':'#90caf9','lineColor':'#546e7a','textColor':'#333','mainBkg':'#fafafa','nodeBorder':'#90a4ae','clusterBkg':'#f5f5f5','clusterBorder':'#bdbdbd'}}}%% flowchart LR A["입력 텍스트"] --> B["토큰화"] B --> C["임베딩"] C --> D["Transformer\n레이어"] D --> E["확률 분포"] E --> F["다음 토큰\n선택"] F -->|"반복"| D style A fill:#bbdefb,stroke:#1976d2,stroke-width:2px,rx:10,ry:10 style B fill:#e3f2fd,stroke:#90caf9,stroke-width:2px,rx:10,ry:10 style C fill:#e3f2fd,stroke:#90caf9,stroke-width:2px,rx:10,ry:10 style D fill:#eceff1,stroke:#546e7a,stroke-width:2px,rx:10,ry:10 style E fill:#fff9c4,stroke:#f9a825,stroke-width:2px,rx:10,ry:10 style F fill:#c8e6c9,stroke:#388e3c,stroke-width:2px,rx:10,ry:10

데모: 판타지 RPG 캐릭터 이름 생성을 temp=0.0/0.5/1.0/1.5로 비교합니다.
temp=0에서는 3번 실행해도 같은 결과, temp=1.5에서는 매번 다른 결과가 나옵니다.

1-2. 핵심 테크닉 (Before/After 데모 포함)

각 테크닉을 “왜 필요한가 → 적용 전 → 적용 후” 흐름으로 진행합니다.

System Prompt / 역할 지정

“해리포터에 대해 알려줘"를 3가지 역할로 분석하면 완전히 다른 결과가 나옵니다.

  • 영화 평론가: 시각 효과, 연출, 흥행 분석
  • 문학 교수: 서사 구조, 캐릭터 아크, 문학적 장치
  • 비즈니스 분석가: IP 가치, 라이선스, 수익 모델

Few-shot Prompting

앱 스토어 리뷰 감성 분석에서 예시 0개(Zero-shot)와 3개(Few-shot)의 차이를 비교합니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# Zero-shot
"다음 리뷰의 감성을 분석해주세요: '배송은 빨랐는데 포장이 엉망이네요'"

# Few-shot (3개 예시 제공)
"리뷰 감성을 분석합니다.

리뷰: '완전 만족합니다!'
감성: 긍정 | 핵심: 전반적 만족

리뷰: '최악이에요 환불하고 싶어요'
감성: 부정 | 핵심: 불만족, 환불 요구

리뷰: '가격 대비 괜찮은 편'
감성: 중립 | 핵심: 적정 가성비

리뷰: '배송은 빨랐는데 포장이 엉망이네요'
감성:"

Few-shot으로 형식과 분류 기준이 일관되게 유지됩니다.

Chain-of-Thought (CoT)

논리 퍼즐(A/B/C 진실/거짓말 문제)에서 “바로 답” vs “단계별 추론 유도"를 비교합니다.

1
2
3
4
5
6
7
# 바로 답 요청
"A, B, C 중 한 명만 진실을 말합니다. 
 A: 'B가 거짓말쟁이다', B: 'C가 거짓말쟁이다', 
 C: 'A와 B 둘 다 거짓말쟁이다'. 누가 진실을 말하는가?"

# CoT 유도
"... 각 사람이 진실을 말한다고 가정하고, 그 가정이 모순을 일으키는지 단계별로 검증하세요."

구조화된 출력 요청

서울 맛집 추천에서 자유 텍스트와 JSON 스키마 지정을 비교합니다.

1
2
3
4
5
6
7
# 자유 텍스트 → 파싱 불가
"서울 맛집 3곳 추천해줘"

# JSON 스키마 지정 → json.loads() 파싱 성공
"""서울 맛집 3곳을 다음 JSON 형식으로 추천해주세요.
JSON 외에 다른 텍스트를 포함하지 마세요.
[{"name": "식당명", "area": "지역", "cuisine": "음식종류", "price": "가격대", "reason": "추천이유"}]"""

제약 조건 / 네거티브 프롬프팅

웹 스크래핑 코드 요청에서 장황한 결과와 제약을 건 결과를 비교합니다.

  • 제약 없음: 설명, 주석, 에러 처리, 대안 코드까지 포함된 장황한 결과
  • 제약 적용: "코드만 출력. 설명 금지. 10줄 이내. 주석은 한국어." → 핵심만 담긴 간결한 코드

Part 2 — 프롬프트 설계 패턴과 실전 적용

2-1. 역할 기반 프롬프트 설계

같은 코드를 3가지 역할에게 분석시키는 데모입니다.

1
2
3
4
5
6
# 분석 대상: API에서 패스워드를 그대로 반환하는 위험한 코드
def get_user_data(user_id):
    response = requests.get(f"https://api.example.com/users/{user_id}")
    data = response.json()
    password = data['password']
    return {'name': data['name'], 'email': data['email'], 'pw': password}
  • 보안 전문가: 비밀번호 노출 취약점 분석
  • 성능 엔지니어: 초당 10,000 호출 시 병목 분석
  • 코딩 멘토: 초보자를 위한 비유 중심 설명

2-2. 프롬프트 반복 개선 (Iteration)

유튜브 채널 분석기 프롬프트를 4번 반복 개선하는 라이브 시연입니다.

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#e3f2fd','primaryBorderColor':'#90caf9','lineColor':'#546e7a','textColor':'#333','mainBkg':'#fafafa','nodeBorder':'#90a4ae','clusterBkg':'#f5f5f5','clusterBorder':'#bdbdbd'}}}%% flowchart LR v1["v1\n모호한 질문"] --> v2["v2\nJSON 형식 추가"] v2 --> v3["v3\n역할 + 분석 기준"] v3 --> v4["v4\n에지 케이스 + CoT"] style v1 fill:#ffcdd2,stroke:#e53935,stroke-width:2px,rx:10,ry:10 style v2 fill:#fff9c4,stroke:#f9a825,stroke-width:2px,rx:10,ry:10 style v3 fill:#c8e6c9,stroke:#43a047,stroke-width:2px,rx:10,ry:10 style v4 fill:#bbdefb,stroke:#1976d2,stroke-width:2px,rx:10,ry:10
버전변경 사항결과
v1“유튜브 채널 분석해줘”산문 형태, 측정 불가
v2JSON 출력 형식 지정구조화되었으나 분석 기준 불명확
v3역할(마케팅 전략가) + 분석 기준(성장률, 참여율)전문적 분석, 일부 에지 케이스 미처리
v4에지 케이스 처리 + CoT 추론 단계측정 가능한 액션 아이템 포함 구조화 JSON

v1의 산문 형태 결과가 v4에서 측정 가능한 액션 아이템을 포함한 구조화된 JSON으로 바뀌는 과정을 실시간으로 보여줍니다.

프롬프트 설계 패턴과 반복 개선
https://colab.research.google.com/drive/1XVZPlIkRefdI8mc9q-XHQc4RKCAABCGw

Part 3 — AI 에이전트: 프롬프트 하나로는 부족할 때

3-1. 단일 프롬프트의 한계

LLM에게 “뱀 게임 만들어줘"라고 하면 코드는 나오지만, 실행 확인이나 에러 수정은 못합니다. 이 한계를 시연합니다.

3-2. 에이전트의 4가지 구성요소

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#e3f2fd','primaryBorderColor':'#90caf9','lineColor':'#546e7a','textColor':'#333','mainBkg':'#fafafa','nodeBorder':'#90a4ae','clusterBkg':'#f5f5f5','clusterBorder':'#bdbdbd'}}}%% flowchart TB subgraph Agent["AI 에이전트"] direction TB LLM["🧠 LLM\n(두뇌)\n판단과 생성"] TOOL["🛠️ Tool\n(손과 발)\n코드 실행, 파일 조작\n외부 API 호출"] MEM["💾 Memory\n(기억)\n이전 결과와\n컨텍스트 유지"] ORCH["🔄 Orchestration\n(판단과 루프)\n다음 행동 결정\n반복 제어"] end LLM --> TOOL LLM --> MEM ORCH --> LLM TOOL --> ORCH MEM --> ORCH style LLM fill:#bbdefb,stroke:#1976d2,stroke-width:2px,rx:10,ry:10 style TOOL fill:#c8e6c9,stroke:#388e3c,stroke-width:2px,rx:10,ry:10 style MEM fill:#fff9c4,stroke:#f9a825,stroke-width:2px,rx:10,ry:10 style ORCH fill:#ffccbc,stroke:#e64a19,stroke-width:2px,rx:10,ry:10 style Agent rx:15,ry:15
  • LLM (두뇌): 판단과 생성
  • Tool (손과 발): 코드 실행, 파일 조작, 외부 API 호출
  • Memory (기억): 이전 결과와 컨텍스트 유지
  • Orchestration (판단과 루프): 다음 행동 결정, 반복 제어

3-3. 코드 생성 + 실행 에이전트 — 라이브 데모

순수 Python + LiteLLM으로 while 루프 기반 에이전트를 구현합니다.
코딩 특화 모델(qwen3-coder:30b)을 사용하여 성공률을 높입니다.

에이전트 루프 구조:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
messages = [{"role": "system", "content": system_prompt}]
messages.append({"role": "user", "content": task})

while True:
    response = completion(model=model, messages=messages)
    assistant_msg = response.choices[0].message

    if assistant_msg.tool_calls:
        # 도구 실행 (코드 실행, 파일 저장 등)
        result = execute_tool(assistant_msg.tool_calls[0])
        messages.append({"role": "tool", "content": result})
    else:
        # 도구 호출 없음 → 완료
        break

데모 시나리오 3가지:

데모과제핵심 포인트
뱀 게임HTML+JS로 브라우저에서 플레이 가능한 Snake Game 생성시각적 임팩트, GUI 없는 환경에서 HTML로 우회
데이터 분석학생 성적 데이터를 pandas+tabulate로 분석·표 출력실용적 도구 활용, 구조화된 결과
데이터 시각화프로그래밍 언어 인기도 도넛 차트 생성 (matplotlib)파일 생성 후 Jupyter에서 확인

뱀 게임 데모 특이사항:

  • pygame/tkinter는 디스플레이 없는 환경에서 사용 불가 → HTML+JS로 우회
  • 생성된 /tmp/snake_game.html을 Jupyter에서 열어 실제 플레이 가능
  • llama3.1:8b로는 HTML 생성이 어렵고, qwen3-coder:30b 이상이 필요

시스템 프롬프트 핵심 규칙: GUI 라이브러리 사용 금지, HTML+JS로 게임 생성, 리스트+join 패턴으로 파일 작성 (삼중 따옴표 이스케이프 문제 회피)

AI 에이전트: 코드 생성 + 실행
https://colab.research.google.com/drive/1LyC9Gy7PEJxhfOr6H4bvMjf29JENVO3u

데모 3 실행 결과 — 에이전트가 자동 생성한 프로그래밍 언어 인기도 도넛 차트:

에이전트가 생성한 도넛 차트

Part 4 — 에이전트 설계 원칙과 LangGraph

4-1. 복잡도 스펙트럼

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#e3f2fd','primaryBorderColor':'#90caf9','lineColor':'#546e7a','textColor':'#333','mainBkg':'#fafafa','nodeBorder':'#90a4ae','clusterBkg':'#f5f5f5','clusterBorder':'#bdbdbd'}}}%% flowchart LR A["단일 프롬프트\n(가장 단순)"] --> B["프롬프트 체이닝"] B --> C["라우터"] C --> D["ReAct"] D --> E["풀 에이전트"] E --> F["멀티 에이전트\n(가장 복잡)"] style A fill:#e8f5e9,stroke:#43a047,stroke-width:2px,rx:10,ry:10 style B fill:#f1f8e9,stroke:#7cb342,stroke-width:2px,rx:10,ry:10 style C fill:#fff9c4,stroke:#f9a825,stroke-width:2px,rx:10,ry:10 style D fill:#fff3e0,stroke:#ef6c00,stroke-width:2px,rx:10,ry:10 style E fill:#fbe9e7,stroke:#e64a19,stroke-width:2px,rx:10,ry:10 style F fill:#ffcdd2,stroke:#c62828,stroke-width:2px,rx:10,ry:10

핵심 원칙은 항상 가장 단순한 구조에서 시작하는 것입니다.

4-2. LangGraph로 에이전트 재구현

Part 3의 while 루프를 LangGraph 그래프로 재구현하여 대응 관계를 보여줍니다.

while 루프 (Part 3)LangGraph (Part 4)
messages = [...]State (상태 객체)
response = completion()generate 노드
if tool_calls:conditional edge
execute_tool()ToolNode (자동 라우팅)
else: breakEND edge

Part 3에 없었던 read_file 도구를 추가하여, LLM이 생성된 파일을 직접 읽고 검증하는 흐름을 보여줍니다.

LangGraph 에이전트
https://colab.research.google.com/drive/1Vf61vK0dYTVTIcn4ruNdhVYEX2IbR-Oe

데모:

  • LangGraph 그래프 시각화 (Mermaid PNG)
  • 스타트업 경영 대시보드 자동 생성:
    • 원시 데이터 → pandas 분석 → CSV 저장 → read_file 검증 → matplotlib 2x2 한글 대시보드 이미지 생성

LangGraph 단일 에이전트 그래프:

LangGraph 단일 에이전트 그래프

에이전트가 자동 생성한 스타트업 경영 대시보드:

스타트업 경영 대시보드

4-3. 멀티 에이전트 — 기획자 + 코더 + 리뷰어 협업

5개 에이전트가 협업하는 시스템을 LangGraph로 구현합니다.

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#e3f2fd','primaryBorderColor':'#90caf9','lineColor':'#546e7a','textColor':'#333','mainBkg':'#fafafa','nodeBorder':'#90a4ae','clusterBkg':'#f5f5f5','clusterBorder':'#bdbdbd'}}}%% flowchart LR A["기획자\n(planner)"] --> B["코더\n(coder)"] B --> C["리뷰어\n(reviewer)"] C -->|"반복 2라운드"| B C --> D["PPT 생성\n(make_ppt)"] style A fill:#bbdefb,stroke:#1976d2,stroke-width:2px,rx:10,ry:10 style B fill:#c8e6c9,stroke:#388e3c,stroke-width:2px,rx:10,ry:10 style C fill:#fff9c4,stroke:#f9a825,stroke-width:2px,rx:10,ry:10 style D fill:#ffccbc,stroke:#e64a19,stroke-width:2px,rx:10,ry:10

멀티 에이전트 그래프 (LangGraph):

멀티 에이전트 그래프

데모: AI 모델 벤치마크 데이터(GPT-4o, Claude 3.5 Sonnet, Gemini 등)를 분석하여 PPT 보고서를 자동 생성합니다.

  • 기획자: 요구사항 분석 및 태스크 분해
  • 코더: 코드 작성·실행 (차트 생성, 데이터 분석)
  • 리뷰어: 코드와 결과를 검토하고 개선점 제시
  • 2라운드 반복 개선 후 최종 PPT 생성 (python-pptx)

멀티 에이전트 실행 결과 — 에이전트가 자동 생성한 벤치마크 분석 차트:

AI 모델 벤치마크 점수 비교

성능 대비 비용 분석

03 vs 04 비교:

03: while 루프04: 단일 에이전트04: 멀티 에이전트
에이전트1개1개5개
실행 방식순차순차 (도구 자동)병렬 + 반복
반복 개선에러 시만에러 시만매 라운드 리뷰 반영
결과물코드 출력파일 생성PPT 보고서
멀티 에이전트 협업
https://colab.research.google.com/drive/1wfSoPDxuo4f5gpe1SBptjMHYzmiYJbum

Part 5 — 이 기술이 왜 중요한가 + 학습 로드맵

프롬프트 엔지니어링은 새로운 프로그래밍 인터페이스다

  • 자연어가 곧 프로그래밍 언어가 되는 패러다임
  • “코드를 짜는 능력"만큼 “LLM을 제어하는 능력"이 중요해지는 시대
  • 에이전트의 본질은 루프: while → 그래프 → 멀티 에이전트로 복잡도만 다를 뿐

지금부터 할 수 있는 것들

단계활동도구
1단계Ollama로 로컬 모델 띄워보기ollama pull llama3.1:8b
2단계강의 GitHub 코드 clone해서 돌려보기Jupyter Notebook
3단계LiteLLM으로 여러 모델 비교해보기pip install litellm
4단계자기만의 프롬프트 패턴 만들어보기01/02 노트북 변형
5단계간단한 에이전트 루프 직접 구현해보기03 노트북 변형
6단계LangGraph 에이전트 만들어보기04 노트북 변형

추천 리소스

오픈소스

이 강의에서 사용하는 주요 오픈소스 도구입니다.

도구용도링크
Ollama로컬 LLM 실행https://ollama.com
LiteLLM100+ LLM 통합 인터페이스https://github.com/BerriAI/litellm
LangGraph에이전트 워크플로우 프레임워크https://github.com/langchain-ai/langgraph
LangChainLLM 애플리케이션 프레임워크https://github.com/langchain-ai/langchain
python-pptxPython PPT 생성 라이브러리https://github.com/scanny/python-pptx
matplotlib데이터 시각화 라이브러리https://github.com/matplotlib/matplotlib
pandas데이터 분석 라이브러리https://github.com/pandas-dev/pandas

모델 선택 가이드

파트권장 모델이유
Part 1~2 (프롬프트)llama3.1:8b가볍고 빠름, 프롬프트 테크닉 시연에 충분
Part 3 (코드 에이전트)qwen3-coder:30b코딩 특화, HTML 게임 생성 성공률 높음 (RTX 3090 이상)
Part 4 (LangGraph)qwen3.5:9btool calling 안정적, LangGraph 호환 좋음

8B 모델로도 기본적인 에이전트 루프는 동작하지만, HTML 게임 생성이나 복잡한 멀티 에이전트 작업에는 더 큰 모델이 필요합니다. RTX 3090 원격 서버를 활용하면 30B급 모델도 쾌적하게 사용할 수 있습니다.

데모 사전 준비 체크리스트

  • GitHub 레포지토리 생성 및 데모 코드 push
  • 호스트 또는 원격 서버에 Ollama 설치 및 모델 다운로드
    • ollama pull llama3.1:8b (Part 1~2)
    • ollama pull qwen3-coder:30b (Part 3, RTX 3090 서버)
    • ollama pull qwen3.5:9b (Part 4)
  • 원격 서버 연결 테스트 (포트포워딩/주소 확인)
  • 각 노트북 전체 사이클 사전 테스트 (성공/실패 케이스 모두)
  • 뱀 게임 HTML 생성 데모: 브라우저에서 실제 플레이 가능한지 확인
  • 04 멀티 에이전트: PPT 파일 생성 확인
  • 한글 폰트(NanumGothic) 다운로드 및 matplotlib 설정 확인
  • (선택) 상용 API 키 준비 — provider 전환 데모용
  • 폰트 크기 / 화면 공유 설정 확인
  • 학생에게 GitHub 레포 URL 사전 공유

코드컴포즈

이 콘텐츠에 접근하려면 로그인이 필요합니다.