LLM에 날개를 달아주는 마법, AI 에이전트 스킬(Agent Skills) 파헤치기 🛠️
앞선 포스팅에서 우리는 “스스로 생각하고 행동하는 AI 에이전트(AI Agent)“의 시대가 다가오고 있음을 살펴보았습니다. 그렇다면 글자만 읽고 쓸 줄 아는 거대 언어 모델(LLM)이 도대체 어떻게 인터넷을 검색하고, 마우스로 버튼을 클릭하며, 데이터베이스에 접속할 수 있는 것일까요?
그 비밀의 열쇠가 바로 오늘 설명할 “에이전트 스킬(Agent Skills)” 혹은 **“툴(Tools)“**입니다.
💡 에이전트 스킬(Agent Skills)이란?
에이전트 스킬은 쉽게 말해 **“AI에게 쥐어주는 도구 상자”**입니다. 우리가 아무리 똑똑한 천재(LLM)라도 방 안에 가둬두고 종이와 펜만 준다면 외부 세상에 영향을 미칠 수 없습니다. 하지만 그 천재에게 스마트폰, 노트북, 드라이버, 계산기 같은 도구(Skills)를 주고 “이걸 활용해서 문제를 해결해 봐”라고 지시하면 상황이 달라집니다.
AI 에이전트는 사용자의 목표를 달성하기 위해, 개발자가 사전에 정의해 둔 수많은 스킬 목록 중 어떤 상황에 어떤 스킬을 꺼내 써야 할지 스스로 판단하고 실행합니다.
🛠️ 에이전트가 사용하는 대표적인 스킬 4가지
현재 상용화되거나 연구되고 있는 AI 에이전트들이 가장 흔하게 장착하는 핵심 스킬들은 다음과 같습니다.
1. 웹 브라우징 및 검색 스킬 (Web Search)
가장 기본적이면서 강력한 스킬입니다. 2021년 데이터에 머물러 있는 LLM에게 최신 정보(실시간 날씨, 주식 환율, 최근 뉴스)를 파악하게 해주는 눈(Eye) 역할을 합니다.
- 활용 예시: “오늘 서울 강남구의 날씨가 어때?” -> 모델이
get_weather_info("Seoul, Gangnam")스킬을 호출하여 실시간 API에 접속합니다.
2. 코드 실행 스킬 (Code Execution / Sandbox)
데이터 분석가들을 경악하게 만든 스킬입니다. 파이썬(Python) 같은 코드를 에이전트가 직접 짠 뒤, 안전한 가상 환경(Sandbox) 내에서 그 코드를 직접 실행해보고 결과값이나 에러 로그를 확인합니다.
- 활용 예시: “이 엑셀 파일을 읽고 연도별 매출 추이 그래프를 이미지로 그려줘.” -> 모델이 Pandas와 Matplotlib을 활용한 스크립트를 작성하고 실행(Run Code)하여 결과 이미지를 뱉어냅니다.
3. 로컬 파일 시스템 제어 스킬 (File I/O)
코딩 전문 에이전트(Devin 등)에게 필수적인 스킬입니다. 터미널의 cat, grep, sed 같은 명령어를 스킬 체계로 만들어주면, 에이전트가 내 컴퓨터의 폴더를 이리저리 돌아다니며 소스 코드를 읽고 직접 수정(Write)까지 완료합니다.
4. 외부 API 연동 스킬 (Function Calling)
가장 확장성이 무궁무진한 스킬입니다. 개발자가 회사의 내부 데이터베이스나 슬랙, 지라(Jira), 메일 발송 API 등을 스킬로 만들어 에이전트에게 쥐어줍니다.
- 활용 예시: “오늘 들어온 고객 클레임 메일들을 요약해서 슬랙 운영 채널에 보내줘.”
⚙️ 마법의 작동 원리 : 함수 호출 (Function Calling)
이 모든 스킬이 동작하는 핵심 기술적 배경에는 OpenAI가 발표했던 Function Calling(함수 호출) 기능이 있습니다. 백문이 불여일견, 코드로 직접 어떻게 구현하는지 살펴볼까요?
1단계: LLM에게 스킬(도구) 설명서 넘겨주기
먼저 개발자는 내가 만든 함수(예: 내가 있는 곳의 날씨를 알려주는 함수)가 어떤 입력값을 받아야 하는지 JSON 형태로 스펙을 알려줍니다.
// OpenAI API에 보낼 '스킬(도구)' 목록 정의
const tools = [
{
type: "function",
function: {
name: "get_current_weather",
description: "특정 도시의 현재 날씨를 가져옵니다.",
parameters: {
type: "object",
properties: {
location: { type: "string", description: "도시 이름 (예: Seoul, Tokyo)" },
},
required: ["location"],
},
},
}
];
2단계: 유저의 질문과 함께 API 호출
이제 유저가 “서울 날씨 어때?”라고 물어보면, 텍스트와 함께 방금 만든 tools 설명서를 같이 OpenAI 모델에게 던져줍니다.
const response = await openai.chat.completions.create({
model: "gpt-4o-mini",
messages: [{ role: "user", content: "오늘 서울 날씨 어때?" }],
tools: tools, // "너 이런 스킬 쓸 수 있어!"라고 알려줌
tool_choice: "auto", // 모델이 알아서 스킬을 쓸지 말지 결정함
});
3단계: LLM의 판단 결과 확인하기
가장 놀라운 부분입니다. LLM은 “서울 날씨 어때?”라는 질문을 받고 고민합니다.
“내가 가진 지식으론 오늘 날씨는 모르는데… 아! 주인이 준
get_current_weather스킬을 쓰면 되겠구나! 필요한 입력값(location)은 ‘Seoul’이네!”
그리고 나서 텍스트 답변 대신, **어떤 함수를 어떤 인자(Arguments)를 넣어서 실행하라는 명령(JSON)**을 뱉어냅니다.
// response.choices[0].message.tool_calls[0] 출력 결과:
{
id: "call_abc123",
type: "function",
function: {
name: "get_current_weather",
arguments: '{"location": "Seoul"}' // 모델이 스스로 파싱해낸 인자값!
}
}
4단계: 실제 코드(Action) 실행
마지막으로, 우리 벡엔드 서버(Node.js 등)는 저 결과를 받아서 진짜 날씨 API(예: OpenWeatherMap)를 호출하여 24도, 맑음 이라는 결과 데이터를 얻어냅니다. 이 데이터를 다시 LLM에게 넘겨주면 비로소 “오늘 서울 날씨는 24도이며 매우 맑습니다!” 라는 예쁜 문장으로 대답하게 되는 것입니다.
🚀 인간과 AI의 진정한 협업 시대
지금까지 우리는 챗봇에게 단순히 질문을 던지고 답변을 읽는 데 만족했습니다. 하지만 이 **함수 호출(Function Calling)**이라는 스킬 시스템 덕분에 AI 에이전트는 비로소 물리적이고 소프트웨어적인 세상과 직접 상호작용하기 시작했습니다.
내가 해야 할 귀찮은 엑셀 매크로 작업, 매일 아침 뉴스를 스크랩해서 노션(Notion)에 정리하는 일, 슬랙 메시지를 보고 지라(Jira) 티켓을 생성하는 일. 이 모든 파이프라인이 AI 에이전트의 스킬 조합을 통해 완전히 자동화될 날이 머지않았습니다.
여러분은 AI 에이전트에게 어떤 도구(Skill)를 쥐어주고 싶으신가요?