AI 시리즈 면접 7: Skill을 규범적으로 정의하는 방법
1. Skill의 핵심 개념
Skill은 Agent(지능체) 또는 AI 시스템에 캡슐화된 실행 가능한 능력 단위입니다. 일반적으로 다음을 포함합니다:
- 트리거 조건: 언제 호출되는지 (예: 사용자 명령, 시스템 이벤트).
- 입력 매개변수: 수신해야 하는 데이터 또는 컨텍스트.
- 실행 로직: 구체적인 처리 단계 (예: API 호출, 코드 실행, 지식 베이스 조회).
- 출력 결과: 호출자에게 반환되는 응답 또는 동작.
2. Skill을 규범적으로 정의하는 단계
1. Skill의 이름과 설명 명확히 하기
- 이름: 짧고, 고유하며, 의미론적 (예:
search_web,send_email). - 설명: 한 문장으로 Skill의 기능을 설명하여 Agent가 자동으로 매칭할 수 있도록 함.
2. 입력 스키마 정의 (Input Schema)
JSON Schema 또는 유사한 형식을 사용하여 각 매개변수의 유형, 필수 여부, 기본값 및 제약 조건을 명확히 합니다.
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "검색 키워드",
"required": true
},
"max_results": {
"type": "integer",
"description": "최대 반환 결과 수",
"default": 10
}
}
}
3. 실행 로직 작성 (Execution Logic)
- 결정적 로직: 함수, API 또는 데이터베이스를 직접 호출.
- 비결정적 로직: LLM을 사용하여 응답 생성 (프롬프트 템플릿 제공 필요).
- 오류 처리: 타임아웃, 재시도, 폴백 전략 정의.
4. 출력 형식 정의 (Output Schema)
마찬가지로 JSON Schema를 사용하여 반환되는 데이터 구조를 설명합니다.
{
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": { "type": "string" },
"url": { "type": "string", "format": "uri" }
}
}
}
}
}
5. 추가 메타데이터 (Metadata)
- 버전 번호: 반복 관리 용이.
- 작성자/관리자: 책임 소재.
- 의존성: 필요한 외부 서비스 또는 라이브러리.
- 사용 제한: 빈도 제한, 권한 요구 사항 등.
3. 예시: 완전한 Skill 정의
name: "weather_query"
description: "도시 이름으로 현재 날씨 조회"
version: "1.0.0"
author: "AI Team"
input:
type: object
properties:
city:
type: string
description: "도시 이름, 예: '서울'"
required: true
unit:
type: string
enum: ["celsius", "fahrenheit"]
default: "celsius"
execute:
- step: "날씨 API 호출"
api: "https://api.weather.com/v1/current"
method: "GET"
params:
city: "{input.city}"
unit: "{input.unit}"
- step: "결과 포맷팅"
format: "현재 {city}의 온도는 {temperature}°{unit}입니다."
output:
type: object
properties:
temperature:
type: number
condition:
type: string
humidity:
type: number
4. 모범 사례
- 단일 책임: 각 Skill은 한 가지 작업만 수행하며, 과도한 결합을 피합니다.
- 자체 포함: 가능한 외부 전역 상태에 의존하지 않고, 입력이 곧 출력입니다.
- 테스트 가능: 모의 데이터 또는 샌드박스 환경을 제공하여 단위 테스트를 수행합니다.
- 문서화: 각 Skill에 대한 사용 설명서와 예제를 작성합니다.
위 방법으로 정의된 Skill은 AI Agent가 동적으로 스케줄링할 수 있을 뿐만 아니라 개발자가 시스템에 직접 통합하여 "한 번 작성, 어디서나 사용" 의 재사용 효과를 얻을 수 있습니다.
评论
暂无已展示的评论。
发表评论(匿名)