AI 에이전트 만들기
지금까지 AI는 물어봐야 답하는 도구였어요. 오늘은 뉴스를 가져와 요약하고, 상황에 따라 다르게 행동하는 미니 AI 에이전트를 만듭니다.
오늘 배우는 것
에이전트의 핵심은 판단이에요. 그리고 그 판단은 우리가 이미 배운 if/else로 만들 수 있어요. 답하는 AI에서 행동하는 AI로 한 걸음 나아갑니다.
처음 나오는 것 ① — AI 에이전트
목표를 주면 스스로 도구를 쓰고, 판단하고, 반복해서 일을 해내는 AI 프로그램이에요. 자세한 원리는 바로 다음 섹션에서 살펴봐요.
처음 나오는 것 ② — 판단하는 코드, if/else
에이전트가 "스스로 판단한다"고 하면 거창하게 들리지만, 사실 그 판단은 코드 한 줄로 만들 수 있어요.
챗봇과 에이전트는 무엇이 다를까?
챗봇은 질문에 답하는 친구예요. 에이전트는 심부름을 시키면 알아서 다녀오는 친구죠. 에이전트는 세 가지를 스스로 합니다.
if/else로 만들어요.거창해 보이는 '판단'도, 사실 우리가 배운 if/else예요. "기사가 길면 요약, 짧으면 그대로"처럼 조건만 정하면 봇이 스스로 행동을 골라요.
뉴스 요약 봇 만들기
① 흐름 이해하기
ask_ai()로 AI에게 3줄 요약을 부탁해요.print로 화면에 보여줘요.② AI를 부르는 준비 — ask_ai 함수
AI 호출은 1주차에서 만든 ask_ai()를 그대로 재사용해요. 파일 맨 위에 한 번만 적어 둡니다. 이 봇의 판단 엔진으로는 Claude API를 써도 되고, 키는 .env에서 자동으로 불러옵니다.
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③ 요약 봇 만들기
# 긴 기사는 삼중 따옴표로 붙여넣기
news = """삼성전자가 청소년 10만 명을 대상으로 인공지능 교육을 지원하기로 했다.
이번 프로그램은 전국 중·고등학생을 대상으로 하며, AI 기초 개념부터 실습까지 배울 수 있는 커리큘럼으로 구성된다.
교육은 온라인과 오프라인을 병행해 지역과 관계없이 참여할 수 있도록 운영된다.
삼성전자는 디지털 격차를 줄이고 미래 인재를 양성하기 위해 이 프로그램을 마련했다고 밝혔다.
참여 학생에게는 수료증과 함께 우수자 대상 추가 교육 기회도 제공된다.
회사 측은 이번 지원을 시작으로 AI 교육 대상을 점차 확대해 나갈 계획이라고 설명했다."""
summary = ask_ai(f"다음 기사를 3줄로 요약해줘. 각 줄은 한 문장으로:\n{news}")
print(summary)1. 삼성전자가 청소년 10만 명에게 AI 교육을 지원하기로 했다.
2. 전국 중·고등학생이 온·오프라인으로 AI 기초부터 실습까지 배운다.
3. 디지털 격차 해소와 미래 인재 양성을 위한 것이며 교육 대상을 점차 확대할 계획이다.news = """..."""""") 사이에 기사 내용을 통째로 넣어요. 편지지에 기사를 옮겨 적어 news라는 상자에 넣는 것과 같아요.ask_ai(f"...{news}")news 상자 속 기사를 끼워 넣어 AI에게 보내요.summary = ...summary라는 상자에 담아 기억해 둬요.print(summary)summary 상자 안의 내용을 화면에 꺼내 보여줘요.- 요약이 너무 김 → 프롬프트에 "각 줄 한 문장, 딱 3줄만"을 명시해요.
- 긴 기사 붙이기 힘듦 →
"""삼중 따옴표"""안에 넣어요. news변수에 내용을 안 넣으면 빈 요약이 나와요.
🔒 힌트 — 요약이 안 나와요 (참고 코드)
news 변수에 실제 기사 내용이 들어 있는지, 그리고 그 변수를 프롬프트 안에 끼워 넣었는지 확인해요.
news = """오늘 우리 동네에 새 도서관이...""" # 내용 채우기
print(ask_ai(f"다음 기사를 3줄로 요약해줘:\n{news}"))판단 추가하기
② 그 두 가지 경우의 행동을 각각 한 줄씩 먼저 적어 보세요. 떠올랐다면 코드를 받기 전에 종이에 써 봅니다.
판단 예시
# 이번엔 짧은 기사로 테스트
news = """오늘 우리 동네에 새 도서관이 문을 열었다. 주말에는 어린이 책 읽기 행사도 열린다고 한다."""
print("기사 길이:", len(news))
if len(news) > 500:
print(ask_ai(f"다음 기사를 3줄로 요약해줘:\n{news}"))
else:
print("기사가 짧아요. 그대로 읽어보세요:")
print(news)기사 길이: 51
기사가 짧아요. 그대로 읽어보세요:
오늘 우리 동네에 새 도서관이 문을 열었다. 주말에는 어린이 책 읽기 행사도 열린다고 한다.len(news)if len(news) > 500:else:if 아니면 else 중 딱 한 갈래만 실행돼요. 갈림길에서 한쪽 길만 가는 것과 같아요.- 한 갈래만 작동 → 짧은 기사·긴 기사를 각각 넣어 둘 다 테스트해요.
- 기준값 500의 의미 혼동 →
print(len(news))로 글자 수를 먼저 확인해요.
🔒 힌트 — 한 갈래만 작동해요 (참고)
if와 else 두 갈래가 모두 있는지 확인하고, 짧은 기사와 긴 기사를 각각 넣어 실행해 보세요. 두 출력이 서로 달라야 정상이에요.
행동 확장하기
요약과 판단이 된다면 이미 미니 에이전트예요. 여기에 새 능력을 하나만 골라 추가해 봅시다.
🃏 선택지 카드 — 어떤 능력을 줄까?
- 기능 추가하다 기존 기능이 깨짐 → "기존 요약 기능은 그대로 두고 ___ 기능을 추가해줘"라고 분명히 요청해요.
- 추가 전 코드를 한 번 복사해 두면 안전해요.
더 해보고 싶다면
미션 3까지 끝내고 시간이 남는다면 도전해 보세요. 끝내지 못해도 괜찮습니다.
보너스 ① 기억하는 봇
이전에 요약한 기사 개수를 기억했다가 "오늘 N번째 요약"이라고 알려주게 만들어요. 에이전트가 '기억'을 갖는 경험이에요.
history = [] # 요약 결과를 모아두는 상자
summary = ask_ai(f"다음 기사를 3줄로 요약해줘:\n{news}")
history.append(summary)
print(f"오늘 {len(history)}번째 요약입니다.")
print(summary)
history = []history.append(summary)len(history)오늘 1번째 요약입니다.
요약 결과(예시)
오늘 2번째 요약입니다.
요약 결과(예시)
오늘 3번째 요약입니다.
요약 결과(예시)보너스 ② 두 봇의 협업 설계
요약 봇과 분류 봇이 협력하면 어떻게 될까요? 종이에 "기사 → 분류 봇 → 요약 봇 → 결과" 흐름을 먼저 그려 보고, 아래처럼 코드로도 이어 봅니다.
# 1번 봇: 기사를 주제로 분류
category = ask_ai(f"다음 기사의 주제를 한 단어로 알려줘(예: 교육, 경제, 스포츠):\n{news}")
# 2번 봇: 분류 결과를 받아 요약
summary = ask_ai(f"다음은 '{category}' 주제 기사야. 3줄로 요약해줘:\n{news}")
print("주제:", category)
print("요약:", summary)주제: 교육
요약: 삼성전자가 청소년 10만 명에게 AI 교육을 지원하기로 했다.
전국 중·고등학생이 온·오프라인으로 AI 기초부터 실습까지 배운다.
디지털 격차 해소와 미래 인재 양성을 위한 것이며 교육 대상을 점차 확대할 계획이다.오늘의 핵심 정리
🔧 막혔을 때 — 자가 디버깅 4단계
에러가 떠도 당황하지 마세요. 선생님께 묻기 전에 이 순서대로 스스로 해결해 봅니다.