Tool vs Skill in AI Agents
AI agent 설계에서 자주 혼용되지만 본질적으로 다른 개념이다.
핵심 차이
Tool: LLM이 JSON으로 호출하는 함수. 실행 제어권이 코드에 있다.
Skill: LLM에게 주는 행동 지침. 실행 제어권이 LLM에 있다.
Tool
LLM이 tool_calls JSON을 뱉으면, 코드가 파싱해서 실제 함수를 실행하고 결과를 반환한다. what-is-agent-loop의 루프 안에서 동작한다.
# 코드로 구현
def search_web(query: str) -> str:
return requests.get(f"https://search.api/{query}").text
LLM은 이 함수의 존재를 schema(이름, 설명, 파라미터)로만 알고 있다. 실제 실행은 항상 코드가 한다.
Skill
system prompt 안에 텍스트로 삽입되는 행동 지침이다. 코드가 없다.
"사용자가 일정을 물어보면 항상 날짜를 구체적으로 확인하고,
애매한 표현(이번 주, 다음 주)은 실제 날짜로 변환해서 답해라."
openclaw의 SOUL.md, AGENTS.md가 대표적인 예다. .md 파일로 분리해서 관리하고, 서버 시작 시 system prompt에 로딩하는 패턴을 쓴다.
Skill을 "구현"한다는 것의 의미
Skill 구현 = system prompt를 잘 쓰는 것이다. 다만 파일로 분리하면:
- 버전 관리가 가능하다
- 런타임에 교체할 수 있다 (다른 페르소나, 다른 도메인)
- 여러 agent가 같은 skill을 공유할 수 있다
SearchAuto에서의 분류
| 항목 | 종류 | 형태 |
| ------------------------ | ----- | ----------------- |
| fetch_lms() | Tool | Python 함수 |
| search_notices() | Tool | Python 함수 |
| parse_date() | Tool | Python 함수 |
| "학사 일정 전문가처럼 행동해라" | Skill | system prompt 텍스트 |
| "한국어 날짜 표현을 실제 날짜로 변환해라" | Skill | system prompt 텍스트 |
요약
Tool은 LLM이 "무엇을 할 수 있는가"를 확장하고, Skill은 LLM이 "어떻게 행동하는가"를 결정한다.