AI 파이썬 Lab · 심화 · 5주차
심화 · AI 에이전트

AI 에이전트 만들기

지금까지 AI는 물어봐야 답하는 도구였어요. 오늘은 뉴스를 가져와 요약하고, 상황에 따라 다르게 행동하는 미니 AI 에이전트를 만듭니다.

오늘의 목표

오늘 배우는 것

에이전트의 핵심은 판단이에요. 그리고 그 판단은 우리가 이미 배운 if/else로 만들 수 있어요. 답하는 AI에서 행동하는 AI로 한 걸음 나아갑니다.

🧠
GOAL 1
AI 에이전트의 핵심 아이디어를 이해한다
📰
GOAL 2
뉴스를 3줄로 요약하는 봇을 만든다
🤔
GOAL 3
상황에 따라 다르게 행동하게 만든다
새 개념 ①

처음 나오는 것 ① — AI 에이전트

목표를 주면 스스로 도구를 쓰고, 판단하고, 반복해서 일을 해내는 AI 프로그램이에요. 자세한 원리는 바로 다음 섹션에서 살펴봐요.

🤖
AI 에이전트 (Agent)
목표를 주면 스스로 도구 사용·판단·반복으로 일을 해내는 AI예요. 단순히 답만 하지 않아요.
심부름꾼에 비유하면 챗봇은 질문에 답하는 친구, 에이전트는 심부름을 시키면 알아서 다녀오는 친구예요. 오늘 우리는 뉴스를 알아서 읽어오는 심부름꾼을 만들어요.
새 도구 ②

처음 나오는 것 ② — Claude API

Anthropic이 만든 AI를 코드에서 직접 호출하는 방법이에요. 오늘 만드는 에이전트의 '판단 엔진'으로 써볼 수 있어요. 키는 .env에서 자동으로 불러옵니다.

🧠
Claude API
Anthropic이 만든 고성능 AI를 코드에서 직접 호출하는 인터페이스예요. 우리가 써온 ask_ai()와 같은 방식으로 연결할 수 있어요.
왜 쓸까? Claude는 긴 글 이해와 복잡한 판단에 강해요. 뉴스 기사를 읽고 요약하거나, 조건에 따라 다르게 행동하는 에이전트를 만들 때 특히 잘 맞아요. Claude Code(터미널 코딩 도구)와는 다른 거예요.
🔑 API 키 관리
Claude API를 쓰려면 API 키가 필요해요. 키는 코드에 직접 쓰지 않고 .env 파일에 보관해요. 선생님이 나눠준 키 파일을 코드와 같은 폴더에 두면 자동으로 불러옵니다.
개념

챗봇과 에이전트는 무엇이 다를까?

챗봇은 질문에 답하는 친구예요. 에이전트는 심부름을 시키면 알아서 다녀오는 친구죠. 에이전트는 세 가지를 스스로 합니다.

🛠️
도구 사용
필요한 정보를 직접 가져와요. 오늘은 '뉴스 기사'를 가져옵니다.
🤔
판단
상황을 보고 다르게 행동해요. 이 '판단'을 우리는 if/else로 만들어요.
🔁
반복
여러 개를 하나씩 자동으로 처리할 수도 있어요.
📌 오늘 만드는 미니 에이전트
뉴스를 가져와서(도구) → 길이를 보고 판단해서(판단) → 길면 요약하고 짧으면 그대로 보여주는 봇이에요. 한 번 만들어두면 매일 자동으로 동작해요.
🔁 에이전트가 반복을 대신한다
뉴스 기사 10개를 사람이 하나씩 읽으면 오래 걸려요. 에이전트는 for 반복문으로 10개를 자동으로 처리해요. "10개 읽어줘"라고 한 번만 시키면 돼요. 이게 에이전트의 진짜 힘이에요.
💡 판단 = if/else

거창해 보이는 '판단'도, 사실 우리가 배운 if/else예요. "기사가 길면 요약, 짧으면 그대로"처럼 조건만 정하면 봇이 스스로 행동을 골라요.

미션 1

뉴스 요약 봇 만들기

🎯 목표: 뉴스 기사를 AI에게 보내, 3줄로 요약하는 봇을 만든다.

① 흐름 이해하기

1
가져오기
기사 내용을 변수에 담아요.
2
요약하기
ask_ai()로 AI에게 3줄 요약을 부탁해요.
3
보여주기
요약 결과를 print로 화면에 보여줘요.

② AI를 부르는 준비 — ask_ai 함수

🔑 .env 파일 만드는 법 (처음 한 번만)

1단계 — VS Code 터미널에서 수업 폴더 안에 파일 만들기

터미널
# Windows
New-Item .env

# Mac
touch .env

2단계 — .env 파일을 열고 아래 한 줄 입력 (선생님이 알려준 키 사용)

.env
OPENAI_API_KEY=여기에_선생님이_알려준_키_붙여넣기

⚠️ 키 앞뒤에 공백이나 따옴표 없이 딱 붙여서 저장하세요. .env 파일은 코드와 같은 폴더에 있어야 해요.

AI 호출은 1주차에서 만든 ask_ai()를 그대로 재사용해요. 파일 맨 위에 한 번만 적어 둡니다. 이 봇의 판단 엔진으로는 Claude API를 써도 되고, 키는 .env에서 자동으로 불러옵니다.

agent.py — 재사용 함수 (한 번만 작성)
from openai import OpenAI
client = OpenAI()   # 키는 .env에서 자동으로

def ask_ai(prompt):
    res = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{"role": "user", "content": prompt}])
    return res.choices[0].message.content

③ 요약 봇 만들기

💬 이렇게 입력해 보세요
뉴스 기사 내용을 주면 3줄로 요약하는 프로그램을 만들어줘. AI 호출은 ask_ai(prompt) 함수를 쓰고, 각 줄은 한 문장으로, 딱 3줄만 나오게 해줘. API 키는 .env에서 불러오게 해줘.
agent.py — 요약
# 긴 기사는 삼중 따옴표로 붙여넣기
news = """여기에 뉴스 기사 내용을 붙여넣기"""

summary = ask_ai(f"다음 기사를 3줄로 요약해줘. 각 줄은 한 문장으로:\n{news}")
print(summary)
뉴스 기사 3줄 요약 — ask_ai() 실행 결과
📸 실행 결과
뉴스 기사 3줄 요약 — ask_ai() 실행 결과
기사를 넣고 실행해 3줄 요약이 print된 터미널 화면
📝 요약이 딱 3줄로 나오는 모습이 보이도록 캡처
▸ 터미널 출력
1. 새 도서관이 우리 동네에 문을 열었다.
2. 주말에는 어린이 책 읽기 행사가 열린다.
3. 누구나 무료로 이용할 수 있다.
⚠️ 자주 하는 실수
🔒 힌트 — 요약이 안 나와요 (참고 코드)

news 변수에 실제 기사 내용이 들어 있는지, 그리고 그 변수를 프롬프트 안에 끼워 넣었는지 확인해요.

agent.py (참고)
news = """오늘 우리 동네에 새 도서관이..."""   # 내용 채우기
print(ask_ai(f"다음 기사를 3줄로 요약해줘:\n{news}"))
미션 2

판단 추가하기

🎯 목표: 기사 길이에 따라 봇이 다르게 행동하게 만든다.
✏️ 먼저 스스로 해보기
내 봇은 어떤 상황에서 다르게 행동할까?
① 내 봇이 어떤 상황(예: 글자 수, 주제)에서 다르게 행동하면 좋을지 정해 보세요.
② 그 두 가지 경우의 행동을 각각 한 줄씩 먼저 적어 보세요. 떠올랐다면 코드를 받기 전에 종이에 써 봅니다.

판단 예시

A
긴 기사면
3줄로 요약해서 보여줘요.
B
짧은 기사면
요약 없이 그대로 보여줘요.
💬 이렇게 입력해 보세요
기사가 500자보다 길면 3줄 요약하고, 짧으면 그대로 보여주도록 판단하는 코드를 추가해줘.
agent.py — 판단
print("기사 길이:", len(news))

if len(news) > 500:
    print(ask_ai(f"다음 기사를 3줄로 요약해줘:\n{news}"))
else:
    print("기사가 짧아요. 그대로 읽어보세요:")
    print(news)
▸ 터미널 출력 (짧은 기사일 때)
기사 길이: 142
기사가 짧아요. 그대로 읽어보세요:
오늘 우리 동네에 새 도서관이 문을 열었다...
⚠️ 자주 하는 실수
🔒 힌트 — 한 갈래만 작동해요 (참고)

ifelse 두 갈래가 모두 있는지 확인하고, 짧은 기사와 긴 기사를 각각 넣어 실행해 보세요. 두 출력이 서로 달라야 정상이에요.

미션 3

행동 확장하기

🎯 목표: 봇이 할 수 있는 행동을 하나 더 추가한다.

요약과 판단이 된다면 이미 미니 에이전트예요. 여기에 새 능력을 하나만 골라 추가해 봅시다.

🃏 선택지 카드 — 어떤 능력을 줄까?

A
감정 분석
긍정 뉴스인지 부정 뉴스인지 알려주기
난이도 ★☆☆
→ "이 기사가 긍정인지 부정인지 알려주는 기능 추가해줘"
B
키워드 뽑기
기사에서 핵심 키워드 3개 뽑기
난이도 ★★☆
→ "기사에서 핵심 키워드 3개를 뽑아주는 기능 추가해줘"
C
분류하기
기사를 주제별로 자동 분류
난이도 ★★☆
→ "기사를 주제별로 자동 분류하는 기능 추가해줘"
D
여러 기사 한번에
기사 목록을 받아 하나씩 자동 요약
난이도 ★★★
→ "기사 목록을 받아서 하나씩 자동으로 요약하게 해줘"
E
나만의 아이디어!
위에 없는 능력을 직접 떠올려 AI에게 요청해 보기
⚠️ 자주 하는 실수
보너스 미션

더 해보고 싶다면

미션 3까지 끝내고 시간이 남는다면 도전해 보세요. 끝내지 못해도 괜찮습니다.

보너스 ① 기억하는 봇

이전에 요약한 기사 개수를 기억했다가 "오늘 N번째 요약"이라고 알려주게 만들어요. 에이전트가 '기억'을 갖는 경험이에요.

💬 이렇게 입력해 보세요
요약한 기사 개수를 기억했다가 실행할 때마다 '오늘 N번째 요약'이라고 알려주는 기능을 추가해줘.
agent.py (기억 예시)
history = []   # 요약 결과를 모아두는 상자

summary = ask_ai(f"다음 기사를 3줄로 요약해줘:\n{news}")
history.append(summary)
print(f"오늘 {len(history)}번째 요약입니다.")
print(summary)

보너스 ② 두 봇의 협업 설계

요약 봇과 분류 봇이 협력하면 어떻게 될까요? 코드로 안 만들어도 좋아요. 종이에 "기사 → 분류 봇 → 요약 봇 → 결과" 흐름을 그려 보세요.

🎯 성공 기준
실행할 때마다 요약 개수가 올라가거나, 두 봇이 협력하는 흐름을 그림으로 설명할 수 있으면 성공이에요.
정리

오늘의 핵심 정리

1️⃣
에이전트
스스로 도구 쓰고·판단하고·반복하는 AI를 이해했다
2️⃣
구현
뉴스를 가져와 요약하는 봇을 만들었다
3️⃣
판단
상황에 따라 다르게 행동하게 만들었다

🔧 막혔을 때 — 자가 디버깅 4단계

에러가 떠도 당황하지 마세요. 선생님께 묻기 전에 이 순서대로 스스로 해결해 봅니다.

1
에러 메시지 읽기
빨간 글자에서 '몇 번째 줄'과 '무슨 에러'인지 찾아본다.
2
AI에게 보여주기
에러 메시지를 복사해서 "이 에러를 수정해줘"라고 AI에게 요청한다.
3
고쳐서 다시 실행
AI가 준 수정 코드를 적용하고 다시 실행해 본다.
4
선생님께 질문
그래도 안 되면 '에러 메시지 + 내가 시도한 것'을 함께 설명한다.